Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1953)

Unified Diff: content/common/gpu/media/rendering_helper.cc

Issue 465293002: rendering_helper - Wait for rendering before resetting the decoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address review comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/rendering_helper.cc
diff --git a/content/common/gpu/media/rendering_helper.cc b/content/common/gpu/media/rendering_helper.cc
index ebb58f5f3e126112e4020ba6978a0b643a02253d..d81c0d3a0c69a0ec9b4d267db07f32b9f9371ba5 100644
--- a/content/common/gpu/media/rendering_helper.cc
+++ b/content/common/gpu/media/rendering_helper.cc
@@ -388,6 +388,7 @@ void RenderingHelper::RenderThumbnail(uint32 texture_target,
void RenderingHelper::QueueVideoFrame(size_t window_id,
scoped_refptr<VideoFrame> video_frame) {
RenderedVideo* video = &videos_[window_id];
+ DCHECK(!video->is_flushing);
// Pop the front if it has been rendered.
if (video->last_frame_rendered) {
@@ -492,6 +493,18 @@ void RenderingHelper::GetThumbnailsAsRGB(std::vector<unsigned char>* rgb,
done->Signal();
}
+void RenderingHelper::Flush(size_t window_id,
+ const base::Closure& flush_done_cb) {
+ RenderedVideo* video = &videos_[window_id];
+ if (video->pending_frames.empty()) {
+ // The rendering has been completed.
+ flush_done_cb.Run();
+ return;
+ }
+ video->is_flushing = true;
+ video->flush_done_cb = flush_done_cb;
+}
+
void RenderingHelper::RenderContent() {
CHECK_EQ(base::MessageLoop::current(), message_loop_);
glUniform1i(glGetUniformLocation(program_, "tex_flip"), 1);
@@ -513,12 +526,16 @@ void RenderingHelper::RenderContent() {
GLSetViewPort(video->render_area);
RenderTexture(frame->texture_target(), frame->texture_id());
- if (video->pending_frames.size() > 1) {
+ if (video->pending_frames.size() > 1 || video->is_flushing) {
frames_to_be_returned.push_back(video->pending_frames.front());
video->pending_frames.pop_front();
} else {
video->last_frame_rendered = true;
}
+
+ if (video->is_flushing && video->pending_frames.empty() &&
+ !video->flush_done_cb.is_null())
+ base::ResetAndReturn(&video->flush_done_cb).Run();
}
}

Powered by Google App Engine
This is Rietveld 408576698