| 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..5673cff1426f4b9f701937cd414bf9d8dc90ae65 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"
|
| @@ -30,7 +28,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 +48,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 +69,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 +88,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();
|
|
|