diff options
author | dcastagna <dcastagna@chromium.org> | 2015-05-14 18:48:24 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-15 01:48:45 +0000 |
commit | ea0f35165bfac778916a3e567f31516b12b8fe9d (patch) | |
tree | a04b466a4ff397939761ac5561d3fba1270195c3 /cc/layers/video_layer_impl.cc | |
parent | 118856988dba956fda8dc30e4fdeb3f18baa5261 (diff) | |
download | chromium_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.cc | 30 |
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 |