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); |