| Index: media/filters/gpu_video_decoder.cc
|
| diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc
|
| index 54845214bb138195a69ba075b5582318230d2f2f..b6aef79135bf5672b1b988143ed691a580e5760e 100644
|
| --- a/media/filters/gpu_video_decoder.cc
|
| +++ b/media/filters/gpu_video_decoder.cc
|
| @@ -154,7 +154,8 @@ void GpuVideoDecoder::Initialize(const VideoDecoderConfig& config,
|
| BindToCurrentLoop(orig_status_cb));
|
|
|
| bool previously_initialized = config_.IsValidConfig();
|
| -#if !defined(OS_CHROMEOS) && !defined(OS_WIN)
|
| +#if !defined(OS_CHROMEOS) && !defined(OS_WIN) && \
|
| + !(defined(OS_LINUX) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11))
|
| if (previously_initialized) {
|
| // TODO(xhwang): Make GpuVideoDecoder reinitializable.
|
| // See http://crbug.com/233608
|
| @@ -424,27 +425,21 @@ void GpuVideoDecoder::DismissPictureBuffer(int32 id) {
|
|
|
| static void ReadPixelsSyncInner(
|
| const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories,
|
| - uint32 texture_id,
|
| - const gfx::Rect& visible_rect,
|
| + const scoped_refptr<VideoFrame>& frame,
|
| const SkBitmap& pixels,
|
| base::WaitableEvent* event) {
|
| - factories->ReadPixels(texture_id, visible_rect, pixels);
|
| + factories->ReadPixels(frame, pixels);
|
| event->Signal();
|
| }
|
|
|
| static void ReadPixelsSync(
|
| const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories,
|
| - uint32 texture_id,
|
| - const gfx::Rect& visible_rect,
|
| + const scoped_refptr<VideoFrame>& frame,
|
| const SkBitmap& pixels) {
|
| base::WaitableEvent event(true, false);
|
| - if (!factories->GetTaskRunner()->PostTask(FROM_HERE,
|
| - base::Bind(&ReadPixelsSyncInner,
|
| - factories,
|
| - texture_id,
|
| - visible_rect,
|
| - pixels,
|
| - &event)))
|
| + if (!factories->GetTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ReadPixelsSyncInner, factories, frame, pixels, &event)))
|
| return;
|
| event.Wait();
|
| }
|
| @@ -480,7 +475,7 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
|
| visible_rect,
|
| natural_size,
|
| timestamp,
|
| - base::Bind(&ReadPixelsSync, factories_, pb.texture_id(), visible_rect)));
|
| + base::Bind(&ReadPixelsSync, factories_)));
|
| CHECK_GT(available_pictures_, 0);
|
| --available_pictures_;
|
| bool inserted =
|
| @@ -514,7 +509,8 @@ void GpuVideoDecoder::EnqueueFrameAndTriggerFrameDelivery(
|
|
|
| void GpuVideoDecoder::ReusePictureBuffer(
|
| int64 picture_buffer_id,
|
| - scoped_ptr<gpu::MailboxHolder> mailbox_holder) {
|
| + scoped_ptr<gpu::MailboxHolder> mailbox_holder,
|
| + const std::vector<uint32>& release_sync_points) {
|
| DVLOG(3) << "ReusePictureBuffer(" << picture_buffer_id << ")";
|
| DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent();
|
|
|
| @@ -538,7 +534,9 @@ void GpuVideoDecoder::ReusePictureBuffer(
|
| return;
|
| }
|
|
|
| - factories_->WaitSyncPoint(mailbox_holder->sync_point);
|
| + for (size_t i = 0; i < release_sync_points.size(); i++)
|
| + factories_->WaitSyncPoint(release_sync_points[i]);
|
| +
|
| ++available_pictures_;
|
|
|
| vda_->ReusePictureBuffer(picture_buffer_id);
|
|
|