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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 DCHECK_EQ(frame_resources_.size(), 0u); | 194 DCHECK_EQ(frame_resources_.size(), 0u); |
195 DCHECK_EQ(software_resources_.size(), 1u); | 195 DCHECK_EQ(software_resources_.size(), 1u); |
196 if (software_resources_.size() < 1u) | 196 if (software_resources_.size() < 1u) |
197 break; | 197 break; |
198 bool premultiplied_alpha = true; | 198 bool premultiplied_alpha = true; |
199 gfx::PointF uv_top_left(0.f, 0.f); | 199 gfx::PointF uv_top_left(0.f, 0.f); |
200 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); | 200 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); |
201 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 201 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
202 bool flipped = false; | 202 bool flipped = false; |
203 bool nearest_neighbor = false; | 203 bool nearest_neighbor = false; |
| 204 // TODO(danakj): crbug.com/455931 |
| 205 layer_tree_impl()->resource_provider()->ValidateResource( |
| 206 software_resources_[0]); |
204 TextureDrawQuad* texture_quad = | 207 TextureDrawQuad* texture_quad = |
205 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 208 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
206 texture_quad->SetNew(shared_quad_state, | 209 texture_quad->SetNew(shared_quad_state, |
207 quad_rect, | 210 quad_rect, |
208 opaque_rect, | 211 opaque_rect, |
209 visible_quad_rect, | 212 visible_quad_rect, |
210 software_resources_[0], | 213 software_resources_[0], |
211 premultiplied_alpha, | 214 premultiplied_alpha, |
212 uv_top_left, | 215 uv_top_left, |
213 uv_bottom_right, | 216 uv_bottom_right, |
(...skipping 19 matching lines...) Expand all Loading... |
233 frame_->format(), media::VideoFrame::kUPlane, coded_size); | 236 frame_->format(), media::VideoFrame::kUPlane, coded_size); |
234 DCHECK(uv_tex_size == | 237 DCHECK(uv_tex_size == |
235 media::VideoFrame::PlaneSize( | 238 media::VideoFrame::PlaneSize( |
236 frame_->format(), media::VideoFrame::kVPlane, coded_size)); | 239 frame_->format(), media::VideoFrame::kVPlane, coded_size)); |
237 if (frame_resources_.size() > 3) { | 240 if (frame_resources_.size() > 3) { |
238 DCHECK(ya_tex_size == | 241 DCHECK(ya_tex_size == |
239 media::VideoFrame::PlaneSize( | 242 media::VideoFrame::PlaneSize( |
240 frame_->format(), media::VideoFrame::kAPlane, coded_size)); | 243 frame_->format(), media::VideoFrame::kAPlane, coded_size)); |
241 } | 244 } |
242 | 245 |
| 246 // TODO(danakj): crbug.com/455931 |
| 247 layer_tree_impl()->resource_provider()->ValidateResource( |
| 248 frame_resources_[0]); |
| 249 layer_tree_impl()->resource_provider()->ValidateResource( |
| 250 frame_resources_[1]); |
| 251 layer_tree_impl()->resource_provider()->ValidateResource( |
| 252 frame_resources_[2]); |
| 253 if (frame_resources_.size() > 3) { |
| 254 layer_tree_impl()->resource_provider()->ValidateResource( |
| 255 frame_resources_[3]); |
| 256 } |
243 gfx::RectF tex_coord_rect( | 257 gfx::RectF tex_coord_rect( |
244 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); | 258 tex_x_offset, tex_y_offset, tex_width_scale, tex_height_scale); |
245 YUVVideoDrawQuad* yuv_video_quad = | 259 YUVVideoDrawQuad* yuv_video_quad = |
246 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); | 260 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); |
247 yuv_video_quad->SetNew( | 261 yuv_video_quad->SetNew( |
248 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, | 262 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, |
249 tex_coord_rect, ya_tex_size, uv_tex_size, frame_resources_[0], | 263 tex_coord_rect, ya_tex_size, uv_tex_size, frame_resources_[0], |
250 frame_resources_[1], frame_resources_[2], | 264 frame_resources_[1], frame_resources_[2], |
251 frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space); | 265 frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space); |
252 break; | 266 break; |
253 } | 267 } |
254 case VideoFrameExternalResources::RGB_RESOURCE: { | 268 case VideoFrameExternalResources::RGB_RESOURCE: { |
255 DCHECK_EQ(frame_resources_.size(), 1u); | 269 DCHECK_EQ(frame_resources_.size(), 1u); |
256 if (frame_resources_.size() < 1u) | 270 if (frame_resources_.size() < 1u) |
257 break; | 271 break; |
258 bool premultiplied_alpha = true; | 272 bool premultiplied_alpha = true; |
259 gfx::PointF uv_top_left(0.f, 0.f); | 273 gfx::PointF uv_top_left(0.f, 0.f); |
260 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); | 274 gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale); |
261 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 275 float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
262 bool flipped = false; | 276 bool flipped = false; |
263 bool nearest_neighbor = false; | 277 bool nearest_neighbor = false; |
| 278 // TODO(danakj): crbug.com/455931 |
| 279 layer_tree_impl()->resource_provider()->ValidateResource( |
| 280 frame_resources_[0]); |
264 TextureDrawQuad* texture_quad = | 281 TextureDrawQuad* texture_quad = |
265 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 282 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
266 texture_quad->SetNew(shared_quad_state, | 283 texture_quad->SetNew(shared_quad_state, |
267 quad_rect, | 284 quad_rect, |
268 opaque_rect, | 285 opaque_rect, |
269 visible_quad_rect, | 286 visible_quad_rect, |
270 frame_resources_[0], | 287 frame_resources_[0], |
271 premultiplied_alpha, | 288 premultiplied_alpha, |
272 uv_top_left, | 289 uv_top_left, |
273 uv_bottom_right, | 290 uv_bottom_right, |
274 SK_ColorTRANSPARENT, | 291 SK_ColorTRANSPARENT, |
275 opacity, | 292 opacity, |
276 flipped, | 293 flipped, |
277 nearest_neighbor); | 294 nearest_neighbor); |
278 break; | 295 break; |
279 } | 296 } |
280 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { | 297 case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: { |
281 DCHECK_EQ(frame_resources_.size(), 1u); | 298 DCHECK_EQ(frame_resources_.size(), 1u); |
282 if (frame_resources_.size() < 1u) | 299 if (frame_resources_.size() < 1u) |
283 break; | 300 break; |
| 301 // TODO(danakj): crbug.com/455931 |
| 302 layer_tree_impl()->resource_provider()->ValidateResource( |
| 303 frame_resources_[0]); |
284 gfx::Transform scale; | 304 gfx::Transform scale; |
285 scale.Scale(tex_width_scale, tex_height_scale); | 305 scale.Scale(tex_width_scale, tex_height_scale); |
286 StreamVideoDrawQuad* stream_video_quad = | 306 StreamVideoDrawQuad* stream_video_quad = |
287 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); | 307 render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); |
288 stream_video_quad->SetNew( | 308 stream_video_quad->SetNew( |
289 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, | 309 shared_quad_state, quad_rect, opaque_rect, visible_quad_rect, |
290 frame_resources_[0], | 310 frame_resources_[0], |
291 scale * provider_client_impl_->StreamTextureMatrix()); | 311 scale * provider_client_impl_->StreamTextureMatrix()); |
292 break; | 312 break; |
293 } | 313 } |
294 case VideoFrameExternalResources::IO_SURFACE: { | 314 case VideoFrameExternalResources::IO_SURFACE: { |
295 DCHECK_EQ(frame_resources_.size(), 1u); | 315 DCHECK_EQ(frame_resources_.size(), 1u); |
296 if (frame_resources_.size() < 1u) | 316 if (frame_resources_.size() < 1u) |
297 break; | 317 break; |
| 318 // TODO(danakj): crbug.com/455931 |
| 319 layer_tree_impl()->resource_provider()->ValidateResource( |
| 320 frame_resources_[0]); |
298 IOSurfaceDrawQuad* io_surface_quad = | 321 IOSurfaceDrawQuad* io_surface_quad = |
299 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>(); | 322 render_pass->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>(); |
300 io_surface_quad->SetNew(shared_quad_state, | 323 io_surface_quad->SetNew(shared_quad_state, |
301 quad_rect, | 324 quad_rect, |
302 opaque_rect, | 325 opaque_rect, |
303 visible_quad_rect, | 326 visible_quad_rect, |
304 visible_rect.size(), | 327 visible_rect.size(), |
305 frame_resources_[0], | 328 frame_resources_[0], |
306 IOSurfaceDrawQuad::UNFLIPPED); | 329 IOSurfaceDrawQuad::UNFLIPPED); |
307 break; | 330 break; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 void VideoLayerImpl::SetNeedsRedraw() { | 393 void VideoLayerImpl::SetNeedsRedraw() { |
371 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); | 394 SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds()))); |
372 layer_tree_impl()->SetNeedsRedraw(); | 395 layer_tree_impl()->SetNeedsRedraw(); |
373 } | 396 } |
374 | 397 |
375 const char* VideoLayerImpl::LayerTypeAsString() const { | 398 const char* VideoLayerImpl::LayerTypeAsString() const { |
376 return "cc::VideoLayerImpl"; | 399 return "cc::VideoLayerImpl"; |
377 } | 400 } |
378 | 401 |
379 } // namespace cc | 402 } // namespace cc |
OLD | NEW |