Commit 70b1c5fb authored by Dale Curtis's avatar Dale Curtis Committed by Commit Bot

Always generate a new unique_id for new MediaPlayer VideoFrames.

Downstream code has always assumed that when the unique_id for a
VideoFrame doesn't change there's no work to be done. The fix is
simply to use a wrapper frame which will have a unique id when a
new frame is generated.

It's surprising this ever worked, but the reason is that we have
a boolean on VideoFrameCompositor which forces repaint of even
non-unique frames. That can now be removed since we have multiple
sites where unique frames are now required.

BUG=1018904
TEST=repro steps from bug no longer repro.
R=tguilbert

Change-Id: I9e134bdf0f8b7b58d66c23b7e48658dd2be86a07
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1888122
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#710500}
parent 1334248c
...@@ -127,7 +127,15 @@ void MediaPlayerRendererClient::OnRemoteRendererInitialized( ...@@ -127,7 +127,15 @@ void MediaPlayerRendererClient::OnRemoteRendererInitialized(
void MediaPlayerRendererClient::OnFrameAvailable() { void MediaPlayerRendererClient::OnFrameAvailable() {
DCHECK(compositor_task_runner_->BelongsToCurrentThread()); DCHECK(compositor_task_runner_->BelongsToCurrentThread());
sink_->PaintSingleFrame(stream_texture_wrapper_->GetCurrentFrame(), true);
// The frame generated by the StreamTextureWrapper is "static", i.e., even as
// new frames are drawn it does not change. Downstream components expect that
// each new VideoFrame will have a different unique_id() when it changes, so
// we need to add a wrapping frame with a new unique_id().
auto frame = stream_texture_wrapper_->GetCurrentFrame();
auto unique_frame = media::VideoFrame::WrapVideoFrame(
frame, frame->format(), frame->visible_rect(), frame->natural_size());
sink_->PaintSingleFrame(std::move(unique_frame));
} }
void MediaPlayerRendererClient::OnVideoSizeChange(const gfx::Size& size) { void MediaPlayerRendererClient::OnVideoSizeChange(const gfx::Size& size) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment