Index: remoting/base/decoder.h |
diff --git a/remoting/base/decoder.h b/remoting/base/decoder.h |
index 82211a7f09d5170aad70857663e9718f2c7ed145..bcb5a54c483d5208319bfab1d281300f0c1790ff 100644 |
--- a/remoting/base/decoder.h |
+++ b/remoting/base/decoder.h |
@@ -5,6 +5,8 @@ |
#ifndef REMOTING_BASE_DECODER_H_ |
#define REMOTING_BASE_DECODER_H_ |
+#include <vector> |
+ |
#include "base/task.h" |
#include "base/scoped_ptr.h" |
#include "gfx/rect.h" |
@@ -21,34 +23,39 @@ typedef std::vector<gfx::Rect> UpdatedRects; |
// TODO(ajwong): Beef up this documentation once the API stablizes. |
class Decoder { |
public: |
+ // DecodeResult is returned from DecodePacket() and indicates current state |
+ // of the decoder. DECODE_DONE means that last packet for the frame was |
+ // processed, and the frame can be displayed now. DECODE_IN_PROGRESS |
+ // indicates that the decoder must receive more data before the frame can be |
+ // displayed. DECODE_ERROR is returned if there was an error in the stream. |
+ enum DecodeResult { |
+ DECODE_ERROR = -1, |
+ DECODE_IN_PROGRESS, |
+ DECODE_DONE, |
+ }; |
+ |
Decoder() {} |
virtual ~Decoder() {} |
- // TODO(ajwong): This API is incorrect in the face of a streaming decode |
- // protocol like VP8. However, it breaks the layering abstraction by |
- // depending on the network packet protocol buffer type. I'm going to go |
- // forward with it as is, and then refactor again to support streaming |
- // decodes. |
- |
// Initializes the decoder to draw into the given |frame|. The |clip| |
// specifies the region to draw into. The clip region must fit inside |
- // the dimensions of frame. Failure to do so will CHECK Fail. |
- // |
- // TODO(ajwong): Should this take the source pixel format? |
- // TODO(ajwong): Should the protocol be split into basic-types followed |
- // by packet types? Basic types might include the format enum below. |
- virtual void Initialize(scoped_refptr<media::VideoFrame> frame, |
- const gfx::Rect& clip, int bytes_per_src_pixel) = 0; |
+ // the dimensions of frame. Failure to do so will CHECK fail. |
+ virtual void Initialize(scoped_refptr<media::VideoFrame> frame) = 0; |
+ |
+ // Feeds more data into the decoder. |
+ virtual DecodeResult DecodePacket(const VideoPacket* packet) = 0; |
+ |
+ // Returns rects that were updated in the last frame. Can be called only |
+ // after DecodePacket returned DECODE_DONE. Caller keeps ownership of |
+ // |rects|. |rects| is kept empty if whole screen needs to be updated. |
+ virtual void GetUpdatedRects(UpdatedRects* rects) = 0; |
// Reset the decoder to an uninitialized state. Release all references to |
// the initialized |frame|. Initialize() must be called before the decoder |
// is used again. |
virtual void Reset() = 0; |
- // Feeds more data into the decoder. |
- virtual void DecodeBytes(const std::string& encoded_bytes) = 0; |
- |
- // Returns true if decoder is ready to accept data via ProcessRectangleData. |
+ // Returns true if decoder is ready to accept data via DecodePacket. |
virtual bool IsReadyForData() = 0; |
virtual VideoPacketFormat::Encoding Encoding() = 0; |