| Index: media/renderers/video_renderer_impl.cc
|
| diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc
|
| index d19399197acd391464c3e0e6f0f2c57c30bfd999..43c26a3686bb4219927e7fe1c5cddf321a6c91c4 100644
|
| --- a/media/renderers/video_renderer_impl.cc
|
| +++ b/media/renderers/video_renderer_impl.cc
|
| @@ -44,20 +44,23 @@ static bool ShouldUseVideoRenderingPath() {
|
| }
|
|
|
| VideoRendererImpl::VideoRendererImpl(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
|
| + const scoped_refptr<base::TaskRunner>& worker_task_runner,
|
| VideoRendererSink* sink,
|
| ScopedVector<VideoDecoder> decoders,
|
| bool drop_frames,
|
| const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories,
|
| const scoped_refptr<MediaLog>& media_log)
|
| - : task_runner_(task_runner),
|
| + : task_runner_(media_task_runner),
|
| use_new_video_renderering_path_(ShouldUseVideoRenderingPath()),
|
| sink_(sink),
|
| sink_started_(false),
|
| video_frame_stream_(
|
| - new VideoFrameStream(task_runner, decoders.Pass(), media_log)),
|
| + new VideoFrameStream(media_task_runner, decoders.Pass(), media_log)),
|
| gpu_memory_buffer_pool_(
|
| - new GpuMemoryBufferVideoFramePool(task_runner, gpu_factories)),
|
| + new GpuMemoryBufferVideoFramePool(media_task_runner,
|
| + worker_task_runner,
|
| + gpu_factories)),
|
| media_log_(media_log),
|
| low_delay_(false),
|
| received_end_of_stream_(false),
|
| @@ -76,8 +79,7 @@ VideoRendererImpl::VideoRendererImpl(
|
| time_progressing_(false),
|
| render_first_frame_and_stop_(false),
|
| posted_maybe_stop_after_first_paint_(false),
|
| - weak_factory_(this) {
|
| -}
|
| + weak_factory_(this) {}
|
|
|
| VideoRendererImpl::~VideoRendererImpl() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| @@ -474,6 +476,20 @@ void VideoRendererImpl::DropNextReadyFrame_Locked() {
|
| base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| +void VideoRendererImpl::FrameReadyForCopyingToGpuMemoryBuffers(
|
| + VideoFrameStream::Status status,
|
| + const scoped_refptr<VideoFrame>& frame) {
|
| + if (status != VideoFrameStream::OK || start_timestamp_ > frame->timestamp()) {
|
| + VideoRendererImpl::FrameReady(status, frame);
|
| + return;
|
| + }
|
| +
|
| + DCHECK(frame);
|
| + gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
|
| + frame, base::Bind(&VideoRendererImpl::FrameReady,
|
| + weak_factory_.GetWeakPtr(), status));
|
| +}
|
| +
|
| void VideoRendererImpl::FrameReady(VideoFrameStream::Status status,
|
| const scoped_refptr<VideoFrame>& frame) {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| @@ -685,8 +701,10 @@ void VideoRendererImpl::AttemptRead_Locked() {
|
| switch (state_) {
|
| case kPlaying:
|
| pending_read_ = true;
|
| - video_frame_stream_->Read(base::Bind(&VideoRendererImpl::FrameReady,
|
| - weak_factory_.GetWeakPtr()));
|
| +
|
| + video_frame_stream_->Read(
|
| + base::Bind(&VideoRendererImpl::FrameReady,
|
| + weak_factory_.GetWeakPtr()));
|
| return;
|
|
|
| case kUninitialized:
|
|
|