| Index: media/filters/video_frame_stream.h
|
| diff --git a/media/filters/video_frame_stream.h b/media/filters/video_frame_stream.h
|
| index f7639dd9eee96ea6c3d7becc85f84eddaddbe1db..4e4a71a245aa3171ebfc5514522d513b5106b986 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"
|
| +
|
| 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 HasOutputFrameAvailable() const;
|
|
|
| - // DemuxerStream implementation.
|
| - virtual void Read(const ReadCB& read_cb) OVERRIDE;
|
| - virtual const AudioDecoderConfig& audio_decoder_config() OVERRIDE;
|
| - virtual const 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();
|
|
|