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

Unified Diff: cc/layers/video_layer_impl.cc

Issue 2683763003: cc: make resource keep video buffer format for hardware overlay.
Patch Set: plumbing video format to ozone Created 3 years, 10 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
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;
}

Powered by Google App Engine
This is Rietveld 408576698