Index: remoting/client/rectangle_update_decoder.h |
diff --git a/remoting/client/rectangle_update_decoder.h b/remoting/client/rectangle_update_decoder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5f18e12123d413aa397a09fc26fc48a13db6006e |
--- /dev/null |
+++ b/remoting/client/rectangle_update_decoder.h |
@@ -0,0 +1,60 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H |
+#define REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H |
+ |
+#include "base/scoped_ptr.h" |
+#include "base/task.h" |
+#include "media/base/video_frame.h" |
+#include "remoting/base/decoder.h" // For UpdatedRects. |
+ |
+class MessageLoop; |
+ |
+namespace remoting { |
+ |
+class FrameConsumer; |
+class RectangleFormat; |
+class RectangleUpdatePacket; |
+ |
+// TODO(ajwong): Re-examine this API, especially with regards to how error |
+// conditions on each step are reported. Should they be CHECKs? Logs? Other? |
+class RectangleUpdateDecoder { |
+ public: |
+ RectangleUpdateDecoder(MessageLoop* message_loop, |
+ FrameConsumer* consumer); |
+ ~RectangleUpdateDecoder(); |
+ |
+ // Decodes the contents of |packet| calling OnPartialFrameOutput() in the |
+ // regsitered as data is avaialable. DecodePacket may keep a reference to |
+ // |packet| so the |packet| must remain alive and valid until |done| is |
+ // executed. |
+ // |
+ // TODO(ajwong): Should packet be a const pointer to make the lifetime |
+ // more clear? |
+ void DecodePacket(const RectangleUpdatePacket& packet, Task* done); |
+ |
+ private: |
+ static bool IsValidPacket(const RectangleUpdatePacket& packet); |
+ |
+ void InitializeDecoder(const RectangleFormat& format, Task* done); |
+ |
+ void ProcessPacketData(const RectangleUpdatePacket& packet, Task* done); |
+ |
+ // Pointers to infrastructure objects. Not owned. |
+ MessageLoop* message_loop_; |
+ FrameConsumer* consumer_; |
+ |
+ scoped_ptr<Decoder> decoder_; |
+ UpdatedRects updated_rects_; |
+ |
+ // Framebuffer for the decoder. |
+ scoped_refptr<media::VideoFrame> frame_; |
+}; |
+ |
+} // namespace remoting |
+ |
+DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::RectangleUpdateDecoder); |
+ |
+#endif // REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H |