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

Side by Side Diff: content/common/gpu/media/rendering_helper.cc

Issue 649533003: C++11 declares a type safe null pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Presubmit errors Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/gpu/media/rendering_helper.h" 5 #include "content/common/gpu/media/rendering_helper.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <numeric> 8 #include <numeric>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 30 matching lines...) Expand all
41 GLenum type, 41 GLenum type,
42 const char* source, 42 const char* source,
43 int size) { 43 int size) {
44 GLuint shader = glCreateShader(type); 44 GLuint shader = glCreateShader(type);
45 glShaderSource(shader, 1, &source, &size); 45 glShaderSource(shader, 1, &source, &size);
46 glCompileShader(shader); 46 glCompileShader(shader);
47 int result = GL_FALSE; 47 int result = GL_FALSE;
48 glGetShaderiv(shader, GL_COMPILE_STATUS, &result); 48 glGetShaderiv(shader, GL_COMPILE_STATUS, &result);
49 if (!result) { 49 if (!result) {
50 char log[4096]; 50 char log[4096];
51 glGetShaderInfoLog(shader, arraysize(log), NULL, log); 51 glGetShaderInfoLog(shader, arraysize(log), nullptr, log);
52 LOG(FATAL) << log; 52 LOG(FATAL) << log;
53 } 53 }
54 glAttachShader(program, shader); 54 glAttachShader(program, shader);
55 glDeleteShader(shader); 55 glDeleteShader(shader);
56 CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR); 56 CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR);
57 } 57 }
58 58
59 namespace content { 59 namespace content {
60 60
61 RenderingHelperParams::RenderingHelperParams() {} 61 RenderingHelperParams::RenderingHelperParams() {}
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 screen_size_ = 128 screen_size_ =
129 gfx::Size(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); 129 gfx::Size(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
130 window_ = CreateWindowEx(0, 130 window_ = CreateWindowEx(0,
131 L"Static", 131 L"Static",
132 L"VideoDecodeAcceleratorTest", 132 L"VideoDecodeAcceleratorTest",
133 WS_OVERLAPPEDWINDOW | WS_VISIBLE, 133 WS_OVERLAPPEDWINDOW | WS_VISIBLE,
134 0, 134 0,
135 0, 135 0,
136 screen_size_.width(), 136 screen_size_.width(),
137 screen_size_.height(), 137 screen_size_.height(),
138 NULL, 138 nullptr,
139 NULL, 139 nullptr,
140 NULL, 140 nullptr,
141 NULL); 141 nullptr);
142 #elif defined(USE_X11) 142 #elif defined(USE_X11)
143 Display* display = gfx::GetXDisplay(); 143 Display* display = gfx::GetXDisplay();
144 Screen* screen = DefaultScreenOfDisplay(display); 144 Screen* screen = DefaultScreenOfDisplay(display);
145 screen_size_ = gfx::Size(XWidthOfScreen(screen), XHeightOfScreen(screen)); 145 screen_size_ = gfx::Size(XWidthOfScreen(screen), XHeightOfScreen(screen));
146 146
147 CHECK(display); 147 CHECK(display);
148 148
149 XSetWindowAttributes window_attributes; 149 XSetWindowAttributes window_attributes;
150 memset(&window_attributes, 0, sizeof(window_attributes)); 150 memset(&window_attributes, 0, sizeof(window_attributes));
151 window_attributes.background_pixel = 151 window_attributes.background_pixel =
(...skipping 16 matching lines...) Expand all
168 XStoreName(display, window_, "VideoDecodeAcceleratorTest"); 168 XStoreName(display, window_, "VideoDecodeAcceleratorTest");
169 XSelectInput(display, window_, ExposureMask); 169 XSelectInput(display, window_, ExposureMask);
170 XMapWindow(display, window_); 170 XMapWindow(display, window_);
171 #else 171 #else
172 #error unknown platform 172 #error unknown platform
173 #endif 173 #endif
174 CHECK(window_ != gfx::kNullAcceleratedWidget); 174 CHECK(window_ != gfx::kNullAcceleratedWidget);
175 175
176 gl_surface_ = gfx::GLSurface::CreateViewGLSurface(window_); 176 gl_surface_ = gfx::GLSurface::CreateViewGLSurface(window_);
177 gl_context_ = gfx::GLContext::CreateGLContext( 177 gl_context_ = gfx::GLContext::CreateGLContext(
178 NULL, gl_surface_.get(), gfx::PreferIntegratedGpu); 178 nullptr, gl_surface_.get(), gfx::PreferIntegratedGpu);
179 gl_context_->MakeCurrent(gl_surface_.get()); 179 gl_context_->MakeCurrent(gl_surface_.get());
180 180
181 CHECK_GT(params.window_sizes.size(), 0U); 181 CHECK_GT(params.window_sizes.size(), 0U);
182 videos_.resize(params.window_sizes.size()); 182 videos_.resize(params.window_sizes.size());
183 LayoutRenderingAreas(params.window_sizes); 183 LayoutRenderingAreas(params.window_sizes);
184 184
185 if (render_as_thumbnails_) { 185 if (render_as_thumbnails_) {
186 CHECK_EQ(videos_.size(), 1U); 186 CHECK_EQ(videos_.size(), 1U);
187 187
188 GLint max_texture_size; 188 GLint max_texture_size;
189 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); 189 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size);
190 CHECK_GE(max_texture_size, params.thumbnails_page_size.width()); 190 CHECK_GE(max_texture_size, params.thumbnails_page_size.width());
191 CHECK_GE(max_texture_size, params.thumbnails_page_size.height()); 191 CHECK_GE(max_texture_size, params.thumbnails_page_size.height());
192 192
193 thumbnails_fbo_size_ = params.thumbnails_page_size; 193 thumbnails_fbo_size_ = params.thumbnails_page_size;
194 thumbnail_size_ = params.thumbnail_size; 194 thumbnail_size_ = params.thumbnail_size;
195 195
196 glGenFramebuffersEXT(1, &thumbnails_fbo_id_); 196 glGenFramebuffersEXT(1, &thumbnails_fbo_id_);
197 glGenTextures(1, &thumbnails_texture_id_); 197 glGenTextures(1, &thumbnails_texture_id_);
198 glBindTexture(GL_TEXTURE_2D, thumbnails_texture_id_); 198 glBindTexture(GL_TEXTURE_2D, thumbnails_texture_id_);
199 glTexImage2D(GL_TEXTURE_2D, 199 glTexImage2D(GL_TEXTURE_2D,
200 0, 200 0,
201 GL_RGB, 201 GL_RGB,
202 thumbnails_fbo_size_.width(), 202 thumbnails_fbo_size_.width(),
203 thumbnails_fbo_size_.height(), 203 thumbnails_fbo_size_.height(),
204 0, 204 0,
205 GL_RGB, 205 GL_RGB,
206 GL_UNSIGNED_SHORT_5_6_5, 206 GL_UNSIGNED_SHORT_5_6_5,
207 NULL); 207 nullptr);
208 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 208 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
209 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 209 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
210 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 210 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
211 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 211 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
212 glBindTexture(GL_TEXTURE_2D, 0); 212 glBindTexture(GL_TEXTURE_2D, 0);
213 213
214 glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_); 214 glBindFramebufferEXT(GL_FRAMEBUFFER, thumbnails_fbo_id_);
215 glFramebufferTexture2DEXT(GL_FRAMEBUFFER, 215 glFramebufferTexture2DEXT(GL_FRAMEBUFFER,
216 GL_COLOR_ATTACHMENT0, 216 GL_COLOR_ATTACHMENT0,
217 GL_TEXTURE_2D, 217 GL_TEXTURE_2D,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 program_, GL_VERTEX_SHADER, kVertexShader, arraysize(kVertexShader)); 276 program_, GL_VERTEX_SHADER, kVertexShader, arraysize(kVertexShader));
277 CreateShader(program_, 277 CreateShader(program_,
278 GL_FRAGMENT_SHADER, 278 GL_FRAGMENT_SHADER,
279 kFragmentShader, 279 kFragmentShader,
280 arraysize(kFragmentShader)); 280 arraysize(kFragmentShader));
281 glLinkProgram(program_); 281 glLinkProgram(program_);
282 int result = GL_FALSE; 282 int result = GL_FALSE;
283 glGetProgramiv(program_, GL_LINK_STATUS, &result); 283 glGetProgramiv(program_, GL_LINK_STATUS, &result);
284 if (!result) { 284 if (!result) {
285 char log[4096]; 285 char log[4096];
286 glGetShaderInfoLog(program_, arraysize(log), NULL, log); 286 glGetShaderInfoLog(program_, arraysize(log), nullptr, log);
287 LOG(FATAL) << log; 287 LOG(FATAL) << log;
288 } 288 }
289 glUseProgram(program_); 289 glUseProgram(program_);
290 glDeleteProgram(program_); 290 glDeleteProgram(program_);
291 291
292 glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0); 292 glUniform1i(glGetUniformLocation(program_, "tex_flip"), 0);
293 glUniform1i(glGetUniformLocation(program_, "tex"), 0); 293 glUniform1i(glGetUniformLocation(program_, "tex"), 0);
294 GLint tex_external = glGetUniformLocation(program_, "tex_external"); 294 GLint tex_external = glGetUniformLocation(program_, "tex_external");
295 if (tex_external != -1) { 295 if (tex_external != -1) {
296 glUniform1i(tex_external, 1); 296 glUniform1i(tex_external, 1);
(...skipping 12 matching lines...) Expand all
309 CHECK_EQ(base::MessageLoop::current(), message_loop_); 309 CHECK_EQ(base::MessageLoop::current(), message_loop_);
310 310
311 render_task_.Cancel(); 311 render_task_.Cancel();
312 312
313 if (render_as_thumbnails_) { 313 if (render_as_thumbnails_) {
314 glDeleteTextures(1, &thumbnails_texture_id_); 314 glDeleteTextures(1, &thumbnails_texture_id_);
315 glDeleteFramebuffersEXT(1, &thumbnails_fbo_id_); 315 glDeleteFramebuffersEXT(1, &thumbnails_fbo_id_);
316 } 316 }
317 317
318 gl_context_->ReleaseCurrent(gl_surface_.get()); 318 gl_context_->ReleaseCurrent(gl_surface_.get());
319 gl_context_ = NULL; 319 gl_context_ = nullptr;
320 gl_surface_ = NULL; 320 gl_surface_ = nullptr;
321 321
322 Clear(); 322 Clear();
323 done->Signal(); 323 done->Signal();
324 } 324 }
325 325
326 void RenderingHelper::CreateTexture(uint32 texture_target, 326 void RenderingHelper::CreateTexture(uint32 texture_target,
327 uint32* texture_id, 327 uint32* texture_id,
328 const gfx::Size& size, 328 const gfx::Size& size,
329 base::WaitableEvent* done) { 329 base::WaitableEvent* done) {
330 if (base::MessageLoop::current() != message_loop_) { 330 if (base::MessageLoop::current() != message_loop_) {
(...skipping 10 matching lines...) Expand all
341 glBindTexture(texture_target, *texture_id); 341 glBindTexture(texture_target, *texture_id);
342 if (texture_target == GL_TEXTURE_2D) { 342 if (texture_target == GL_TEXTURE_2D) {
343 glTexImage2D(GL_TEXTURE_2D, 343 glTexImage2D(GL_TEXTURE_2D,
344 0, 344 0,
345 GL_RGBA, 345 GL_RGBA,
346 size.width(), 346 size.width(),
347 size.height(), 347 size.height(),
348 0, 348 0,
349 GL_RGBA, 349 GL_RGBA,
350 GL_UNSIGNED_BYTE, 350 GL_UNSIGNED_BYTE,
351 NULL); 351 nullptr);
352 } 352 }
353 glTexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 353 glTexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
354 glTexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 354 glTexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
355 // OpenGLES2.0.25 section 3.8.2 requires CLAMP_TO_EDGE for NPOT textures. 355 // OpenGLES2.0.25 section 3.8.2 requires CLAMP_TO_EDGE for NPOT textures.
356 glTexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 356 glTexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
357 glTexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 357 glTexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
358 CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR); 358 CHECK_EQ(static_cast<int>(glGetError()), GL_NO_ERROR);
359 done->Signal(); 359 done->Signal();
360 } 360 }
361 361
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 void* RenderingHelper::GetGLContext() { 443 void* RenderingHelper::GetGLContext() {
444 return gl_context_->GetHandle(); 444 return gl_context_->GetHandle();
445 } 445 }
446 446
447 void* RenderingHelper::GetGLDisplay() { 447 void* RenderingHelper::GetGLDisplay() {
448 return gl_surface_->GetDisplay(); 448 return gl_surface_->GetDisplay();
449 } 449 }
450 450
451 void RenderingHelper::Clear() { 451 void RenderingHelper::Clear() {
452 videos_.clear(); 452 videos_.clear();
453 message_loop_ = NULL; 453 message_loop_ = nullptr;
454 gl_context_ = NULL; 454 gl_context_ = nullptr;
455 gl_surface_ = NULL; 455 gl_surface_ = nullptr;
456 456
457 render_as_thumbnails_ = false; 457 render_as_thumbnails_ = false;
458 frame_count_ = 0; 458 frame_count_ = 0;
459 thumbnails_fbo_id_ = 0; 459 thumbnails_fbo_id_ = 0;
460 thumbnails_texture_id_ = 0; 460 thumbnails_texture_id_ = 0;
461 461
462 #if defined(OS_WIN) 462 #if defined(OS_WIN)
463 if (window_) 463 if (window_)
464 DestroyWindow(window_); 464 DestroyWindow(window_);
465 #else 465 #else
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 scale = std::min(1.0f, scale); 604 scale = std::min(1.0f, scale);
605 605
606 size_t w = scale * size.width(); 606 size_t w = scale * size.width();
607 size_t h = scale * size.height(); 607 size_t h = scale * size.height();
608 size_t x = offset_x[i % cols] + (widths[i % cols] - w) / 2; 608 size_t x = offset_x[i % cols] + (widths[i % cols] - w) / 2;
609 size_t y = offset_y[i / cols] + (heights[i / cols] - h) / 2; 609 size_t y = offset_y[i / cols] + (heights[i / cols] - h) / 2;
610 videos_[i].render_area = gfx::Rect(x, y, w, h); 610 videos_[i].render_area = gfx::Rect(x, y, w, h);
611 } 611 }
612 } 612 }
613 } // namespace content 613 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/media/h264_dpb.cc ('k') | content/common/gpu/media/tegra_v4l2_video_device.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698