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                               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