Index: content/renderer/media/rtc_video_decoder.cc |
diff --git a/content/renderer/media/rtc_video_decoder.cc b/content/renderer/media/rtc_video_decoder.cc |
index 0e9086fdd5fe9a11785444a14fe3ab0275056463..c774be27c575a45173f98d27e799c9a89da7d9d9 100644 |
--- a/content/renderer/media/rtc_video_decoder.cc |
+++ b/content/renderer/media/rtc_video_decoder.cc |
@@ -402,27 +402,21 @@ void RTCVideoDecoder::PictureReady(const media::Picture& picture) { |
static void ReadPixelsSyncInner( |
const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories, |
- uint32 texture_id, |
- const gfx::Rect& visible_rect, |
+ const scoped_refptr<media::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<media::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(); |
} |
@@ -449,7 +443,7 @@ scoped_refptr<media::VideoFrame> RTCVideoDecoder::CreateVideoFrame( |
visible_rect, |
visible_rect.size(), |
timestamp_ms, |
- base::Bind(&ReadPixelsSync, factories_, pb.texture_id(), visible_rect)); |
+ base::Bind(&ReadPixelsSync, factories_)); |
} |
void RTCVideoDecoder::NotifyEndOfBitstreamBuffer(int32 id) { |
@@ -640,7 +634,8 @@ void RTCVideoDecoder::ResetInternal() { |
void RTCVideoDecoder::ReusePictureBuffer( |
int64 picture_buffer_id, |
- scoped_ptr<gpu::MailboxHolder> mailbox_holder) { |
+ scoped_ptr<gpu::MailboxHolder> mailbox_holder, |
+ const std::vector<uint32>& release_sync_points) { |
DCHECK(vda_task_runner_->BelongsToCurrentThread()); |
DVLOG(3) << "ReusePictureBuffer. id=" << picture_buffer_id; |
@@ -664,7 +659,8 @@ void RTCVideoDecoder::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]); |
vda_->ReusePictureBuffer(picture_buffer_id); |
} |