Commit ee1b10bd authored by lionel.g.landwerlin's avatar lionel.g.landwerlin Committed by Commit bot

cc: VideoResourceUpdater: don't dismiss the sync_point given by the compositor

When the compositor is done using a video texture, it returns a
sync_point associated with the last use of this texture. We appear to
drop this sync_point on the floor, neither waiting on it, nor
associating it to the video frame returned to the GpuVideoDecoder.

This change emits a WaitSyncPointCHROMIUM on the compositor sync point
when updating the renderer's media::VideoFrame release sync point.

BUG=chrome-os-partner:37786

Review URL: https://codereview.chromium.org/1088903002

Cr-Commit-Position: refs/heads/master@{#325416}
parent 7b45a34b
......@@ -27,15 +27,28 @@ const ResourceFormat kRGBResourceFormat = RGBA_8888;
class SyncPointClientImpl : public media::VideoFrame::SyncPointClient {
public:
explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl) : gl_(gl) {}
explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl,
uint32 sync_point)
: gl_(gl), sync_point_(sync_point) {}
~SyncPointClientImpl() override {}
uint32 InsertSyncPoint() override { return gl_->InsertSyncPointCHROMIUM(); }
uint32 InsertSyncPoint() override {
if (sync_point_)
return sync_point_;
return gl_->InsertSyncPointCHROMIUM();
}
void WaitSyncPoint(uint32 sync_point) override {
if (!sync_point)
return;
gl_->WaitSyncPointCHROMIUM(sync_point);
if (sync_point_) {
gl_->WaitSyncPointCHROMIUM(sync_point_);
sync_point_ = 0;
}
}
private:
gpu::gles2::GLES2Interface* gl_;
uint32 sync_point_;
};
} // namespace
......@@ -375,10 +388,11 @@ void VideoResourceUpdater::ReturnTexture(
// resource.
if (lost_resource || !updater.get())
return;
// VideoFrame::UpdateReleaseSyncPoint() creates new sync point using the same
// GL context which created the given |sync_point|, so discard the
// |sync_point|.
SyncPointClientImpl client(updater->context_provider_->ContextGL());
// Update the release sync point in |video_frame| with |sync_point|
// returned by the compositor and emit a WaitSyncPointCHROMIUM on
// |video_frame|'s previous sync point using the current GL context.
SyncPointClientImpl client(updater->context_provider_->ContextGL(),
sync_point);
video_frame->UpdateReleaseSyncPoint(&client);
}
......
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