1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "cc/quads/yuv_video_draw_quad.h" 6 7 #include "base/logging.h" 8 #include "base/values.h" 9 #include "cc/base/math_util.h" 10 11 namespace cc { 12 13 YUVVideoDrawQuad::YUVVideoDrawQuad() 14 : y_plane_resource_id(0), 15 u_plane_resource_id(0), 16 v_plane_resource_id(0), 17 a_plane_resource_id(0) {} 18 YUVVideoDrawQuad::~YUVVideoDrawQuad() {} 19 20 scoped_ptr<YUVVideoDrawQuad> YUVVideoDrawQuad::Create() { 21 return make_scoped_ptr(new YUVVideoDrawQuad); 22 } 23 24 void YUVVideoDrawQuad::SetNew(const SharedQuadState* shared_quad_state, 25 gfx::Rect rect, 26 gfx::Rect opaque_rect, 27 gfx::SizeF tex_scale, 28 unsigned y_plane_resource_id, 29 unsigned u_plane_resource_id, 30 unsigned v_plane_resource_id, 31 unsigned a_plane_resource_id) { 32 gfx::Rect visible_rect = rect; 33 bool needs_blending = false; 34 DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect, 35 opaque_rect, visible_rect, needs_blending); 36 this->tex_scale = tex_scale; 37 this->y_plane_resource_id = y_plane_resource_id; 38 this->u_plane_resource_id = u_plane_resource_id; 39 this->v_plane_resource_id = v_plane_resource_id; 40 this->a_plane_resource_id = a_plane_resource_id; 41 } 42 43 void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state, 44 gfx::Rect rect, 45 gfx::Rect opaque_rect, 46 gfx::Rect visible_rect, 47 bool needs_blending, 48 gfx::SizeF tex_scale, 49 unsigned y_plane_resource_id, 50 unsigned u_plane_resource_id, 51 unsigned v_plane_resource_id, 52 unsigned a_plane_resource_id) { 53 DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect, 54 opaque_rect, visible_rect, needs_blending); 55 this->tex_scale = tex_scale; 56 this->y_plane_resource_id = y_plane_resource_id; 57 this->u_plane_resource_id = u_plane_resource_id; 58 this->v_plane_resource_id = v_plane_resource_id; 59 this->a_plane_resource_id = a_plane_resource_id; 60 } 61 62 void YUVVideoDrawQuad::IterateResources( 63 const ResourceIteratorCallback& callback) { 64 y_plane_resource_id = callback.Run(y_plane_resource_id); 65 u_plane_resource_id = callback.Run(u_plane_resource_id); 66 v_plane_resource_id = callback.Run(v_plane_resource_id); 67 if (a_plane_resource_id) 68 a_plane_resource_id = callback.Run(a_plane_resource_id); 69 } 70 71 const YUVVideoDrawQuad* YUVVideoDrawQuad::MaterialCast( 72 const DrawQuad* quad) { 73 DCHECK(quad->material == DrawQuad::YUV_VIDEO_CONTENT); 74 return static_cast<const YUVVideoDrawQuad*>(quad); 75 } 76 77 void YUVVideoDrawQuad::ExtendValue(base::DictionaryValue* value) const { 78 value->Set("tex_scale", MathUtil::AsValue(tex_scale).release()); 79 value->SetInteger("y_plane_resource_id", y_plane_resource_id); 80 value->SetInteger("u_plane_resource_id", u_plane_resource_id); 81 value->SetInteger("v_plane_resource_id", v_plane_resource_id); 82 value->SetInteger("a_plane_resource_id", a_plane_resource_id); 83 } 84 85 } // namespace cc 86