summaryrefslogtreecommitdiffstats
path: root/cc/quads
diff options
context:
space:
mode:
authorhubbe <hubbe@chromium.org>2016-02-08 16:01:14 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-09 00:02:31 +0000
commit82ba0a1a9f120c5376a7978f1c6ba995b7c819f6 (patch)
tree213cc743a3737a3b474a21c92844513c5d72d6e1 /cc/quads
parent486e98700f552d7a5c4fbc1b3a9b5e9f2a6cf934 (diff)
downloadchromium_src-82ba0a1a9f120c5376a7978f1c6ba995b7c819f6.zip
chromium_src-82ba0a1a9f120c5376a7978f1c6ba995b7c819f6.tar.gz
chromium_src-82ba0a1a9f120c5376a7978f1c6ba995b7c819f6.tar.bz2
Add support for 9- and 10-bit h264 videos.
Videos are uploaded to GPU using half-floats if supported, otherwise they are downshifted to regular 8-bit textures before uploading. No dithering is done, except for whatever GL_DITHER might do. (Which is probably nothing.) BUG=445071 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Committed: https://crrev.com/074c4287f2625860b2a9eb437b97f1f1788f8f4b Cr-Commit-Position: refs/heads/master@{#373691} Review URL: https://codereview.chromium.org/1599533002 Cr-Commit-Position: refs/heads/master@{#374221}
Diffstat (limited to 'cc/quads')
-rw-r--r--cc/quads/draw_quad_unittest.cc52
-rw-r--r--cc/quads/yuv_video_draw_quad.cc12
-rw-r--r--cc/quads/yuv_video_draw_quad.h10
3 files changed, 61 insertions, 13 deletions
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index cfc20a1..8bde8c0 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -336,6 +336,31 @@ void CompareDrawQuad(DrawQuad* quad,
} \
SETUP_AND_COPY_QUAD_NEW(Type, quad_new);
+#define CREATE_QUAD_11_ALL(Type, a, b, c, d, e, f, g, h, i, j, k) \
+ Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
+ { \
+ QUAD_DATA quad_all->SetAll(shared_state, quad_rect, quad_opaque_rect, \
+ quad_visible_rect, needs_blending, a, b, c, d, \
+ e, f, g, h, i, j, k); \
+ } \
+ SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
+
+#define CREATE_QUAD_12_NEW(Type, a, b, c, d, e, f, g, h, i, j, k, l) \
+ Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \
+ { \
+ QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g, \
+ h, i, j, k, l); \
+ } \
+ SETUP_AND_COPY_QUAD_NEW(Type, quad_new);
+
+#define CREATE_QUAD_13_NEW(Type, a, b, c, d, e, f, g, h, i, j, k, l, m) \
+ Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \
+ { \
+ QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g, \
+ h, i, j, k, l, m); \
+ } \
+ SETUP_AND_COPY_QUAD_NEW(Type, quad_new);
+
#define CREATE_QUAD_ALL_RP(Type, a, b, c, d, e, f, g, copy_a) \
Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
{ \
@@ -623,13 +648,16 @@ TEST(DrawQuadTest, CopyYUVVideoDrawQuad) {
ResourceId u_plane_resource_id = 532;
ResourceId v_plane_resource_id = 4;
ResourceId a_plane_resource_id = 63;
+ float resource_offset = 0.5f;
+ float resource_multiplier = 2.001f;
YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::JPEG;
CREATE_SHARED_STATE();
- CREATE_QUAD_11_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect,
+ CREATE_QUAD_13_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect,
ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size,
uv_tex_size, y_plane_resource_id, u_plane_resource_id,
- v_plane_resource_id, a_plane_resource_id, color_space);
+ v_plane_resource_id, a_plane_resource_id, color_space,
+ resource_offset, resource_multiplier);
EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
EXPECT_EQ(opaque_rect, copy_quad->opaque_rect);
EXPECT_EQ(visible_rect, copy_quad->visible_rect);
@@ -642,11 +670,14 @@ TEST(DrawQuadTest, CopyYUVVideoDrawQuad) {
EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id());
EXPECT_EQ(a_plane_resource_id, copy_quad->a_plane_resource_id());
EXPECT_EQ(color_space, copy_quad->color_space);
-
- CREATE_QUAD_9_ALL(YUVVideoDrawQuad, ya_tex_coord_rect, uv_tex_coord_rect,
- ya_tex_size, uv_tex_size, y_plane_resource_id,
- u_plane_resource_id, v_plane_resource_id,
- a_plane_resource_id, color_space);
+ EXPECT_EQ(resource_offset, copy_quad->resource_offset);
+ EXPECT_EQ(resource_multiplier, copy_quad->resource_multiplier);
+
+ CREATE_QUAD_11_ALL(YUVVideoDrawQuad, ya_tex_coord_rect, uv_tex_coord_rect,
+ ya_tex_size, uv_tex_size, y_plane_resource_id,
+ u_plane_resource_id, v_plane_resource_id,
+ a_plane_resource_id, color_space, resource_offset,
+ resource_multiplier);
EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
EXPECT_EQ(ya_tex_coord_rect, copy_quad->ya_tex_coord_rect);
EXPECT_EQ(uv_tex_coord_rect, copy_quad->uv_tex_coord_rect);
@@ -657,6 +688,8 @@ TEST(DrawQuadTest, CopyYUVVideoDrawQuad) {
EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id());
EXPECT_EQ(a_plane_resource_id, copy_quad->a_plane_resource_id());
EXPECT_EQ(color_space, copy_quad->color_space);
+ EXPECT_EQ(resource_offset, copy_quad->resource_offset);
+ EXPECT_EQ(resource_multiplier, copy_quad->resource_multiplier);
}
TEST(DrawQuadTest, CopyPictureDrawQuad) {
@@ -879,10 +912,11 @@ TEST_F(DrawQuadIteratorTest, YUVVideoDrawQuad) {
YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::JPEG;
CREATE_SHARED_STATE();
- CREATE_QUAD_11_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect,
+ CREATE_QUAD_13_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect,
ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size,
uv_tex_size, y_plane_resource_id, u_plane_resource_id,
- v_plane_resource_id, a_plane_resource_id, color_space);
+ v_plane_resource_id, a_plane_resource_id, color_space, 0.0,
+ 1.0);
EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
EXPECT_EQ(y_plane_resource_id, quad_new->y_plane_resource_id());
EXPECT_EQ(u_plane_resource_id, quad_new->u_plane_resource_id());
diff --git a/cc/quads/yuv_video_draw_quad.cc b/cc/quads/yuv_video_draw_quad.cc
index f9a878a..93a0c91 100644
--- a/cc/quads/yuv_video_draw_quad.cc
+++ b/cc/quads/yuv_video_draw_quad.cc
@@ -27,7 +27,9 @@ void YUVVideoDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
unsigned u_plane_resource_id,
unsigned v_plane_resource_id,
unsigned a_plane_resource_id,
- ColorSpace color_space) {
+ ColorSpace color_space,
+ float offset,
+ float multiplier) {
bool needs_blending = false;
DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
opaque_rect, visible_rect, needs_blending);
@@ -41,6 +43,8 @@ void YUVVideoDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
resources.ids[kAPlaneResourceIdIndex] = a_plane_resource_id;
resources.count = a_plane_resource_id ? 4 : 3;
this->color_space = color_space;
+ this->resource_offset = offset;
+ this->resource_multiplier = multiplier;
}
void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
@@ -56,7 +60,9 @@ void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
unsigned u_plane_resource_id,
unsigned v_plane_resource_id,
unsigned a_plane_resource_id,
- ColorSpace color_space) {
+ ColorSpace color_space,
+ float offset,
+ float multiplier) {
DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
opaque_rect, visible_rect, needs_blending);
this->ya_tex_coord_rect = ya_tex_coord_rect;
@@ -69,6 +75,8 @@ void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
resources.ids[kAPlaneResourceIdIndex] = a_plane_resource_id;
resources.count = resources.ids[kAPlaneResourceIdIndex] ? 4 : 3;
this->color_space = color_space;
+ this->resource_offset = offset;
+ this->resource_multiplier = multiplier;
}
const YUVVideoDrawQuad* YUVVideoDrawQuad::MaterialCast(
diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h
index 1a72078..015d5b7 100644
--- a/cc/quads/yuv_video_draw_quad.h
+++ b/cc/quads/yuv_video_draw_quad.h
@@ -43,7 +43,9 @@ class CC_EXPORT YUVVideoDrawQuad : public DrawQuad {
unsigned u_plane_resource_id,
unsigned v_plane_resource_id,
unsigned a_plane_resource_id,
- ColorSpace color_space);
+ ColorSpace color_space,
+ float offset,
+ float multiplier);
void SetAll(const SharedQuadState* shared_quad_state,
const gfx::Rect& rect,
@@ -61,13 +63,17 @@ class CC_EXPORT YUVVideoDrawQuad : public DrawQuad {
unsigned u_plane_resource_id,
unsigned v_plane_resource_id,
unsigned a_plane_resource_id,
- ColorSpace color_space);
+ ColorSpace color_space,
+ float offset,
+ float multiplier);
gfx::RectF ya_tex_coord_rect;
gfx::RectF uv_tex_coord_rect;
gfx::Size ya_tex_size;
gfx::Size uv_tex_size;
ColorSpace color_space;
+ float resource_offset = 0.0f;
+ float resource_multiplier = 1.0f;
static const YUVVideoDrawQuad* MaterialCast(const DrawQuad*);