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#ifndef CC_QUADS_YUV_VIDEO_DRAW_QUAD_H_
6#define CC_QUADS_YUV_VIDEO_DRAW_QUAD_H_
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "cc/base/cc_export.h"
11#include "cc/layers/video_layer_impl.h"
12#include "cc/quads/draw_quad.h"
13
14namespace cc {
15
16class CC_EXPORT YUVVideoDrawQuad : public DrawQuad {
17 public:
18  enum ColorSpace {
19    REC_601,       // SDTV standard with restricted "studio swing" color range.
20    REC_601_JPEG,  // Full color range [0, 255] variant of the above.
21    COLOR_SPACE_LAST = REC_601_JPEG
22  };
23
24  virtual ~YUVVideoDrawQuad();
25
26  YUVVideoDrawQuad();
27
28  void SetNew(const SharedQuadState* shared_quad_state,
29              const gfx::Rect& rect,
30              const gfx::Rect& opaque_rect,
31              const gfx::Rect& visible_rect,
32              const gfx::RectF& tex_coord_rect,
33              unsigned y_plane_resource_id,
34              unsigned u_plane_resource_id,
35              unsigned v_plane_resource_id,
36              unsigned a_plane_resource_id,
37              ColorSpace color_space);
38
39  void SetAll(const SharedQuadState* shared_quad_state,
40              const gfx::Rect& rect,
41              const gfx::Rect& opaque_rect,
42              const gfx::Rect& visible_rect,
43              bool needs_blending,
44              const gfx::RectF& tex_coord_rect,
45              unsigned y_plane_resource_id,
46              unsigned u_plane_resource_id,
47              unsigned v_plane_resource_id,
48              unsigned a_plane_resource_id,
49              ColorSpace color_space);
50
51  gfx::RectF tex_coord_rect;
52  unsigned y_plane_resource_id;
53  unsigned u_plane_resource_id;
54  unsigned v_plane_resource_id;
55  unsigned a_plane_resource_id;
56  ColorSpace color_space;
57
58  virtual void IterateResources(const ResourceIteratorCallback& callback)
59      OVERRIDE;
60
61  static const YUVVideoDrawQuad* MaterialCast(const DrawQuad*);
62
63 private:
64  virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
65};
66
67}  // namespace cc
68
69#endif  // CC_QUADS_YUV_VIDEO_DRAW_QUAD_H_
70