| Index: media/filters/ffmpeg_video_decode_engine.h
|
| diff --git a/media/filters/ffmpeg_video_decode_engine.h b/media/filters/ffmpeg_video_decode_engine.h
|
| index b12c87ef4331f2d2832357082cc0185854083417..fbb465aab1ba2a1f248af13834078268c3127f65 100644
|
| --- a/media/filters/ffmpeg_video_decode_engine.h
|
| +++ b/media/filters/ffmpeg_video_decode_engine.h
|
| @@ -5,6 +5,8 @@
|
| #ifndef MEDIA_FILTERS_FFMPEG_VIDEO_DECODE_ENGINE_H_
|
| #define MEDIA_FILTERS_FFMPEG_VIDEO_DECODE_ENGINE_H_
|
|
|
| +#include <deque>
|
| +
|
| #include "base/scoped_ptr.h"
|
| #include "media/ffmpeg/ffmpeg_common.h"
|
| #include "media/filters/video_decode_engine.h"
|
| @@ -16,6 +18,8 @@ struct AVStream;
|
|
|
| namespace media {
|
|
|
| +class FFmpegVideoAllocator;
|
| +
|
| class FFmpegVideoDecodeEngine : public VideoDecodeEngine {
|
| public:
|
| FFmpegVideoDecodeEngine();
|
| @@ -40,12 +44,39 @@ class FFmpegVideoDecodeEngine : public VideoDecodeEngine {
|
| VideoFrame::Format GetSurfaceFormat() const;
|
| private:
|
| void DecodeFrame(scoped_refptr<Buffer> buffer);
|
| + void ReadInput();
|
| + void TryToFinishPendingFlush();
|
|
|
| AVCodecContext* codec_context_;
|
| AVStream* av_stream_;
|
| scoped_ptr_malloc<AVFrame, ScopedPtrAVFree> av_frame_;
|
| VideoDecodeEngine::EventHandler* event_handler_;
|
|
|
| + // Whether direct rendering is used.
|
| + bool direct_rendering_;
|
| +
|
| + // Used when direct rendering is used to recycle output buffers.
|
| + scoped_ptr<FFmpegVideoAllocator> allocator_;
|
| +
|
| + // Indicate how many buffers are pending on input port of this filter:
|
| + // Increment when engine receive one input packet from demuxer;
|
| + // Decrement when engine send one input packet to demuxer;
|
| + int pending_input_buffers_;
|
| +
|
| + // Indicate how many buffers are pending on output port of this filter:
|
| + // Increment when engine receive one output frame from renderer;
|
| + // Decrement when engine send one output frame to renderer;
|
| + int pending_output_buffers_;
|
| +
|
| + // Whether end of stream had been reached at output side.
|
| + bool output_eos_reached_;
|
| +
|
| + // Used when direct rendering is disabled to hold available output buffers.
|
| + std::deque<scoped_refptr<VideoFrame> > frame_queue_available_;
|
| +
|
| + // Whether flush operation is pending.
|
| + bool flush_pending_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(FFmpegVideoDecodeEngine);
|
| };
|
|
|
|
|