Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Unified Diff: remoting/base/decoder.h

Issue 4476003: Add VideoPacket struct for video packets. Refactor Decode interface to use it. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/base/capture_data.cc ('k') | remoting/base/decoder_row_based.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « remoting/base/capture_data.cc ('k') | remoting/base/decoder_row_based.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698