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

Unified Diff: media/video/gpu_memory_buffer_video_frame_pool.cc

Issue 2648633005: cros: Support YUYV format for GPU memory buffer video frames
Patch Set: Enable YUYV GPU memory buffer video frames 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: 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 d75f7aaa690b4b5a2442be1d1797cb642a86eb92..8608f6a84ff23eca9930994ad4bfbd43ee136afe 100644
--- a/media/video/gpu_memory_buffer_video_frame_pool.cc
+++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -182,6 +182,9 @@ gfx::BufferFormat GpuMemoryBufferFormat(
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
DCHECK_EQ(0u, plane);
return gfx::BufferFormat::UYVY_422;
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
+ DCHECK_EQ(0u, plane);
+ return gfx::BufferFormat::YUYV_422;
case GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED:
NOTREACHED();
break;
@@ -202,6 +205,7 @@ unsigned ImageInternalFormat(GpuVideoAcceleratorFactories::OutputFormat format,
DCHECK_LE(plane, 1u);
return GL_RGB_YCBCR_420V_CHROMIUM;
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
DCHECK_EQ(0u, plane);
return GL_RGB_YCBCR_422_CHROMIUM;
case GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED:
@@ -216,6 +220,7 @@ size_t PlanesPerCopy(GpuVideoAcceleratorFactories::OutputFormat format) {
switch (format) {
case GpuVideoAcceleratorFactories::OutputFormat::I420:
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
return 1;
case GpuVideoAcceleratorFactories::OutputFormat::NV12_DUAL_GMB:
case GpuVideoAcceleratorFactories::OutputFormat::NV12_SINGLE_GMB:
@@ -237,6 +242,8 @@ VideoPixelFormat VideoFormat(
return PIXEL_FORMAT_NV12;
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
return PIXEL_FORMAT_UYVY;
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
+ return PIXEL_FORMAT_YUY2;
case GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED:
NOTREACHED();
break;
@@ -353,6 +360,34 @@ void CopyRowsToUYVYBuffer(int first_row,
done.Run();
}
+void CopyRowsToYUYVBuffer(int first_row,
+ int rows,
+ int width,
+ const scoped_refptr<VideoFrame>& source_frame,
+ uint8_t* output,
+ int dest_stride,
+ const base::Closure& done) {
+ TRACE_EVENT2("media", "CopyRowsToYUYVBuffer", "bytes_per_row", width * 2,
+ "rows", rows);
+ if (output) {
+ DCHECK_NE(dest_stride, 0);
+ DCHECK_LE(width, std::abs(dest_stride / 2));
+ DCHECK_EQ(0, first_row % 2);
+ libyuv::I420ToYUY2(
+ source_frame->visible_data(VideoFrame::kYPlane) +
+ first_row * source_frame->stride(VideoFrame::kYPlane),
+ source_frame->stride(VideoFrame::kYPlane),
+ source_frame->visible_data(VideoFrame::kUPlane) +
+ first_row / 2 * source_frame->stride(VideoFrame::kUPlane),
+ source_frame->stride(VideoFrame::kUPlane),
+ source_frame->visible_data(VideoFrame::kVPlane) +
+ first_row / 2 * source_frame->stride(VideoFrame::kVPlane),
+ source_frame->stride(VideoFrame::kVPlane),
+ output + first_row * dest_stride, dest_stride, width, rows);
+ }
+ done.Run();
+}
+
gfx::Size CodedSize(const scoped_refptr<VideoFrame>& video_frame,
GpuVideoAcceleratorFactories::OutputFormat output_format) {
DCHECK(gfx::Rect(video_frame->coded_size())
@@ -367,7 +402,9 @@ gfx::Size CodedSize(const scoped_refptr<VideoFrame>& video_frame,
output = gfx::Size((video_frame->visible_rect().width() + 1) & ~1,
(video_frame->visible_rect().height() + 1) & ~1);
break;
+
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
output = gfx::Size((video_frame->visible_rect().width() + 1) & ~1,
video_frame->visible_rect().height());
break;
@@ -591,6 +628,14 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CopyVideoFrameToGpuMemoryBuffers(
static_cast<uint8_t*>(buffer->memory(0)),
buffer->stride(0), barrier));
break;
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
+ worker_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&CopyRowsToYUYVBuffer, row, rows_to_copy,
+ coded_size.width(), video_frame,
+ static_cast<uint8_t*>(buffer->memory(0)),
+ buffer->stride(0), barrier));
+ break;
+
case GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED:
NOTREACHED();
}
@@ -679,6 +724,10 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::
case GpuVideoAcceleratorFactories::OutputFormat::UYVY:
allow_overlay = true;
break;
+ case GpuVideoAcceleratorFactories::OutputFormat::YUYV:
+ // IA ChromeOS doesn't support overlay for YUYV GPU_READ_CPU_READ_WRITE
+ // plane.
+ break;
default:
break;
}
« no previous file with comments | « media/renderers/mock_gpu_video_accelerator_factories.cc ('k') | media/video/gpu_memory_buffer_video_frame_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698