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

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

Issue 940903002: video_decode_accelerator_unittest: enable test on ozone surfaceless (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use GpuMemoryBufferFactory instead of GpuMemoryBufferFactoryOzoneNativeBuffer Created 5 years, 10 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
« no previous file with comments | « content/common/gpu/media/rendering_helper.h ('k') | content/common/gpu/media/surfaceless_gl_renderer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cf836113e79e192afeff70303b3b4ca64d4fdab8..d5282ee845bb7811676f860b576e886afe4dfb4c 100644
--- a/content/common/gpu/media/rendering_helper.cc
+++ b/content/common/gpu/media/rendering_helper.cc
@@ -17,10 +17,11 @@
#include "base/strings/stringize_macros.h"
#include "base/synchronization/waitable_event.h"
#include "base/time/time.h"
+#include "content/common/gpu/media/gl_renderer.h"
+#include "content/common/gpu/media/surfaceless_gl_renderer.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_surface.h"
-
#if defined(OS_WIN)
#include <windows.h>
#endif
@@ -42,6 +43,7 @@
#include "ui/display/chromeos/display_configurator.h"
#endif // defined(OS_CHROMEOS)
#include "ui/ozone/public/ozone_platform.h"
+#include "ui/ozone/public/ozone_switches.h"
#include "ui/platform_window/platform_window.h"
#include "ui/platform_window/platform_window_delegate.h"
#endif // defined(USE_OZONE)
@@ -187,19 +189,21 @@ RenderingHelper::RenderingHelper() {
RenderingHelper::~RenderingHelper() {
CHECK_EQ(videos_.size(), 0U) << "Must call UnInitialize before dtor.";
- Clear();
+ CHECK(!gl_renderer_);
}
void RenderingHelper::Setup() {
#if defined(OS_WIN)
+ screen_size_ = gfx::Size(GetSystemMetrics(SM_CXSCREEN),
+ GetSystemMetrics(SM_CYSCREEN));
window_ = CreateWindowEx(0,
L"Static",
L"VideoDecodeAcceleratorTest",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,
0,
- GetSystemMetrics(SM_CXSCREEN),
- GetSystemMetrics(SM_CYSCREEN),
+ screen_size_.width(),
+ screen_size_.height(),
NULL,
NULL,
NULL,
@@ -217,12 +221,14 @@ void RenderingHelper::Setup() {
window_attributes.override_redirect = true;
int depth = DefaultDepth(display, DefaultScreen(display));
+ screen_size_ = gfx::Size(XWidthOfScreen(screen), XHeightOfScreen(screen));
+
window_ = XCreateWindow(display,
DefaultRootWindow(display),
0,
0,
- XWidthOfScreen(screen),
- XHeightOfScreen(screen),
+ screen_size_.width(),
+ screen_size_.height(),
0 /* border width */,
depth,
CopyFromParent /* class */,
@@ -253,11 +259,12 @@ void RenderingHelper::Setup() {
wait_display_setup.Run();
display_configurator_->RemoveObserver(&display_setup_observer);
- platform_window_delegate_->platform_window()->SetBounds(
- gfx::Rect(display_configurator_->framebuffer_size()));
+ screen_size_ = display_configurator_->framebuffer_size();
#else
- platform_window_delegate_->platform_window()->SetBounds(gfx::Rect(800, 600));
+ screen_size_ = gfx::Size(800, 600));
#endif
+ platform_window_delegate_->platform_window()->SetBounds(
+ gfx::Rect(screen_size_));
// On Ozone/DRI, platform windows are associated with the physical
// outputs. Association is achieved by matching the bounds of the
@@ -303,6 +310,18 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
done.Wait();
}
+#if defined(USE_OZONE)
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kOzoneUseSurfaceless))
+ gl_renderer_.reset(new SurfacelessGlRenderer(window_, screen_size_));
+ else
+ gl_renderer_.reset(new GlRenderer(window_, screen_size_));
+#else
+ gl_renderer_.reset(new GlRenderer(window_, screen_size_));
+#endif
+
+ CHECK(gl_renderer_->Initialize());
+
render_task_.Reset(
base::Bind(&RenderingHelper::RenderContent, base::Unretained(this)));
@@ -313,12 +332,7 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
render_as_thumbnails_ = params.render_as_thumbnails;
message_loop_ = base::MessageLoop::current();
- gl_surface_ = gfx::GLSurface::CreateViewGLSurface(window_);
- screen_size_ = gl_surface_->GetSize();
-
- gl_context_ = gfx::GLContext::CreateGLContext(
- NULL, gl_surface_.get(), gfx::PreferIntegratedGpu);
- CHECK(gl_context_->MakeCurrent(gl_surface_.get()));
+ CHECK(gl_renderer_->MakeCurrent());
CHECK_GT(params.window_sizes.size(), 0U);
videos_.resize(params.window_sizes.size());
@@ -353,7 +367,7 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
- glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
+ gl_renderer_->BindFramebuffer(thumbnails_fbo_id_);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -364,7 +378,7 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
CHECK(fb_status == GL_FRAMEBUFFER_COMPLETE) << fb_status;
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
- glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
+ gl_renderer_->UnbindFramebuffer();
}
// These vertices and texture coords. map (0,0) in the texture to the
@@ -431,7 +445,8 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
glUseProgram(program_);
glDeleteProgram(program_);
- glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0);
+ glUniform1i(glGetUniformLocation(program_, "tex_flip"),
+ gl_renderer_->IsFlipped() ? 0 : 1);
glUniform1i(glGetUniformLocation(program_, "tex"), 0);
GLint tex_external = glGetUniformLocation(program_, "tex_external");
if (tex_external != -1) {
@@ -462,7 +477,8 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
// It's safe to use Unretained here since |rendering_thread_| will be stopped
// in VideoDecodeAcceleratorTest.TearDown(), while the |rendering_helper_| is
// a member of that class. (See video_decode_accelerator_unittest.cc.)
- gfx::VSyncProvider* vsync_provider = gl_surface_->GetVSyncProvider();
+ gfx::VSyncProvider* vsync_provider =
+ gl_renderer_->gl_surface()->GetVSyncProvider();
if (vsync_provider && frame_duration_ != base::TimeDelta())
vsync_provider->GetVSyncParameters(base::Bind(
&RenderingHelper::UpdateVSyncParameters, base::Unretained(this), done));
@@ -489,7 +505,7 @@ void RenderingHelper::WarmUpRendering(int warm_up_iterations) {
emptyData.get());
for (int i = 0; i < warm_up_iterations; ++i) {
RenderTexture(GL_TEXTURE_2D, texture_id);
- gl_surface_->SwapBuffers();
+ gl_renderer_->SwapBuffers();
}
glDeleteTextures(1, &texture_id);
}
@@ -504,11 +520,8 @@ void RenderingHelper::UnInitialize(base::WaitableEvent* done) {
glDeleteFramebuffersEXT(1, &thumbnails_fbo_id_);
}
- gl_context_->ReleaseCurrent(gl_surface_.get());
- gl_context_ = NULL;
- gl_surface_ = NULL;
-
Clear();
+
done->Signal();
}
@@ -567,10 +580,10 @@ void RenderingHelper::RenderThumbnail(uint32 texture_target,
gfx::Rect area(col * width, row * height, width, height);
glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0);
- glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
+ gl_renderer_->BindFramebuffer(thumbnails_fbo_id_);
GLSetViewPort(area);
RenderTexture(texture_target, texture_id);
- glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
+ gl_renderer_->UnbindFramebuffer();
// Need to flush the GL commands before we return the tnumbnail texture to
// the decoder.
@@ -620,27 +633,27 @@ void RenderingHelper::DeleteTexture(uint32 texture_id) {
}
scoped_refptr<gfx::GLContext> RenderingHelper::GetGLContext() {
- return gl_context_;
+ return gl_renderer_->gl_context();
}
void* RenderingHelper::GetGLContextHandle() {
- return gl_context_->GetHandle();
+ return gl_renderer_->gl_context()->GetHandle();
}
void* RenderingHelper::GetGLDisplay() {
- return gl_surface_->GetDisplay();
+ return gl_renderer_->gl_surface()->GetDisplay();
}
void RenderingHelper::Clear() {
videos_.clear();
message_loop_ = NULL;
- gl_context_ = NULL;
- gl_surface_ = NULL;
render_as_thumbnails_ = false;
frame_count_ = 0;
thumbnails_fbo_id_ = 0;
thumbnails_texture_id_ = 0;
+
+ gl_renderer_.reset();
}
void RenderingHelper::GetThumbnailsAsRGB(std::vector<unsigned char>* rgb,
@@ -651,7 +664,7 @@ void RenderingHelper::GetThumbnailsAsRGB(std::vector<unsigned char>* rgb,
const size_t num_pixels = thumbnails_fbo_size_.GetArea();
std::vector<unsigned char> rgba;
rgba.resize(num_pixels * 4);
- glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
+ gl_renderer_->BindFramebuffer(thumbnails_fbo_id_);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
// We can only count on GL_RGBA/GL_UNSIGNED_BYTE support.
glReadPixels(0,
@@ -661,7 +674,7 @@ void RenderingHelper::GetThumbnailsAsRGB(std::vector<unsigned char>* rgb,
GL_RGBA,
GL_UNSIGNED_BYTE,
&rgba[0]);
- glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
+ gl_renderer_->UnbindFramebuffer();
rgb->resize(num_pixels * 3);
// Drop the alpha channel, but check as we go that it is all 0xff.
bool solid = true;
@@ -691,14 +704,16 @@ void RenderingHelper::RenderContent() {
// It's safe to use Unretained here since |rendering_thread_| will be stopped
// in VideoDecodeAcceleratorTest.TearDown(), while the |rendering_helper_| is
// a member of that class. (See video_decode_accelerator_unittest.cc.)
- gfx::VSyncProvider* vsync_provider = gl_surface_->GetVSyncProvider();
+ gfx::VSyncProvider* vsync_provider =
+ gl_renderer_->gl_surface()->GetVSyncProvider();
if (vsync_provider) {
vsync_provider->GetVSyncParameters(base::Bind(
&RenderingHelper::UpdateVSyncParameters, base::Unretained(this),
static_cast<base::WaitableEvent*>(NULL)));
}
- glUniform1i(glGetUniformLocation(program_, "tex_flip"), 1);
+ glUniform1i(glGetUniformLocation(program_, "tex_flip"),
+ gl_renderer_->IsFlipped() ? 0 : 1);
// Frames that will be returned to the client (via the no_longer_needed_cb)
// after this vector falls out of scope at the end of this method. We need
@@ -730,7 +745,7 @@ void RenderingHelper::RenderContent() {
}
if (need_swap_buffer)
- gl_surface_->SwapBuffers();
+ gl_renderer_->SwapBuffers();
ScheduleNextRenderContent();
}
« no previous file with comments | « content/common/gpu/media/rendering_helper.h ('k') | content/common/gpu/media/surfaceless_gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698