Index: media/video/gpu_memory_buffer_video_frame_pool.cc |
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc |
index 41bad43fdf080d290e65d4bead58642999c75fbb..9e5e5161ec7387da1d8bc55084a43e01fa4e338d 100644 |
--- a/media/video/gpu_memory_buffer_video_frame_pool.cc |
+++ b/media/video/gpu_memory_buffer_video_frame_pool.cc |
@@ -27,6 +27,9 @@ gfx::BufferFormat GpuMemoryBufferFormat(VideoPixelFormat format, size_t plane) { |
case PIXEL_FORMAT_YV12: |
DCHECK_LE(plane, 2u); |
return gfx::BufferFormat::R_8; |
+ case PIXEL_FORMAT_YV12A: |
+ DCHECK_LE(plane, 3u); |
+ return gfx::BufferFormat::R_8; |
case PIXEL_FORMAT_NV12: |
DCHECK_LE(plane, 1u); |
return gfx::BufferFormat::YUV_420_BIPLANAR; |
@@ -45,6 +48,9 @@ unsigned ImageInternalFormat(VideoPixelFormat format, size_t plane) { |
case PIXEL_FORMAT_YV12: |
DCHECK_LE(plane, 2u); |
return GL_RED_EXT; |
+ case PIXEL_FORMAT_YV12A: |
+ DCHECK_LE(plane, 3u); |
+ return GL_RED_EXT; |
case PIXEL_FORMAT_NV12: |
// TODO(dshwang): support ChromeOS using GL_RG_EXT. crbug.com/356871 |
DCHECK_LE(plane, 1u); |
@@ -77,6 +83,7 @@ gfx::Size CodedSize(const gfx::Size& size, VideoPixelFormat format) { |
switch (format) { |
case PIXEL_FORMAT_I420: |
case PIXEL_FORMAT_YV12: |
+ case PIXEL_FORMAT_YV12A: |
case PIXEL_FORMAT_NV12: |
return gfx::Size(RoundUp(size.width(), 2), RoundUp(size.height(), 2)); |
case PIXEL_FORMAT_UYVY: |
@@ -349,6 +356,14 @@ class GpuMemoryBufferVideoFrameFuture : public VideoFrameFuture { |
mailbox_holders[VideoFrame::kVPlane], release_video_frame_callback, |
coded_size, visible_rect_, natural_size_, timestamp_); |
break; |
+ case PIXEL_FORMAT_YV12A: |
+ released_video_frame_ = VideoFrame::WrapYV12ANativeTextures( |
+ mailbox_holders[VideoFrame::kYPlane], |
+ mailbox_holders[VideoFrame::kUPlane], |
+ mailbox_holders[VideoFrame::kVPlane], |
+ mailbox_holders[VideoFrame::kAPlane], release_video_frame_callback, |
+ coded_size, visible_rect_, natural_size_, timestamp_); |
+ break; |
case PIXEL_FORMAT_NV12: |
case PIXEL_FORMAT_UYVY: |
released_video_frame_ = VideoFrame::WrapNativeTexture( |
@@ -384,6 +399,7 @@ class GpuMemoryBufferVideoFrameFuture : public VideoFrameFuture { |
switch (frame_resources_->format()) { |
case PIXEL_FORMAT_I420: |
case PIXEL_FORMAT_YV12: |
+ case PIXEL_FORMAT_YV12A: |
case PIXEL_FORMAT_UYVY: |
return static_cast<uint8_t*>( |
frame_resources_->GetPlaneResource(plane).gpu_memory_buffer->memory( |
@@ -404,6 +420,7 @@ class GpuMemoryBufferVideoFrameFuture : public VideoFrameFuture { |
switch (frame_resources_->format()) { |
case PIXEL_FORMAT_I420: |
case PIXEL_FORMAT_YV12: |
+ case PIXEL_FORMAT_YV12A: |
case PIXEL_FORMAT_UYVY: |
return frame_resources_->GetPlaneResource(plane) |
.gpu_memory_buffer->stride(0); |
@@ -567,6 +584,7 @@ class GpuMemoryBufferVideoFramePool::PoolImpl |
// TODO(dshwang): support more format. crbug.com/356871 |
case PIXEL_FORMAT_I420: |
case PIXEL_FORMAT_YV12: |
+ case PIXEL_FORMAT_YV12A: |
case PIXEL_FORMAT_NV12: |
case PIXEL_FORMAT_UYVY: |
return true; |