summaryrefslogtreecommitdiffstats
path: root/remoting/base/decoder.h
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-09 23:22:20 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-09 23:22:20 +0000
commit3adf1b2a65a85ff7d4b55cd57a4e400f104d27dd (patch)
tree235aee1f595583297e057b058a29d2ed24d9da92 /remoting/base/decoder.h
parent9db9173baebf27623ce30770696f84a3fec74259 (diff)
downloadchromium_src-3adf1b2a65a85ff7d4b55cd57a4e400f104d27dd.zip
chromium_src-3adf1b2a65a85ff7d4b55cd57a4e400f104d27dd.tar.gz
chromium_src-3adf1b2a65a85ff7d4b55cd57a4e400f104d27dd.tar.bz2
Add VideoPacket struct for video packets. Refactor Decode interface to use it.
Various cleanups. BUG=None TEST=Unittests. Review URL: http://codereview.chromium.org/4476003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65590 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/base/decoder.h')
-rw-r--r--remoting/base/decoder.h41
1 files changed, 24 insertions, 17 deletions
diff --git a/remoting/base/decoder.h b/remoting/base/decoder.h
index 82211a7..bcb5a54 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;