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

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

Issue 294663006: vda_unittest - Move the fps control from ThrottleVDAClient to RenderingHelper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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 b3a8d3e7c13b4a7bfdcc97ac27ac5303c25555ad..61770046eb5cfe58219dd19e9524b3f3e719e7af 100644
--- a/content/common/gpu/media/rendering_helper.cc
+++ b/content/common/gpu/media/rendering_helper.cc
@@ -97,8 +97,9 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
done.Wait();
}
- // TODO(owenlin): pass fps from params
- frame_duration_ = base::TimeDelta::FromSeconds(1) / 60;
+ frame_duration_ = params.rendering_fps > 0
+ ? base::TimeDelta::FromSeconds(1) / params.rendering_fps
+ : base::TimeDelta();
gfx::InitializeStaticGLBindings(kGLImplementation);
scoped_refptr<gfx::GLContextStubWithExtensions> stub_context(
@@ -187,6 +188,7 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
reinterpret_cast<const char*>(glGetString(GL_VERSION)));
#endif
+ clients_.resize(params.num_windows);
// Per-window/surface X11 & EGL initialization.
for (int i = 0; i < params.num_windows; ++i) {
// Arrange X windows whimsically, with some padding.
@@ -199,11 +201,6 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
int top_left_y = (height + 12) * (i % 3);
render_areas_.push_back(gfx::Rect(
top_left_x, top_left_y, width, height));
-
- // Initialize to an invalid texture id: 0 to indicate no texture
- // for rendering.
- texture_ids_.push_back(0);
- texture_targets_.push_back(0);
}
#if defined(OS_WIN)
@@ -291,11 +288,6 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
-
- // In render_as_thumbnails_ mode, we render the FBO content on the
- // screen instead of the decoded textures.
- texture_targets_[0] = GL_TEXTURE_2D;
- texture_ids_[0] = thumbnails_texture_id_;
}
// These vertices and texture coords. map (0,0) in the texture to the
@@ -375,8 +367,10 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
glEnableVertexAttribArray(tc_location);
glVertexAttribPointer(tc_location, 2, GL_FLOAT, GL_FALSE, 0, kTextureCoords);
- render_timer_.Start(FROM_HERE, frame_duration_, this,
- &RenderingHelper::RenderContent);
+ if (frame_duration_ != base::TimeDelta()) {
+ render_timer_.Start(FROM_HERE, frame_duration_, this,
+ &RenderingHelper::RenderContent);
+ }
done->Signal();
}
@@ -400,6 +394,17 @@ void RenderingHelper::UnInitialize(base::WaitableEvent* done) {
done->Signal();
}
+void RenderingHelper::SetClient(int window_id, RenderingClient *client) {
+ if (base::MessageLoop::current() != message_loop_) {
+ message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&RenderingHelper::SetClient, base::Unretained(this),
+ window_id, client));
+ return;
+ }
+ clients_[window_id] = client;
+}
+
void RenderingHelper::CreateTexture(int window_id,
uint32 texture_target,
uint32* texture_id,
@@ -436,40 +441,33 @@ void RenderingHelper::CreateTexture(int window_id,
done->Signal();
}
+// Helper function to set GL viewport.
+static inline void GLSetViewPort(const gfx::Rect& area) {
+ glViewport(area.x(), area.y(), area.width(), area.height());
+ glScissor(area.x(), area.y(), area.width(), area.height());
+}
-void RenderingHelper::RenderTexture(uint32 texture_target, uint32 texture_id) {
+void RenderingHelper::RenderThumbnail(uint32 texture_target,
+ uint32 texture_id) {
CHECK_EQ(base::MessageLoop::current(), message_loop_);
- if (texture_id == 0)
- return;
-
- if (render_as_thumbnails_) {
- const int width = thumbnail_size_.width();
- const int height = thumbnail_size_.height();
- const int thumbnails_in_row = thumbnails_fbo_size_.width() / width;
- const int thumbnails_in_column = thumbnails_fbo_size_.height() / height;
- const int row = (frame_count_ / thumbnails_in_row) % thumbnails_in_column;
- const int col = frame_count_ % thumbnails_in_row;
+ const int width = thumbnail_size_.width();
+ const int height = thumbnail_size_.height();
+ const int thumbnails_in_row = thumbnails_fbo_size_.width() / width;
+ const int thumbnails_in_column = thumbnails_fbo_size_.height() / height;
+ const int row = (frame_count_ / thumbnails_in_row) % thumbnails_in_column;
+ const int col = frame_count_ % thumbnails_in_row;
- gfx::Rect area(col * width, row * height, width, height);
+ gfx::Rect area(col * width, row * height, width, height);
- glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0);
- glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
- DrawTexture(area, texture_target, texture_id);
- glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
- ++frame_count_;
- } else {
- size_t window_id = texture_id_to_surface_index_[texture_id];
- texture_targets_[window_id] = texture_target;
- texture_ids_[window_id] = texture_id;
- }
+ glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0);
+ glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
+ GLSetViewPort(area);
+ RenderTexture(texture_target, texture_id);
+ glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
+ ++frame_count_;
}
-void RenderingHelper::DrawTexture(const gfx::Rect& area,
- uint32 texture_target,
- uint32 texture_id) {
- glViewport(area.x(), area.y(), area.width(), area.height());
- glScissor(area.x(), area.y(), area.width(), area.height());
-
+void RenderingHelper::RenderTexture(uint32 texture_target, uint32 texture_id) {
// Unbound texture samplers default to (0, 0, 0, 1). Use this fact to switch
// between GL_TEXTURE_2D and GL_TEXTURE_EXTERNAL_OES as appopriate.
if (texture_target == GL_TEXTURE_2D) {
@@ -571,9 +569,22 @@ void RenderingHelper::GetThumbnailsAsRGB(std::vector<unsigned char>* rgb,
}
void RenderingHelper::RenderContent() {
+
glUniform1i(glGetUniformLocation(program_, "tex_flip"), 1);
- for (size_t i = 0; i < render_areas_.size(); ++i) {
- DrawTexture(render_areas_[i], texture_targets_[i], texture_ids_[i]);
+
+ if (render_as_thumbnails_) {
+ // In render_as_thumbnails_ mode, we render the FBO content on the
+ // screen instead of the decoded textures.
+ GLSetViewPort(render_areas_[0]);
+ RenderTexture(GL_TEXTURE_2D, thumbnails_texture_id_);
+ } else {
+ for (size_t i = 0; i < clients_.size(); ++i) {
+ RenderingClient *client = clients_[i];
+ if (client != NULL) {
+ GLSetViewPort(render_areas_[i]);
+ client->RenderContent(this);
+ }
+ }
}
#if GL_VARIANT_GLX

Powered by Google App Engine
This is Rietveld 408576698