diff options
Diffstat (limited to 'media/video/video_decode_engine.h')
-rw-r--r-- | media/video/video_decode_engine.h | 98 |
1 files changed, 18 insertions, 80 deletions
diff --git a/media/video/video_decode_engine.h b/media/video/video_decode_engine.h index 2d52b24..4599331 100644 --- a/media/video/video_decode_engine.h +++ b/media/video/video_decode_engine.h @@ -5,101 +5,39 @@ #ifndef MEDIA_VIDEO_VIDEO_DECODE_ENGINE_H_ #define MEDIA_VIDEO_VIDEO_DECODE_ENGINE_H_ -#include "base/callback.h" -#include "base/memory/scoped_ptr.h" +#include "base/memory/ref_counted.h" #include "media/base/media_export.h" -#include "media/base/video_decoder_config.h" -#include "media/base/video_frame.h" namespace media { class Buffer; -struct PipelineStatistics; +class VideoDecoderConfig; +class VideoFrame; class MEDIA_EXPORT VideoDecodeEngine { public: - struct MEDIA_EXPORT EventHandler { - public: - virtual ~EventHandler() {} - virtual void OnInitializeComplete(bool success) = 0; - virtual void OnUninitializeComplete() = 0; - virtual void OnFlushComplete() = 0; - virtual void OnSeekComplete() = 0; - virtual void OnError() = 0; - - // TODO(hclam): The following two methods shouldn't belong to this class - // because they are not video decode events but used to send decoded - // video frames and request video packets. - // - // Signal the user of VideoDecodeEngine to provide a video sample. - // - // In the normal running state, this method is called by the video decode - // engine to request video samples used for decoding. - // - // In the case when the video decode engine is flushing, this method is - // called to return video samples acquired by the video decode engine. - // - // |buffer| can be NULL in which case this method call is purely for - // requesting new video samples. If |buffer| is non-NULL, the buffer is - // returned to the owner at the same time as a request for video sample - // is made. - virtual void ProduceVideoSample(scoped_refptr<Buffer> buffer) = 0; - - // Signal the user of VideoDecodeEngine that a video frame is ready to - // be consumed or a video frame is returned to the owner. - // - // In the normal running state, this method is called to signal that - // |frame| contains a decoded video frame and is ready to be used. - // - // In the case of flushing and video frame is provided externally, this - // method is called to return the video frame object to the owner. - // The content of the video frame may be invalid. - virtual void ConsumeVideoFrame(scoped_refptr<VideoFrame> frame, - const PipelineStatistics& statistics) = 0; - }; - virtual ~VideoDecodeEngine() {} - // Initialize the engine with specified configuration. - // - // Engine should call EventHandler::OnInitializeDone() whether the - // initialization operation finished successfully or not. - virtual void Initialize(EventHandler* event_handler, - const VideoDecoderConfig& config) = 0; + // Initialize the engine with specified configuration, returning true if + // successful. + virtual bool Initialize(const VideoDecoderConfig& config) = 0; - // Uninitialize the engine. Engine should destroy all resources and call - // EventHandler::OnUninitializeComplete(). + // Uninitialize the engine, freeing all resources. Calls to Flush() or + // Decode() will have no effect afterwards. virtual void Uninitialize() = 0; - // Flush the engine. Engine should return all the buffers to owner ( which - // could be itself. ) then call EventHandler::OnFlushDone(). - virtual void Flush() = 0; - - // This method is used as a signal for the decode engine to preroll and - // issue read requests after Flush() is made. - virtual void Seek() = 0; - - // Provide a video sample to be used by the video decode engine. + // Decode the encoded video data and store the result (if any) into + // |video_frame|. Note that a frame may not always be produced if the + // decode engine has insufficient encoded data. In such circumstances, + // additional calls to Decode() may be required. // - // This method is called in response to ProvideVideoSample() called to the - // user. - virtual void ConsumeVideoSample(scoped_refptr<Buffer> buffer) = 0; + // Returns true if decoding was successful (includes zero length input and end + // of stream), false if a decoding error occurred. + virtual bool Decode(const scoped_refptr<Buffer>& buffer, + scoped_refptr<VideoFrame>* video_frame) = 0; - // Signal the video decode engine to produce a video frame or return the - // video frame object to the video decode engine. - // - // In the normal running state, this method is called by the user of the - // video decode engine to request a decoded video frame. If |frame| is - // NULL the video decode engine should allocate a video frame object. - // Otherwise video decode engine should try to use the video frame object - // provided as output. - // - // In flushing state and video frames are allocated internally this method - // is called by the user to return the video frame object. - // - // In response to this method call, ConsumeVideoFrame() is called with a - // video frame object containing decoded video content. - virtual void ProduceVideoFrame(scoped_refptr<VideoFrame> frame) = 0; + // Discard all pending data that has yet to be returned via Decode(). + virtual void Flush() = 0; }; } // namespace media |