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

Side by Side Diff: cc/layers/video_layer_impl.cc

Issue 1142343008: cc: Rework overlays to not use the ResourceProvider and pass texture size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix more tests Created 5 years, 6 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/layers/video_layer_impl.h" 5 #include "cc/layers/video_layer_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "cc/layers/video_frame_provider_client_impl.h" 9 #include "cc/layers/video_frame_provider_client_impl.h"
10 #include "cc/quads/io_surface_draw_quad.h" 10 #include "cc/quads/io_surface_draw_quad.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return true; 118 return true;
119 } 119 }
120 120
121 DCHECK_EQ(external_resources.mailboxes.size(), 121 DCHECK_EQ(external_resources.mailboxes.size(),
122 external_resources.release_callbacks.size()); 122 external_resources.release_callbacks.size());
123 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) { 123 for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) {
124 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox( 124 unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox(
125 external_resources.mailboxes[i], 125 external_resources.mailboxes[i],
126 SingleReleaseCallbackImpl::Create( 126 SingleReleaseCallbackImpl::Create(
127 external_resources.release_callbacks[i])); 127 external_resources.release_callbacks[i]));
128 frame_resources_.push_back(resource_id); 128 frame_resources_.push_back(FrameResource(
129 resource_id, external_resources.mailboxes[i].size_in_pixels(),
130 external_resources.mailboxes[i].allow_overlay()));
129 } 131 }
130 132
131 return true; 133 return true;
132 } 134 }
133 135
134 void VideoLayerImpl::AppendQuads(RenderPass* render_pass, 136 void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
135 AppendQuadsData* append_quads_data) { 137 AppendQuadsData* append_quads_data) {
136 DCHECK(frame_.get()); 138 DCHECK(frame_.get());
137 139
138 gfx::Transform transform = draw_transform(); 140 gfx::Transform transform = draw_transform();
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 visible_rect.x() / uv_subsampling_factor_x, 266 visible_rect.x() / uv_subsampling_factor_x,
265 visible_rect.y() / uv_subsampling_factor_y, 267 visible_rect.y() / uv_subsampling_factor_y,
266 visible_rect.width() / uv_subsampling_factor_x, 268 visible_rect.width() / uv_subsampling_factor_x,
267 visible_rect.height() / uv_subsampling_factor_y); 269 visible_rect.height() / uv_subsampling_factor_y);
268 270
269 YUVVideoDrawQuad* yuv_video_quad = 271 YUVVideoDrawQuad* yuv_video_quad =
270 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); 272 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
271 yuv_video_quad->SetNew( 273 yuv_video_quad->SetNew(
272 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, 274 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect,
273 ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, 275 ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size,
274 frame_resources_[0], frame_resources_[1], frame_resources_[2], 276 frame_resources_[0].id, frame_resources_[1].id,
275 frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space); 277 frame_resources_[2].id,
278 frame_resources_.size() > 3 ? frame_resources_[3].id : 0,
279 color_space);
276 ValidateQuadResources(yuv_video_quad); 280 ValidateQuadResources(yuv_video_quad);
277 break; 281 break;
278 } 282 }
279 case VideoFrameExternalResources::RGBA_RESOURCE: 283 case VideoFrameExternalResources::RGBA_RESOURCE:
280 case VideoFrameExternalResources::RGB_RESOURCE: { 284 case VideoFrameExternalResources::RGB_RESOURCE: {
281 DCHECK_EQ(frame_resources_.size(), 1u); 285 DCHECK_EQ(frame_resources_.size(), 1u);
282 if (frame_resources_.size() < 1u) 286 if (frame_resources_.size() < 1u)
283 break; 287 break;
284 bool premultiplied_alpha = 288 bool premultiplied_alpha =
285 (frame_resource_type_ == VideoFrameExternalResources::RGBA_RESOURCE); 289 (frame_resource_type_ == VideoFrameExternalResources::RGBA_RESOURCE);
286 gfx::PointF uv_top_left(0.f, 0.f); 290 gfx::PointF uv_top_left(0.f, 0.f);
287 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); 291 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
288 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; 292 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
289 bool flipped = false; 293 bool flipped = false;
290 bool nearest_neighbor = false; 294 bool nearest_neighbor = false;
291 TextureDrawQuad* texture_quad = 295 TextureDrawQuad* texture_quad =
292 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 296 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
293 texture_quad->SetNew(shared_quad_state, 297 texture_quad->SetNew(shared_quad_state, quad_rect, opaque_rect,
294 quad_rect, 298 visible_quad_rect, frame_resources_[0].id,
295 opaque_rect, 299 premultiplied_alpha, uv_top_left, uv_bottom_right,
296 visible_quad_rect, 300 SK_ColorTRANSPARENT, opacity, flipped,
297 frame_resources_[0],
298 premultiplied_alpha,
299 uv_top_left,
300 uv_bottom_right,
301 SK_ColorTRANSPARENT,
302 opacity,
303 flipped,
304 nearest_neighbor); 301 nearest_neighbor);
305 ValidateQuadResources(texture_quad); 302 ValidateQuadResources(texture_quad);
306 break; 303 break;
307 } 304 }
308 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { 305 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: {
309 DCHECK_EQ(frame_resources_.size(), 1u); 306 DCHECK_EQ(frame_resources_.size(), 1u);
310 if (frame_resources_.size() < 1u) 307 if (frame_resources_.size() < 1u)
311 break; 308 break;
312 gfx::Transform scale; 309 gfx::Transform scale;
313 scale.Scale(tex_width_scale, tex_height_scale); 310 scale.Scale(tex_width_scale, tex_height_scale);
314 StreamVideoDrawQuad* stream_video_quad = 311 StreamVideoDrawQuad* stream_video_quad =
315 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); 312 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
316 stream_video_quad->SetNew( 313 stream_video_quad->SetNew(
317 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, 314 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect,
318 frame_resources_[0], 315 frame_resources_[0].id, frame_resources_[0].size_in_pixels,
316 frame_resources_[0].allow_overlay,
319 scale * provider_client_impl_->StreamTextureMatrix()); 317 scale * provider_client_impl_->StreamTextureMatrix());
320 ValidateQuadResources(stream_video_quad); 318 ValidateQuadResources(stream_video_quad);
321 break; 319 break;
322 } 320 }
323 case VideoFrameExternalResources::IO_SURFACE: { 321 case VideoFrameExternalResources::IO_SURFACE: {
324 DCHECK_EQ(frame_resources_.size(), 1u); 322 DCHECK_EQ(frame_resources_.size(), 1u);
325 if (frame_resources_.size() < 1u) 323 if (frame_resources_.size() < 1u)
326 break; 324 break;
327 IOSurfaceDrawQuad* io_surface_quad = 325 IOSurfaceDrawQuad* io_surface_quad =
328 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>(); 326 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>();
329 io_surface_quad->SetNew(shared_quad_state, 327 io_surface_quad->SetNew(shared_quad_state, quad_rect, opaque_rect,
330 quad_rect, 328 visible_quad_rect, visible_rect.size(),
331 opaque_rect, 329 frame_resources_[0].id,
332 visible_quad_rect,
333 visible_rect.size(),
334 frame_resources_[0],
335 IOSurfaceDrawQuad::UNFLIPPED); 330 IOSurfaceDrawQuad::UNFLIPPED);
336 ValidateQuadResources(io_surface_quad); 331 ValidateQuadResources(io_surface_quad);
337 break; 332 break;
338 } 333 }
339 #if defined(VIDEO_HOLE) 334 #if defined(VIDEO_HOLE)
340 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not 335 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not
341 // maintained by the general compositor team. Please contact the following 336 // maintained by the general compositor team. Please contact the following
342 // people instead: 337 // people instead:
343 // 338 //
344 // wonsik@chromium.org 339 // wonsik@chromium.org
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 VideoFrameExternalResources::SOFTWARE_RESOURCE) { 371 VideoFrameExternalResources::SOFTWARE_RESOURCE) {
377 for (size_t i = 0; i < software_resources_.size(); ++i) { 372 for (size_t i = 0; i < software_resources_.size(); ++i) {
378 software_release_callback_.Run( 373 software_release_callback_.Run(
379 0, false, layer_tree_impl()->BlockingMainThreadTaskRunner()); 374 0, false, layer_tree_impl()->BlockingMainThreadTaskRunner());
380 } 375 }
381 376
382 software_resources_.clear(); 377 software_resources_.clear();
383 software_release_callback_.Reset(); 378 software_release_callback_.Reset();
384 } else { 379 } else {
385 for (size_t i = 0; i < frame_resources_.size(); ++i) 380 for (size_t i = 0; i < frame_resources_.size(); ++i)
386 resource_provider->DeleteResource(frame_resources_[i]); 381 resource_provider->DeleteResource(frame_resources_[i].id);
387 frame_resources_.clear(); 382 frame_resources_.clear();
388 } 383 }
389 384
390 provider_client_impl_->PutCurrentFrame(); 385 provider_client_impl_->PutCurrentFrame();
391 frame_ = nullptr; 386 frame_ = nullptr;
392 387
393 provider_client_impl_->ReleaseLock(); 388 provider_client_impl_->ReleaseLock();
394 } 389 }
395 390
396 SimpleEnclosedRegion VideoLayerImpl::VisibleContentOpaqueRegion() const { 391 SimpleEnclosedRegion VideoLayerImpl::VisibleContentOpaqueRegion() const {
(...skipping 10 matching lines...) Expand all
407 void VideoLayerImpl::SetNeedsRedraw() { 402 void VideoLayerImpl::SetNeedsRedraw() {
408 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); 403 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds())));
409 layer_tree_impl()->SetNeedsRedraw(); 404 layer_tree_impl()->SetNeedsRedraw();
410 } 405 }
411 406
412 const char* VideoLayerImpl::LayerTypeAsString() const { 407 const char* VideoLayerImpl::LayerTypeAsString() const {
413 return "cc::VideoLayerImpl"; 408 return "cc::VideoLayerImpl";
414 } 409 }
415 410
416 } // namespace cc 411 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698