Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6239)

Unified Diff: cc/layers/video_layer_impl.cc

Issue 2683763003: cc: make resource keep video buffer format for hardware overlay.
Patch Set: make Resource keep video buffer format Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/output/overlay_candidate.cc » ('j') | cc/output/overlay_candidate.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | cc/output/overlay_candidate.cc » ('j') | cc/output/overlay_candidate.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698