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 |