Chromium Code Reviews| Index: media/filters/video_frame_stream.h |
| diff --git a/media/filters/video_frame_stream.h b/media/filters/video_frame_stream.h |
| index c384bca7b8858b77140b61c391a720dbbe75ce48..0fbf1e2d768c2e469316b0b6c179fc4f5a26c3cc 100644 |
| --- a/media/filters/video_frame_stream.h |
| +++ b/media/filters/video_frame_stream.h |
| @@ -5,8 +5,6 @@ |
| #ifndef MEDIA_FILTERS_VIDEO_FRAME_STREAM_H_ |
| #define MEDIA_FILTERS_VIDEO_FRAME_STREAM_H_ |
| -#include <list> |
| - |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| @@ -19,6 +17,8 @@ |
| #include "media/base/pipeline_status.h" |
| #include "media/base/video_decoder.h" |
| +#include "media/base/video_decoder_config.h" |
|
scherkus (not reviewing)
2013/07/09 01:18:39
fix to remove whitespace / remove include if not n
xhwang
2013/07/09 20:00:04
Done.
|
| + |
| namespace base { |
| class MessageLoopProxy; |
| } |
| @@ -30,7 +30,7 @@ class VideoDecoderSelector; |
| // Wraps a DemuxerStream and a list of VideoDecoders and provides decoded |
| // VideoFrames to its client (e.g. VideoRendererBase). |
| -class MEDIA_EXPORT VideoFrameStream : public DemuxerStream { |
| +class MEDIA_EXPORT VideoFrameStream { |
| public: |
| // Indicates completion of VideoFrameStream initialization. |
| typedef base::Callback<void(bool success, bool has_alpha)> InitCB; |
| @@ -50,6 +50,7 @@ class MEDIA_EXPORT VideoFrameStream : public DemuxerStream { |
| // |read_cb| is always called asynchronously. This method should only be |
| // called after initialization has succeeded and must not be called during |
| // any pending Reset() and/or Stop(). |
| + // TODO(xhwang): Rename this back to Read(). |
| void ReadFrame(const VideoDecoder::ReadCB& read_cb); |
| // Resets the decoder, flushes all decoded frames and/or internal buffers, |
| @@ -70,19 +71,13 @@ class MEDIA_EXPORT VideoFrameStream : public DemuxerStream { |
| // a VideoFrame. |
| bool CanReadWithoutStalling() const; |
| - // DemuxerStream implementation. |
| - virtual void Read(const ReadCB& read_cb) OVERRIDE; |
| - virtual AudioDecoderConfig audio_decoder_config() OVERRIDE; |
| - virtual VideoDecoderConfig video_decoder_config() OVERRIDE; |
| - virtual Type type() OVERRIDE; |
| - virtual void EnableBitstreamConverter() OVERRIDE; |
| - |
| private: |
| enum State { |
| STATE_UNINITIALIZED, |
| STATE_INITIALIZING, |
| - STATE_NORMAL, |
| + STATE_NORMAL, // Includes idle, pending decoder decode/reset/stop. |
| STATE_FLUSHING_DECODER, |
| + STATE_PENDING_DEMUXER_READ, |
| STATE_REINITIALIZING_DECODER, |
| STATE_STOPPED, |
| STATE_ERROR |
| @@ -95,13 +90,29 @@ class MEDIA_EXPORT VideoFrameStream : public DemuxerStream { |
| scoped_ptr<VideoDecoder> selected_decoder, |
| scoped_ptr<DecryptingDemuxerStream> decrypting_demuxer_stream); |
| - // Callback for VideoDecoder::Read(). |
| + // Satisfy pending |read_cb_| with |status| and |frame|. |
| + void SatisfyRead(VideoDecoder::Status status, |
| + const scoped_refptr<VideoFrame>& frame); |
| + |
| + // Abort pending |read_cb_|. |
| + void AbortRead(); |
| + |
| + // Decodes |buffer| and returns the result via OnFrameReady(). |
| + void Decode(const scoped_refptr<DecoderBuffer>& buffer); |
| + |
| + // Flushes the decoder with an EOS buffer to retrieve internally buffered |
| + // video frames. |
| + void FlushDecoder(); |
| + |
| + // Callback for VideoDecoder::Decode(). |
| void OnFrameReady(const VideoDecoder::Status status, |
| const scoped_refptr<VideoFrame>& frame); |
| + // Reads a buffer from |stream_| and returns the result via OnBufferReady(). |
| + void ReadFromDemuxerStream(); |
| + |
| // Callback for DemuxerStream::Read(). |
| - void OnBufferReady(const DemuxerStream::ReadCB& demuxer_read_cb, |
| - DemuxerStream::Status status, |
| + void OnBufferReady(DemuxerStream::Status status, |
| const scoped_refptr<DecoderBuffer>& buffer); |
| void ReinitializeDecoder(); |