| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |