| Index: media/filters/video_renderer_base.h
|
| diff --git a/media/filters/video_renderer_base.h b/media/filters/video_renderer_base.h
|
| index 2125e4586d3a568af41ec8d5e3afda505f8d53ab..c604f0839398e05613be9b5463b7bc85123ea424 100644
|
| --- a/media/filters/video_renderer_base.h
|
| +++ b/media/filters/video_renderer_base.h
|
| @@ -88,25 +88,16 @@ class MEDIA_EXPORT VideoRendererBase
|
| // class executes on.
|
| virtual void OnFrameAvailable() = 0;
|
|
|
| - void ReadInput(scoped_refptr<VideoFrame> frame);
|
| -
|
| private:
|
| - // Callback from video decoder to deliver decoded video frames and decrements
|
| - // |pending_reads_|.
|
| - void ConsumeVideoFrame(scoped_refptr<VideoFrame> frame);
|
| -
|
| - // Helper method that schedules an asynchronous read from the decoder and
|
| - // increments |pending_reads_|.
|
| - //
|
| - // Safe to call from any thread.
|
| - void ScheduleRead_Locked();
|
| + // Callback from the video decoder delivering decoded video frames.
|
| + void FrameReady(scoped_refptr<VideoFrame> frame);
|
|
|
| - // Helper function to finished "flush" operation
|
| - void OnFlushDone_Locked();
|
| + // Helper method that schedules an asynchronous read from the decoder as long
|
| + // as there isn't a pending read and we have capacity.
|
| + void AttemptRead_Locked();
|
|
|
| - // Helper method that flushes all video frame in "ready queue" including
|
| - // current frame into "done queue".
|
| - void FlushBuffers_Locked();
|
| + // Attempts to complete flushing and transition into the flushed state.
|
| + void AttemptFlush_Locked();
|
|
|
| // Calculates the duration to sleep for based on |current_frame_|'s timestamp,
|
| // the next frame timestamp (may be NULL), and the provided playback rate.
|
| @@ -119,7 +110,7 @@ class MEDIA_EXPORT VideoRendererBase
|
| void EnterErrorState_Locked(PipelineStatus status);
|
|
|
| // Helper function that flushes the buffers when a Stop() or error occurs.
|
| - void DoStopOrErrorFlush_Locked();
|
| + void DoStopOrError_Locked();
|
|
|
| // Used for accessing data members.
|
| base::Lock lock_;
|
| @@ -128,10 +119,20 @@ class MEDIA_EXPORT VideoRendererBase
|
|
|
| // Queue of incoming frames as well as the current frame since the last time
|
| // OnFrameAvailable() was called.
|
| - typedef std::deque< scoped_refptr<VideoFrame> > VideoFrameQueue;
|
| + typedef std::deque<scoped_refptr<VideoFrame> > VideoFrameQueue;
|
| VideoFrameQueue frames_queue_ready_;
|
| - VideoFrameQueue frames_queue_done_;
|
| +
|
| + // The current frame available to subclasses for rendering via
|
| + // GetCurrentFrame(). |current_frame_| can only be altered when
|
| + // |pending_paint_| is false.
|
| scoped_refptr<VideoFrame> current_frame_;
|
| +
|
| + // The previous |current_frame_| and is returned via GetCurrentFrame() in the
|
| + // situation where all frames were deallocated (i.e., during a flush).
|
| + //
|
| + // TODO(scherkus): remove this after getting rid of Get/PutCurrentFrame() in
|
| + // favour of passing ownership of the current frame to the renderer via
|
| + // callback.
|
| scoped_refptr<VideoFrame> last_available_frame_;
|
|
|
| // Used to signal |thread_| as frames are added to |frames_|. Rule of thumb:
|
| @@ -182,12 +183,16 @@ class MEDIA_EXPORT VideoRendererBase
|
| // Previous time returned from the pipeline.
|
| base::TimeDelta previous_time_;
|
|
|
| - // Keeps track of our pending buffers. We *must* have no pending reads
|
| - // before executing the flush callback; We decrement it each time we receive
|
| - // a buffer and increment it each time we send a buffer out. therefore if
|
| - // decoder provides buffer, |pending_reads_| is always non-positive and if
|
| - // renderer provides buffer, |pending_reads_| is always non-negative.
|
| - int pending_reads_;
|
| + // Keep track of various pending operations:
|
| + // - |pending_read_| is true when there's an active video decoding request.
|
| + // - |pending_paint_| is true when |current_frame_| is currently being
|
| + // accessed by the subclass.
|
| + // - |pending_paint_with_last_available_| is true when
|
| + // |last_available_frame_| is currently being accessed by the subclass.
|
| + //
|
| + // Flushing cannot complete until both |pending_read_| and |pending_paint_|
|
| + // are false.
|
| + bool pending_read_;
|
| bool pending_paint_;
|
| bool pending_paint_with_last_available_;
|
|
|
| @@ -200,6 +205,8 @@ class MEDIA_EXPORT VideoRendererBase
|
|
|
| base::TimeDelta seek_timestamp_;
|
|
|
| + VideoDecoder::ReadCB read_cb_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(VideoRendererBase);
|
| };
|
|
|
|
|