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

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

Issue 1096703006: cc: Some more cleanup and removing TODOs for validating resources. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698