Index: cc/ipc/quads_struct_traits.h |
diff --git a/cc/ipc/quads_struct_traits.h b/cc/ipc/quads_struct_traits.h |
index 489049ccacb0059adc6c4f44060206c6bb8f0d00..56a22b09d96140e07df02c761993c4d0a2cb2933 100644 |
--- a/cc/ipc/quads_struct_traits.h |
+++ b/cc/ipc/quads_struct_traits.h |
@@ -19,6 +19,7 @@ |
#include "cc/quads/surface_draw_quad.h" |
#include "cc/quads/texture_draw_quad.h" |
#include "cc/quads/tile_draw_quad.h" |
+#include "cc/quads/y_video_draw_quad.h" |
#include "cc/quads/yuv_video_draw_quad.h" |
#include "ui/gfx/geometry/mojo/geometry_struct_traits.h" |
@@ -53,6 +54,8 @@ struct UnionTraits<cc::mojom::DrawQuadState, cc::DrawQuad> { |
return cc::mojom::DrawQuadState::DataView::Tag::TILE_QUAD_STATE; |
case cc::DrawQuad::YUV_VIDEO_CONTENT: |
return cc::mojom::DrawQuadState::DataView::Tag::YUV_VIDEO_QUAD_STATE; |
+ case cc::DrawQuad::Y_VIDEO_CONTENT: |
+ return cc::mojom::DrawQuadState::DataView::Tag::Y_VIDEO_QUAD_STATE; |
} |
NOTREACHED(); |
return cc::mojom::DrawQuadState::DataView::Tag::DEBUG_BORDER_QUAD_STATE; |
@@ -90,6 +93,10 @@ struct UnionTraits<cc::mojom::DrawQuadState, cc::DrawQuad> { |
return quad; |
} |
+ static const cc::DrawQuad& y_video_quad_state(const cc::DrawQuad& quad) { |
+ return quad; |
+ } |
+ |
static bool Read(cc::mojom::DrawQuadState::DataView data, cc::DrawQuad* out) { |
switch (data.tag()) { |
case cc::mojom::DrawQuadState::DataView::Tag::DEBUG_BORDER_QUAD_STATE: |
@@ -108,6 +115,8 @@ struct UnionTraits<cc::mojom::DrawQuadState, cc::DrawQuad> { |
return data.ReadStreamVideoQuadState(out); |
case cc::mojom::DrawQuadState::DataView::Tag::YUV_VIDEO_QUAD_STATE: |
return data.ReadYuvVideoQuadState(out); |
+ case cc::mojom::DrawQuadState::DataView::Tag::Y_VIDEO_QUAD_STATE: |
+ return data.ReadYVideoQuadState(out); |
} |
NOTREACHED(); |
return false; |
@@ -401,6 +410,36 @@ struct StructTraits<cc::mojom::YUVVideoQuadState, cc::DrawQuad> { |
cc::DrawQuad* out); |
}; |
+template <> |
+struct StructTraits<cc::mojom::YVideoQuadState, cc::DrawQuad> { |
+ static bool IsNull(const cc::DrawQuad& input) { |
+ return input.material != cc::DrawQuad::Y_VIDEO_CONTENT; |
+ } |
+ |
+ static void SetToNull(cc::DrawQuad* output) { |
+ // There is nothing to deserialize here if the DrawQuad is not a |
+ // YVideoContentDrawQuad. If it is, then this should not be called. |
+ DCHECK_NE(cc::DrawQuad::Y_VIDEO_CONTENT, output->material); |
+ } |
+ |
+ static uint32_t resource_id(const cc::DrawQuad& input) { |
+ const cc::YVideoDrawQuad* quad = cc::YVideoDrawQuad::MaterialCast(&input); |
+ return quad->resource_id(); |
+ } |
+ |
+ static const gfx::PointF& uv_top_left(const cc::DrawQuad& input) { |
+ const cc::YVideoDrawQuad* quad = cc::YVideoDrawQuad::MaterialCast(&input); |
+ return quad->uv_top_left; |
+ } |
+ |
+ static const gfx::PointF& uv_bottom_right(const cc::DrawQuad& input) { |
+ const cc::YVideoDrawQuad* quad = cc::YVideoDrawQuad::MaterialCast(&input); |
+ return quad->uv_bottom_right; |
+ } |
+ |
+ static bool Read(cc::mojom::YVideoQuadStateDataView data, cc::DrawQuad* out); |
+}; |
+ |
struct DrawQuadWithSharedQuadState { |
const cc::DrawQuad* quad; |
const cc::SharedQuadState* shared_quad_state; |