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

Unified Diff: media/base/filters.h

Issue 10248002: Report VideoDecoder status through ReadCB instead of through FilterHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename VideoDecoder::Status to VideoDecoder::DecoderStatus since Status has been polluted by Xlib.h. Created 8 years, 8 months 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 | « content/renderer/media/rtc_video_decoder_unittest.cc ('k') | media/base/filters.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/filters.h
diff --git a/media/base/filters.h b/media/base/filters.h
index b32234f924369adde0fdf9fc7d2618b9f0604002..0126995cb597ebab23413221407421ca20769fb0 100644
--- a/media/base/filters.h
+++ b/media/base/filters.h
@@ -109,6 +109,13 @@ class MEDIA_EXPORT Filter : public base::RefCountedThreadSafe<Filter> {
class MEDIA_EXPORT VideoDecoder : public Filter {
public:
+ // Status codes for read operations on VideoDecoder.
+ enum DecoderStatus {
+ kOk, // Everything went as planned.
+ kDecodeError, // Decoding error happened.
+ kDecryptError // Decrypting error happened.
+ };
+
// Initialize a VideoDecoder with the given DemuxerStream, executing the
// callback upon completion.
// statistics_cb is used to update global pipeline statistics.
@@ -116,16 +123,21 @@ class MEDIA_EXPORT VideoDecoder : public Filter {
const PipelineStatusCB& status_cb,
const StatisticsCB& statistics_cb) = 0;
- // Request a frame to be decoded and returned via the provided callback.
- // Only one read may be in flight at any given time.
+ // Requests a frame to be decoded. The status of the decoder and decoded frame
+ // are returned via the provided callback. Only one read may be in flight at
+ // any given time.
//
// Implementations guarantee that the callback will not be called from within
// this method.
//
- // Non-NULL frames contain decoded video data or may indicate the end of
- // the stream. NULL video frames indicate an aborted read. This can happen if
- // the DemuxerStream gets flushed and doesn't have any more data to return.
- typedef base::Callback<void(scoped_refptr<VideoFrame>)> ReadCB;
+ // If the returned status is not kOk, some error has occurred in the video
+ // decoder. In this case, the returned frame should always be NULL.
+ //
+ // Otherwise, the video decoder is in good shape. In this case, Non-NULL
+ // frames contain decoded video data or may indicate the end of the stream.
+ // NULL video frames indicate an aborted read. This can happen if the
+ // DemuxerStream gets flushed and doesn't have any more data to return.
+ typedef base::Callback<void(DecoderStatus, scoped_refptr<VideoFrame>)> ReadCB;
virtual void Read(const ReadCB& read_cb) = 0;
// Returns the natural width and height of decoded video in pixels.
@@ -158,11 +170,12 @@ class MEDIA_EXPORT VideoDecoder : public Filter {
// These functions will be removed later. Declare here to make sure they are
// not called from VideoDecoder interface anymore.
// TODO(xhwang): Remove them when VideoDecoder is not a Filter any more.
- // See bug: crbug.com/108340
+ // See bug: http://crbug.com/108340
virtual void Play(const base::Closure& callback) OVERRIDE;
virtual void Pause(const base::Closure& callback) OVERRIDE;
virtual void Seek(base::TimeDelta time,
const PipelineStatusCB& callback) OVERRIDE;
+ virtual FilterHost* host() OVERRIDE;
};
class MEDIA_EXPORT VideoRenderer : public Filter {
« no previous file with comments | « content/renderer/media/rtc_video_decoder_unittest.cc ('k') | media/base/filters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698