| Index: cc/layers/video_layer_impl.cc
|
| diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
|
| index d63ab87c7ae41664b353642f6a4779a1f92b8ade..f245c11618eb4996f8dd13f4536e69884b9f3d60 100644
|
| --- a/cc/layers/video_layer_impl.cc
|
| +++ b/cc/layers/video_layer_impl.cc
|
| @@ -23,6 +23,54 @@
|
|
|
| namespace cc {
|
|
|
| +namespace {
|
| +
|
| +gfx::BufferFormat GetBufferFormat(media::VideoPixelFormat pixel_format) {
|
| + switch (pixel_format) {
|
| + case media::PIXEL_FORMAT_YV12:
|
| + return gfx::BufferFormat::YVU_420;
|
| + case media::PIXEL_FORMAT_NV12:
|
| + return gfx::BufferFormat::YUV_420_BIPLANAR;
|
| + case media::PIXEL_FORMAT_UYVY:
|
| + return gfx::BufferFormat::UYVY_422;
|
| + case media::PIXEL_FORMAT_ARGB:
|
| + return gfx::BufferFormat::BGRA_8888;
|
| + case media::PIXEL_FORMAT_XRGB:
|
| + return gfx::BufferFormat::BGRX_8888;
|
| + case media::PIXEL_FORMAT_RGB32:
|
| + return gfx::BufferFormat::RGBX_8888;
|
| + case media::PIXEL_FORMAT_Y8:
|
| + return gfx::BufferFormat::R_8;
|
| + case media::PIXEL_FORMAT_Y16:
|
| + return gfx::BufferFormat::RG_88;
|
| + case media::PIXEL_FORMAT_UNKNOWN:
|
| + case media::PIXEL_FORMAT_I420:
|
| + case media::PIXEL_FORMAT_YV16:
|
| + case media::PIXEL_FORMAT_YV12A:
|
| + case media::PIXEL_FORMAT_YV24:
|
| + case media::PIXEL_FORMAT_NV21:
|
| + case media::PIXEL_FORMAT_YUY2:
|
| + case media::PIXEL_FORMAT_RGB24:
|
| + case media::PIXEL_FORMAT_MJPEG:
|
| + case media::PIXEL_FORMAT_MT21:
|
| + case media::PIXEL_FORMAT_YUV420P9:
|
| + case media::PIXEL_FORMAT_YUV420P10:
|
| + case media::PIXEL_FORMAT_YUV422P9:
|
| + case media::PIXEL_FORMAT_YUV422P10:
|
| + case media::PIXEL_FORMAT_YUV444P9:
|
| + case media::PIXEL_FORMAT_YUV444P10:
|
| + case media::PIXEL_FORMAT_YUV420P12:
|
| + case media::PIXEL_FORMAT_YUV422P12:
|
| + case media::PIXEL_FORMAT_YUV444P12:
|
| + case media::PIXEL_FORMAT_I422:
|
| + break;
|
| + }
|
| + NOTREACHED();
|
| + return gfx::BufferFormat::BGRA_8888;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // static
|
| std::unique_ptr<VideoLayerImpl> VideoLayerImpl::Create(
|
| LayerTreeImpl* tree_impl,
|
| @@ -48,7 +96,12 @@ VideoLayerImpl::VideoLayerImpl(
|
| : LayerImpl(tree_impl, id),
|
| provider_client_impl_(std::move(provider_client_impl)),
|
| frame_(nullptr),
|
| - video_rotation_(video_rotation) {
|
| + video_rotation_(video_rotation),
|
| + frame_resource_type_(VideoFrameExternalResources::NONE),
|
| + frame_pixel_format_(media::PIXEL_FORMAT_UNKNOWN),
|
| + frame_resource_offset_(0.0f),
|
| + frame_resource_multiplier_(1.0f),
|
| + frame_bits_per_channel_(8) {
|
| set_may_contain_video(true);
|
| }
|
|
|
| @@ -109,6 +162,7 @@ bool VideoLayerImpl::WillDraw(DrawMode draw_mode,
|
| VideoFrameExternalResources external_resources =
|
| updater_->CreateExternalResourcesFromVideoFrame(frame_);
|
| frame_resource_type_ = external_resources.type;
|
| + frame_pixel_format_ = external_resources.pixel_format;
|
|
|
| if (external_resources.type ==
|
| VideoFrameExternalResources::SOFTWARE_RESOURCE) {
|
| @@ -320,7 +374,8 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
|
| stream_video_quad->SetNew(shared_quad_state, quad_rect, opaque_rect,
|
| visible_quad_rect, frame_resources_[0].id,
|
| - frame_resources_[0].size_in_pixels, scale);
|
| + frame_resources_[0].size_in_pixels,
|
| + GetBufferFormat(frame_pixel_format_), scale);
|
| ValidateQuadResources(stream_video_quad);
|
| break;
|
| }
|
|
|