| 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..567bb46b073c92c2c99443c9749374cfb0ed3533 100644
|
| --- a/cc/layers/video_layer_impl.cc
|
| +++ b/cc/layers/video_layer_impl.cc
|
| @@ -23,6 +23,59 @@
|
|
|
| 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_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:
|
| + // Above pixel format doesn't match exact buffer format. However, this
|
| + // mismatch is fine because hardware overlay needs to know the buffer
|
| + // format and above format resources never be overlayed.
|
| + return gfx::BufferFormat::RGBA_8888;
|
| + case media::PIXEL_FORMAT_UNKNOWN:
|
| + break;
|
| + }
|
| + NOTREACHED();
|
| + return gfx::BufferFormat::RGBA_8888;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // static
|
| std::unique_ptr<VideoLayerImpl> VideoLayerImpl::Create(
|
| LayerTreeImpl* tree_impl,
|
| @@ -128,6 +181,7 @@ bool VideoLayerImpl::WillDraw(DrawMode draw_mode,
|
| for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) {
|
| unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox(
|
| external_resources.mailboxes[i],
|
| + GetBufferFormat(external_resources.pixel_format),
|
| SingleReleaseCallbackImpl::Create(
|
| external_resources.release_callbacks[i]),
|
| external_resources.read_lock_fences_enabled);
|
|
|