Commit 5db11c27 authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu/VEA unittest: Use GpuMemoryBuffer based VideoFrame in native_input mode

VEA unittest deal with a native graphics buffer by DMABUF based VideoFrame in
native_input mode. This CL changes VEA unittest to use GpuMemoryBuffer based
VideoFrame.

Bug: 1001413
Test: video_encode_accelerator_unittest on kevin and eve
Change-Id: I18c4d1ff40bf9764fc0923739af55d55f4ac83e7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1808939
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarAlexandre Courbot <acourbot@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697574}
parent 6e4ee5d6
...@@ -19,6 +19,7 @@ source_set("helpers") { ...@@ -19,6 +19,7 @@ source_set("helpers") {
"//base:base", "//base:base",
"//base/test:test_config", "//base/test:test_config",
"//base/test:test_support", "//base/test:test_support",
"//gpu/ipc/common",
"//media:test_support", "//media:test_support",
"//media/gpu", "//media/gpu",
"//mojo/core/embedder:embedder", "//mojo/core/embedder:embedder",
......
...@@ -7,11 +7,15 @@ ...@@ -7,11 +7,15 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "base/bind_helpers.h"
#include "base/memory/scoped_refptr.h" #include "base/memory/scoped_refptr.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "media/base/format_utils.h"
#include "media/base/video_frame.h" #include "media/base/video_frame.h"
#include "media/gpu/buildflags.h" #include "media/gpu/buildflags.h"
#include "media/gpu/test/image.h" #include "media/gpu/test/image.h"
#include "third_party/libyuv/include/libyuv.h" #include "third_party/libyuv/include/libyuv.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/gpu_memory_buffer.h" #include "ui/gfx/gpu_memory_buffer.h"
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
...@@ -209,6 +213,7 @@ scoped_refptr<VideoFrame> CloneVideoFrame( ...@@ -209,6 +213,7 @@ scoped_refptr<VideoFrame> CloneVideoFrame(
scoped_refptr<VideoFrame> dst_frame; scoped_refptr<VideoFrame> dst_frame;
switch (dst_storage_type) { switch (dst_storage_type) {
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
case VideoFrame::STORAGE_GPU_MEMORY_BUFFER:
case VideoFrame::STORAGE_DMABUFS: case VideoFrame::STORAGE_DMABUFS:
dst_frame = CreatePlatformVideoFrame( dst_frame = CreatePlatformVideoFrame(
dst_layout.format(), dst_layout.coded_size(), dst_layout.format(), dst_layout.coded_size(),
...@@ -237,6 +242,43 @@ scoped_refptr<VideoFrame> CloneVideoFrame( ...@@ -237,6 +242,43 @@ scoped_refptr<VideoFrame> CloneVideoFrame(
LOG(ERROR) << "Failed to copy VideoFrame"; LOG(ERROR) << "Failed to copy VideoFrame";
return nullptr; return nullptr;
} }
if (dst_storage_type == VideoFrame::STORAGE_GPU_MEMORY_BUFFER) {
// Here, the content in |src_frame| is already copied to |dst_frame|, which
// is a DMABUF based VideoFrame.
// Create GpuMemoryBufferHandle from |dst_frame|.
gfx::GpuMemoryBufferHandle gmb_handle;
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
gmb_handle = CreateGpuMemoryBufferHandle(dst_frame.get());
#endif
if (gmb_handle.is_null() || gmb_handle.type != gfx::NATIVE_PIXMAP) {
LOG(ERROR) << "Failed to create native GpuMemoryBufferHandle";
return nullptr;
}
base::Optional<gfx::BufferFormat> buffer_format =
VideoPixelFormatToGfxBufferFormat(dst_layout.format());
if (!buffer_format) {
LOG(ERROR) << "Unexpected format: "
<< BufferFormatToString(*buffer_format);
return nullptr;
}
// Create GpuMemoryBuffer from GpuMemoryBufferHandle.
gpu::GpuMemoryBufferSupport support;
std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer =
support.CreateGpuMemoryBufferImplFromHandle(
std::move(gmb_handle), dst_layout.coded_size(), *buffer_format,
gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
base::DoNothing());
gpu::MailboxHolder dummy_mailbox[media::VideoFrame::kMaxPlanes];
dst_frame = media::VideoFrame::WrapExternalGpuMemoryBuffer(
src_frame->visible_rect(), src_frame->visible_rect().size(),
std::move(gpu_memory_buffer), dummy_mailbox /* mailbox_holders */,
base::DoNothing() /* mailbox_holder_release_cb_ */,
src_frame->timestamp());
}
return dst_frame; return dst_frame;
} }
......
...@@ -2146,8 +2146,9 @@ scoped_refptr<VideoFrame> VEAClient::CreateFrame(off_t position) { ...@@ -2146,8 +2146,9 @@ scoped_refptr<VideoFrame> VEAClient::CreateFrame(off_t position) {
current_framerate_)); current_framerate_));
if (video_frame && g_native_input) { if (video_frame && g_native_input) {
#if defined(OS_LINUX) #if defined(OS_LINUX)
video_frame = test::CloneVideoFrame( video_frame =
video_frame.get(), video_frame->layout(), VideoFrame::STORAGE_DMABUFS); test::CloneVideoFrame(video_frame.get(), video_frame->layout(),
VideoFrame::STORAGE_GPU_MEMORY_BUFFER);
#else #else
video_frame = nullptr; video_frame = nullptr;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment