Index: cc/layers/video_layer_impl.cc |
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc |
index 94125d6735cd18c7ecd53cbd50c42929fbb45736..2449c08cdb375603101bbec6ad4a25b5be055aea 100644 |
--- a/cc/layers/video_layer_impl.cc |
+++ b/cc/layers/video_layer_impl.cc |
@@ -133,6 +133,7 @@ void VideoLayerImpl::WillDrawInternal(ResourceProvider* resource_provider) { |
convert_yuv_ = |
resource_provider->default_resource_type() == ResourceProvider::Bitmap && |
(format_ == media::VideoFrame::YV12 || |
+ format_ == media::VideoFrame::YV12A || |
format_ == media::VideoFrame::YV16); |
if (convert_yuv_) |
@@ -216,6 +217,25 @@ void VideoLayerImpl::AppendQuads(QuadSink* quad_sink, |
quad_sink->Append(yuv_video_quad.PassAs<DrawQuad>(), append_quads_data); |
break; |
} |
+ case media::VideoFrame::YV12A: { |
+ // YUV software decoder. |
+ const FramePlane& y_plane = frame_planes_[media::VideoFrame::kYPlane]; |
+ const FramePlane& u_plane = frame_planes_[media::VideoFrame::kUPlane]; |
+ const FramePlane& v_plane = frame_planes_[media::VideoFrame::kVPlane]; |
+ const FramePlane& a_plane = frame_planes_[media::VideoFrame::kAPlane]; |
+ gfx::SizeF tex_scale(tex_width_scale, tex_height_scale); |
+ scoped_ptr<YUVVideoDrawQuad> yuva_video_quad = YUVVideoDrawQuad::Create(); |
+ yuva_video_quad->SetNew(shared_quad_state, |
+ quad_rect, |
+ opaque_rect, |
+ tex_scale, |
+ y_plane, |
+ u_plane, |
+ v_plane, |
+ a_plane); |
+ quad_sink->Append(yuva_video_quad.PassAs<DrawQuad>(), append_quads_data); |
+ break; |
+ } |
case media::VideoFrame::RGB32: { |
// RGBA software decoder: a converted YUV frame (see: convert_yuv_). |
const FramePlane& plane = frame_planes_[media::VideoFrame::kRGBPlane]; |
@@ -332,7 +352,9 @@ static gfx::Size VideoFrameDimension(media::VideoFrame* frame, int plane) { |
gfx::Size dimensions = frame->coded_size(); |
switch (frame->format()) { |
case media::VideoFrame::YV12: |
- if (plane != media::VideoFrame::kYPlane) { |
+ case media::VideoFrame::YV12A: |
+ if (plane != media::VideoFrame::kYPlane && |
+ plane != media::VideoFrame::kAPlane) { |
dimensions.set_width(dimensions.width() / 2); |
dimensions.set_height(dimensions.height() / 2); |
} |
@@ -370,6 +392,7 @@ static GLenum ConvertVFCFormatToGLenum(const media::VideoFrame::Format format) { |
switch (format) { |
case media::VideoFrame::YV12: |
case media::VideoFrame::YV16: |
+ case media::VideoFrame::YV12A: |
return GL_LUMINANCE; |
case media::VideoFrame::RGB32: |
return GL_RGBA; |