Chromium Code Reviews| Index: media/filters/gpu_video_decoder.h |
| diff --git a/media/filters/gpu_video_decoder.h b/media/filters/gpu_video_decoder.h |
| index 290dec85c332bd75c98b7cc50daff9e748b9eb3e..d21911a96eb3a252a40158c15b1dc49800ae1fc4 100644 |
| --- a/media/filters/gpu_video_decoder.h |
| +++ b/media/filters/gpu_video_decoder.h |
| @@ -44,13 +44,15 @@ class MEDIA_EXPORT GpuVideoDecoder |
| // VideoDecoder implementation. |
| virtual void Initialize(const VideoDecoderConfig& config, |
| bool live_mode, |
| - const PipelineStatusCB& status_cb) OVERRIDE; |
| + const PipelineStatusCB& status_cb, |
| + const OutputCB& output_cb) OVERRIDE; |
| virtual void Decode(const scoped_refptr<DecoderBuffer>& buffer, |
| const DecodeCB& decode_cb) OVERRIDE; |
| virtual void Reset(const base::Closure& closure) OVERRIDE; |
| virtual void Stop() OVERRIDE; |
| virtual bool NeedsBitstreamConversion() const OVERRIDE; |
| virtual bool CanReadWithoutStalling() const OVERRIDE; |
| + virtual int GetMaxDecodeRequests() const OVERRIDE; |
| // VideoDecodeAccelerator::Client implementation. |
| virtual void ProvidePictureBuffers(uint32 count, |
| @@ -83,25 +85,19 @@ class MEDIA_EXPORT GpuVideoDecoder |
| }; |
| // A SHMBuffer and the DecoderBuffer its data came from. |
| - struct BufferPair { |
| - BufferPair(SHMBuffer* s, const scoped_refptr<DecoderBuffer>& b); |
| - ~BufferPair(); |
| + struct PendingDecodeBuffer { |
|
xhwang
2014/05/29 22:15:14
Shall this be PendingDecode-r-Buffer?
Sergey Ulanov
2014/06/03 00:08:11
Yes
|
| + PendingDecodeBuffer(SHMBuffer* s, |
| + const scoped_refptr<DecoderBuffer>& b, |
| + const DecodeCB& done_cb); |
| + ~PendingDecodeBuffer(); |
| SHMBuffer* shm_buffer; |
| scoped_refptr<DecoderBuffer> buffer; |
| + DecodeCB done_cb; |
| }; |
| typedef std::map<int32, PictureBuffer> PictureBufferMap; |
| - // Return true if more decode work can be piled on to the VDA. |
| - bool CanMoreDecodeWorkBeDone(); |
| - |
| - // Enqueue a frame for later delivery (or drop it on the floor if a |
| - // vda->Reset() is in progress) and trigger out-of-line delivery of the oldest |
| - // ready frame to the client if there is a pending read. A NULL |frame| |
| - // merely triggers delivery, and requires the ready_video_frames_ queue not be |
| - // empty. |
| - void EnqueueFrameAndTriggerFrameDelivery( |
| - const scoped_refptr<VideoFrame>& frame); |
| + void DeliverFrame( const scoped_refptr<VideoFrame>& frame); |
|
xhwang
2014/05/29 22:15:14
nit: drop extra space before "const"
Sergey Ulanov
2014/06/03 00:08:11
Done.
|
| // Static method is to allow it to run even after GVD is deleted. |
| static void ReleaseMailbox( |
| @@ -141,9 +137,11 @@ class MEDIA_EXPORT GpuVideoDecoder |
| // occurs. |
| scoped_ptr<VideoDecodeAccelerator> vda_; |
| - // Callbacks that are !is_null() only during their respective operation being |
| - // asynchronously executed. |
| - DecodeCB pending_decode_cb_; |
| + OutputCB output_cb_; |
| + |
| + DecodeCB flush_cb_; |
|
xhwang
2014/05/29 22:15:14
Usually people associate "flush" with "Reset". So
Sergey Ulanov
2014/06/03 00:08:11
I think Flush and Reset are distinct operations. V
|
| + |
| + // Not null only during reset. |
| base::Closure pending_reset_cb_; |
| State state_; |
| @@ -157,7 +155,7 @@ class MEDIA_EXPORT GpuVideoDecoder |
| scoped_refptr<MediaLog> media_log_; |
| - std::map<int32, BufferPair> bitstream_buffers_in_decoder_; |
| + std::map<int32, PendingDecodeBuffer> bitstream_buffers_in_decoder_; |
| PictureBufferMap assigned_picture_buffers_; |
| // PictureBuffers given to us by VDA via PictureReady, which we sent forward |
| // as VideoFrames to be rendered via decode_cb_, and which will be returned |
| @@ -182,7 +180,6 @@ class MEDIA_EXPORT GpuVideoDecoder |
| // picture_buffer_id and the frame wrapping the corresponding Picture, for |
| // frames that have been decoded but haven't been requested by a Decode() yet. |
| - std::list<scoped_refptr<VideoFrame> > ready_video_frames_; |
| int32 next_picture_buffer_id_; |
| int32 next_bitstream_buffer_id_; |