Home | History | Annotate | Download | only in quads
      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                               const gfx::Rect& rect,
     26                               const gfx::Rect& opaque_rect,
     27                               const gfx::Rect& visible_rect,
     28                               const gfx::RectF& tex_coord_rect,
     29                               unsigned y_plane_resource_id,
     30                               unsigned u_plane_resource_id,
     31                               unsigned v_plane_resource_id,
     32                               unsigned a_plane_resource_id,
     33                               ColorSpace color_space) {
     34   bool needs_blending = false;
     35   DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
     36                    opaque_rect, visible_rect, needs_blending);
     37   this->tex_coord_rect = tex_coord_rect;
     38   this->y_plane_resource_id = y_plane_resource_id;
     39   this->u_plane_resource_id = u_plane_resource_id;
     40   this->v_plane_resource_id = v_plane_resource_id;
     41   this->a_plane_resource_id = a_plane_resource_id;
     42   this->color_space = color_space;
     43 }
     44 
     45 void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
     46                               const gfx::Rect& rect,
     47                               const gfx::Rect& opaque_rect,
     48                               const gfx::Rect& visible_rect,
     49                               bool needs_blending,
     50                               const gfx::RectF& tex_coord_rect,
     51                               unsigned y_plane_resource_id,
     52                               unsigned u_plane_resource_id,
     53                               unsigned v_plane_resource_id,
     54                               unsigned a_plane_resource_id,
     55                               ColorSpace color_space) {
     56   DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
     57                    opaque_rect, visible_rect, needs_blending);
     58   this->tex_coord_rect = tex_coord_rect;
     59   this->y_plane_resource_id = y_plane_resource_id;
     60   this->u_plane_resource_id = u_plane_resource_id;
     61   this->v_plane_resource_id = v_plane_resource_id;
     62   this->a_plane_resource_id = a_plane_resource_id;
     63   this->color_space = color_space;
     64 }
     65 
     66 void YUVVideoDrawQuad::IterateResources(
     67     const ResourceIteratorCallback& callback) {
     68   y_plane_resource_id = callback.Run(y_plane_resource_id);
     69   u_plane_resource_id = callback.Run(u_plane_resource_id);
     70   v_plane_resource_id = callback.Run(v_plane_resource_id);
     71   if (a_plane_resource_id)
     72     a_plane_resource_id = callback.Run(a_plane_resource_id);
     73 }
     74 
     75 const YUVVideoDrawQuad* YUVVideoDrawQuad::MaterialCast(
     76     const DrawQuad* quad) {
     77   DCHECK(quad->material == DrawQuad::YUV_VIDEO_CONTENT);
     78   return static_cast<const YUVVideoDrawQuad*>(quad);
     79 }
     80 
     81 void YUVVideoDrawQuad::ExtendValue(base::DictionaryValue* value) const {
     82   value->Set("tex_coord_rect", MathUtil::AsValue(tex_coord_rect).release());
     83   value->SetInteger("y_plane_resource_id", y_plane_resource_id);
     84   value->SetInteger("u_plane_resource_id", u_plane_resource_id);
     85   value->SetInteger("v_plane_resource_id", v_plane_resource_id);
     86   value->SetInteger("a_plane_resource_id", a_plane_resource_id);
     87 }
     88 
     89 }  // namespace cc
     90