summaryrefslogtreecommitdiffstats
path: root/cc/layers/video_layer_impl.cc
diff options
context:
space:
mode:
authordcastagna <dcastagna@chromium.org>2015-05-14 18:48:24 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-15 01:48:45 +0000
commitea0f35165bfac778916a3e567f31516b12b8fe9d (patch)
treea04b466a4ff397939761ac5561d3fba1270195c3 /cc/layers/video_layer_impl.cc
parent118856988dba956fda8dc30e4fdeb3f18baa5261 (diff)
downloadchromium_src-ea0f35165bfac778916a3e567f31516b12b8fe9d.zip
chromium_src-ea0f35165bfac778916a3e567f31516b12b8fe9d.tar.gz
chromium_src-ea0f35165bfac778916a3e567f31516b12b8fe9d.tar.bz2
cc: VideoLayerImpl VideoFrame::TEXTURE_YUV_420 support.
VideoFrame can carry YUV native textures. After crrev.com/1127423006 VideoResoucesUpdater will create the appropriate VideoFrameExternalResources. This change makes VideoLayerImpl deal with a VideoFrame with a NATIVE_TEXTURE format and a TEXTURE_YUV_420 texture format. BUG=485859 Review URL: https://codereview.chromium.org/1125303005 Cr-Commit-Position: refs/heads/master@{#330017}
Diffstat (limited to 'cc/layers/video_layer_impl.cc')
-rw-r--r--cc/layers/video_layer_impl.cc30
1 files changed, 20 insertions, 10 deletions
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index ae028d5..d81713a 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -217,8 +217,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
}
case VideoFrameExternalResources::YUV_RESOURCE: {
DCHECK_GE(frame_resources_.size(), 3u);
- if (frame_resources_.size() < 3u)
- break;
+
YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601;
if (frame_->format() == media::VideoFrame::YV12J) {
color_space = YUVVideoDrawQuad::JPEG;
@@ -227,15 +226,26 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
}
const gfx::Size ya_tex_size = coded_size;
- const gfx::Size uv_tex_size = media::VideoFrame::PlaneSize(
- frame_->format(), media::VideoFrame::kUPlane, coded_size);
- DCHECK(uv_tex_size ==
- media::VideoFrame::PlaneSize(
- frame_->format(), media::VideoFrame::kVPlane, coded_size));
- if (frame_resources_.size() > 3) {
- DCHECK(ya_tex_size ==
+ gfx::Size uv_tex_size;
+
+ if (frame_->format() == media::VideoFrame::NATIVE_TEXTURE) {
+ DCHECK_EQ(media::VideoFrame::TEXTURE_YUV_420, frame_->texture_format());
+ DCHECK_EQ(3u, frame_resources_.size()); // Alpha is not supported yet.
+ DCHECK(visible_rect.origin().IsOrigin());
+ DCHECK(visible_rect.size() == coded_size);
+ uv_tex_size.SetSize((ya_tex_size.width() + 1) / 2,
+ (ya_tex_size.height() + 1) / 2);
+ } else {
+ uv_tex_size = media::VideoFrame::PlaneSize(
+ frame_->format(), media::VideoFrame::kUPlane, coded_size);
+ DCHECK(uv_tex_size ==
media::VideoFrame::PlaneSize(
- frame_->format(), media::VideoFrame::kAPlane, coded_size));
+ frame_->format(), media::VideoFrame::kVPlane, coded_size));
+ DCHECK_IMPLIES(
+ frame_resources_.size() > 3,
+ ya_tex_size ==
+ media::VideoFrame::PlaneSize(
+ frame_->format(), media::VideoFrame::kAPlane, coded_size));
}
// Compute the UV sub-sampling factor based on the ratio between