| 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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 DCHECK_EQ(frame_resources_.size(), 0u); | 195 DCHECK_EQ(frame_resources_.size(), 0u); |
| 196 DCHECK_EQ(software_resources_.size(), 1u); | 196 DCHECK_EQ(software_resources_.size(), 1u); |
| 197 if (software_resources_.size() < 1u) | 197 if (software_resources_.size() < 1u) |
| 198 break; | 198 break; |
| 199 bool premultiplied_alpha = true; | 199 bool premultiplied_alpha = true; |
| 200 gfx::PointF uv_top_left(0.f, 0.f); | 200 gfx::PointF uv_top_left(0.f, 0.f); |
| 201 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); | 201 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); |
| 202 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 202 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 203 bool flipped = false; | 203 bool flipped = false; |
| 204 bool nearest_neighbor = false; | 204 bool nearest_neighbor = false; |
| 205 // TODO(danakj): crbug.com/455931 | |
| 206 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 207 software_resources_[0]); | |
| 208 TextureDrawQuad* texture_quad = | 205 TextureDrawQuad* texture_quad = |
| 209 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 206 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 210 texture_quad->SetNew(shared_quad_state, | 207 texture_quad->SetNew(shared_quad_state, |
| 211 quad_rect, | 208 quad_rect, |
| 212 opaque_rect, | 209 opaque_rect, |
| 213 visible_quad_rect, | 210 visible_quad_rect, |
| 214 software_resources_[0], | 211 software_resources_[0], |
| 215 premultiplied_alpha, | 212 premultiplied_alpha, |
| 216 uv_top_left, | 213 uv_top_left, |
| 217 uv_bottom_right, | 214 uv_bottom_right, |
| 218 SK_ColorTRANSPARENT, | 215 SK_ColorTRANSPARENT, |
| 219 opacity, | 216 opacity, |
| 220 flipped, | 217 flipped, |
| 221 nearest_neighbor); | 218 nearest_neighbor); |
| 219 ValidateQuadResources(texture_quad); |
| 222 break; | 220 break; |
| 223 } | 221 } |
| 224 case VideoFrameExternalResources::YUV_RESOURCE: { | 222 case VideoFrameExternalResources::YUV_RESOURCE: { |
| 225 DCHECK_GE(frame_resources_.size(), 3u); | 223 DCHECK_GE(frame_resources_.size(), 3u); |
| 226 if (frame_resources_.size() < 3u) | 224 if (frame_resources_.size() < 3u) |
| 227 break; | 225 break; |
| 228 YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601; | 226 YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601; |
| 229 if (frame_->format() == media::VideoFrame::YV12J) { | 227 if (frame_->format() == media::VideoFrame::YV12J) { |
| 230 color_space = YUVVideoDrawQuad::JPEG; | 228 color_space = YUVVideoDrawQuad::JPEG; |
| 231 } else if (frame_->format() == media::VideoFrame::YV12HD) { | 229 } else if (frame_->format() == media::VideoFrame::YV12HD) { |
| 232 color_space = YUVVideoDrawQuad::REC_709; | 230 color_space = YUVVideoDrawQuad::REC_709; |
| 233 } | 231 } |
| 234 | 232 |
| 235 const gfx::Size ya_tex_size = coded_size; | 233 const gfx::Size ya_tex_size = coded_size; |
| 236 const gfx::Size uv_tex_size = media::VideoFrame::PlaneSize( | 234 const gfx::Size uv_tex_size = media::VideoFrame::PlaneSize( |
| 237 frame_->format(), media::VideoFrame::kUPlane, coded_size); | 235 frame_->format(), media::VideoFrame::kUPlane, coded_size); |
| 238 DCHECK(uv_tex_size == | 236 DCHECK(uv_tex_size == |
| 239 media::VideoFrame::PlaneSize( | 237 media::VideoFrame::PlaneSize( |
| 240 frame_->format(), media::VideoFrame::kVPlane, coded_size)); | 238 frame_->format(), media::VideoFrame::kVPlane, coded_size)); |
| 241 if (frame_resources_.size() > 3) { | 239 if (frame_resources_.size() > 3) { |
| 242 DCHECK(ya_tex_size == | 240 DCHECK(ya_tex_size == |
| 243 media::VideoFrame::PlaneSize( | 241 media::VideoFrame::PlaneSize( |
| 244 frame_->format(), media::VideoFrame::kAPlane, coded_size)); | 242 frame_->format(), media::VideoFrame::kAPlane, coded_size)); |
| 245 } | 243 } |
| 246 | 244 |
| 247 // TODO(danakj): crbug.com/455931 | |
| 248 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 249 frame_resources_[0]); | |
| 250 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 251 frame_resources_[1]); | |
| 252 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 253 frame_resources_[2]); | |
| 254 if (frame_resources_.size() > 3) { | |
| 255 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 256 frame_resources_[3]); | |
| 257 } | |
| 258 gfx::RectF tex_coord_rect( | 245 gfx::RectF tex_coord_rect( |
| 259 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); | 246 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); |
| 260 YUVVideoDrawQuad* yuv_video_quad = | 247 YUVVideoDrawQuad* yuv_video_quad = |
| 261 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); | 248 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); |
| 262 yuv_video_quad->SetNew( | 249 yuv_video_quad->SetNew( |
| 263 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, | 250 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, |
| 264 tex_coord_rect, ya_tex_size, uv_tex_size, frame_resources_[0], | 251 tex_coord_rect, ya_tex_size, uv_tex_size, frame_resources_[0], |
| 265 frame_resources_[1], frame_resources_[2], | 252 frame_resources_[1], frame_resources_[2], |
| 266 frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space); | 253 frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space); |
| 254 ValidateQuadResources(yuv_video_quad); |
| 267 break; | 255 break; |
| 268 } | 256 } |
| 269 case VideoFrameExternalResources::RGB_RESOURCE: { | 257 case VideoFrameExternalResources::RGB_RESOURCE: { |
| 270 DCHECK_EQ(frame_resources_.size(), 1u); | 258 DCHECK_EQ(frame_resources_.size(), 1u); |
| 271 if (frame_resources_.size() < 1u) | 259 if (frame_resources_.size() < 1u) |
| 272 break; | 260 break; |
| 273 bool premultiplied_alpha = true; | 261 bool premultiplied_alpha = true; |
| 274 gfx::PointF uv_top_left(0.f, 0.f); | 262 gfx::PointF uv_top_left(0.f, 0.f); |
| 275 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); | 263 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); |
| 276 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 264 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 277 bool flipped = false; | 265 bool flipped = false; |
| 278 bool nearest_neighbor = false; | 266 bool nearest_neighbor = false; |
| 279 // TODO(danakj): crbug.com/455931 | |
| 280 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 281 frame_resources_[0]); | |
| 282 TextureDrawQuad* texture_quad = | 267 TextureDrawQuad* texture_quad = |
| 283 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 268 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 284 texture_quad->SetNew(shared_quad_state, | 269 texture_quad->SetNew(shared_quad_state, |
| 285 quad_rect, | 270 quad_rect, |
| 286 opaque_rect, | 271 opaque_rect, |
| 287 visible_quad_rect, | 272 visible_quad_rect, |
| 288 frame_resources_[0], | 273 frame_resources_[0], |
| 289 premultiplied_alpha, | 274 premultiplied_alpha, |
| 290 uv_top_left, | 275 uv_top_left, |
| 291 uv_bottom_right, | 276 uv_bottom_right, |
| 292 SK_ColorTRANSPARENT, | 277 SK_ColorTRANSPARENT, |
| 293 opacity, | 278 opacity, |
| 294 flipped, | 279 flipped, |
| 295 nearest_neighbor); | 280 nearest_neighbor); |
| 281 ValidateQuadResources(texture_quad); |
| 296 break; | 282 break; |
| 297 } | 283 } |
| 298 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { | 284 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { |
| 299 DCHECK_EQ(frame_resources_.size(), 1u); | 285 DCHECK_EQ(frame_resources_.size(), 1u); |
| 300 if (frame_resources_.size() < 1u) | 286 if (frame_resources_.size() < 1u) |
| 301 break; | 287 break; |
| 302 // TODO(danakj): crbug.com/455931 | |
| 303 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 304 frame_resources_[0]); | |
| 305 gfx::Transform scale; | 288 gfx::Transform scale; |
| 306 scale.Scale(tex_width_scale, tex_height_scale); | 289 scale.Scale(tex_width_scale, tex_height_scale); |
| 307 StreamVideoDrawQuad* stream_video_quad = | 290 StreamVideoDrawQuad* stream_video_quad = |
| 308 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); | 291 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); |
| 309 stream_video_quad->SetNew( | 292 stream_video_quad->SetNew( |
| 310 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, | 293 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, |
| 311 frame_resources_[0], | 294 frame_resources_[0], |
| 312 scale * provider_client_impl_->StreamTextureMatrix()); | 295 scale * provider_client_impl_->StreamTextureMatrix()); |
| 296 ValidateQuadResources(stream_video_quad); |
| 313 break; | 297 break; |
| 314 } | 298 } |
| 315 case VideoFrameExternalResources::IO_SURFACE: { | 299 case VideoFrameExternalResources::IO_SURFACE: { |
| 316 DCHECK_EQ(frame_resources_.size(), 1u); | 300 DCHECK_EQ(frame_resources_.size(), 1u); |
| 317 if (frame_resources_.size() < 1u) | 301 if (frame_resources_.size() < 1u) |
| 318 break; | 302 break; |
| 319 // TODO(danakj): crbug.com/455931 | |
| 320 layer_tree_impl()->resource_provider()->ValidateResource( | |
| 321 frame_resources_[0]); | |
| 322 IOSurfaceDrawQuad* io_surface_quad = | 303 IOSurfaceDrawQuad* io_surface_quad = |
| 323 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>(); | 304 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>(); |
| 324 io_surface_quad->SetNew(shared_quad_state, | 305 io_surface_quad->SetNew(shared_quad_state, |
| 325 quad_rect, | 306 quad_rect, |
| 326 opaque_rect, | 307 opaque_rect, |
| 327 visible_quad_rect, | 308 visible_quad_rect, |
| 328 visible_rect.size(), | 309 visible_rect.size(), |
| 329 frame_resources_[0], | 310 frame_resources_[0], |
| 330 IOSurfaceDrawQuad::UNFLIPPED); | 311 IOSurfaceDrawQuad::UNFLIPPED); |
| 312 ValidateQuadResources(io_surface_quad); |
| 331 break; | 313 break; |
| 332 } | 314 } |
| 333 #if defined(VIDEO_HOLE) | 315 #if defined(VIDEO_HOLE) |
| 334 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not | 316 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not |
| 335 // maintained by the general compositor team. Please contact the following | 317 // maintained by the general compositor team. Please contact the following |
| 336 // people instead: | 318 // people instead: |
| 337 // | 319 // |
| 338 // wonsik@chromium.org | 320 // wonsik@chromium.org |
| 339 // lcwu@chromium.org | 321 // lcwu@chromium.org |
| 340 case VideoFrameExternalResources::HOLE: { | 322 case VideoFrameExternalResources::HOLE: { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 void VideoLayerImpl::SetNeedsRedraw() { | 376 void VideoLayerImpl::SetNeedsRedraw() { |
| 395 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); | 377 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); |
| 396 layer_tree_impl()->SetNeedsRedraw(); | 378 layer_tree_impl()->SetNeedsRedraw(); |
| 397 } | 379 } |
| 398 | 380 |
| 399 const char* VideoLayerImpl::LayerTypeAsString() const { | 381 const char* VideoLayerImpl::LayerTypeAsString() const { |
| 400 return "cc::VideoLayerImpl"; | 382 return "cc::VideoLayerImpl"; |
| 401 } | 383 } |
| 402 | 384 |
| 403 } // namespace cc | 385 } // namespace cc |
| OLD | NEW |