Commit 25cb2fe9 authored by Dale Curtis's avatar Dale Curtis Committed by Commit Bot

Ensure WebGLTexture is tagged with uploaded VideoFrame metadata.

The high efficiency path for skipping uploads when a VideoFrame is
already in a given texture was not working. The last uploaded id
was never set on the texture.

Bug: 776222
Test: Manual inspection confirms texture uploads only when needed.
Change-Id: If8a7c19d45f874e4335418ea5c19f602c2e007c8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2032340Reviewed-by: default avatarKai Ninomiya <kainino@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737416}
parent 1c90fe14
......@@ -77,11 +77,9 @@ VideoFrameMetadata* WebGLVideoTexture::VideoElementTargetVideoTexture(
// For WebGL last-uploaded-frame-metadata API.
WebMediaPlayer::VideoFrameUploadMetadata frame_metadata = {};
int already_uploaded_id = HTMLVideoElement::kNoAlreadyUploadedFrame;
WebMediaPlayer::VideoFrameUploadMetadata* frame_metadata_ptr =
&frame_metadata;
if (RuntimeEnabledFeatures::ExtraWebGLVideoTextureMetadataEnabled()) {
auto* frame_metadata_ptr = &frame_metadata;
if (RuntimeEnabledFeatures::ExtraWebGLVideoTextureMetadataEnabled())
already_uploaded_id = texture->GetLastUploadedVideoFrameId();
}
#if defined(OS_ANDROID)
// TODO(crbug.com/776222): support extension on Android
......@@ -102,19 +100,25 @@ VideoFrameMetadata* WebGLVideoTexture::VideoElementTargetVideoTexture(
return nullptr;
}
if (frame_metadata_ptr) {
if (RuntimeEnabledFeatures::ExtraWebGLVideoTextureMetadataEnabled())
texture->UpdateLastUploadedFrame(frame_metadata);
if (!current_frame_metadata_)
current_frame_metadata_ = VideoFrameMetadata::Create();
current_frame_metadata_->setPresentationTime(
frame_metadata_ptr->timestamp.InMicrosecondsF());
current_frame_metadata_->setExpectedPresentationTime(
frame_metadata_ptr->expected_timestamp.InMicrosecondsF());
current_frame_metadata_->setWidth(frame_metadata_ptr->visible_rect.width());
current_frame_metadata_->setHeight(
frame_metadata_ptr->visible_rect.height());
current_frame_metadata_->setPresentationTimestamp(
frame_metadata_ptr->timestamp.InSecondsF());
}
// TODO(crbug.com/776222): These should be read from the VideoFrameCompositor
// when the VideoFrame is retrieved in WebMediaPlayerImpl. These fields are
// not currently saved in VideoFrameCompositor, so VFC::ProcessNewFrame()
// would need to save the current time as well as the presentation time.
current_frame_metadata_->setPresentationTime(
frame_metadata_ptr->timestamp.InMicrosecondsF());
current_frame_metadata_->setExpectedPresentationTime(
frame_metadata_ptr->expected_timestamp.InMicrosecondsF());
current_frame_metadata_->setWidth(frame_metadata_ptr->visible_rect.width());
current_frame_metadata_->setHeight(frame_metadata_ptr->visible_rect.height());
current_frame_metadata_->setPresentationTimestamp(
frame_metadata_ptr->timestamp.InSecondsF());
return current_frame_metadata_;
}
......
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