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

Unified Diff: content/common/gpu/media/v4l2_video_decode_accelerator.cc

Issue 1822983002: Support external buffer import in VDA interface and add a V4L2SVDA impl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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: content/common/gpu/media/v4l2_video_decode_accelerator.cc
diff --git a/content/common/gpu/media/v4l2_video_decode_accelerator.cc b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
index 51104159ecc5e8059c98e9ef70c1508d4c8c0f7e..fe0343faff95517ec75e8c70a92099798eda939c 100644
--- a/content/common/gpu/media/v4l2_video_decode_accelerator.cc
+++ b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
@@ -205,8 +205,10 @@ bool V4L2VideoDecodeAccelerator::Initialize(const Config& config,
DCHECK(child_task_runner_->BelongsToCurrentThread());
DCHECK_EQ(decoder_state_, kUninitialized);
- if (get_gl_context_cb_.is_null() || make_context_current_cb_.is_null()) {
- NOTREACHED() << "GL callbacks are required for this VDA";
+ if (!device_->SupportsDecodeProfileForV4L2PixelFormats(
+ config.profile, arraysize(supported_input_fourccs_),
+ supported_input_fourccs_)) {
+ DVLOG(1) << "Initialize(): unsupported profile=" << config.profile;
return false;
}
@@ -215,10 +217,13 @@ bool V4L2VideoDecodeAccelerator::Initialize(const Config& config,
return false;
}
- if (!device_->SupportsDecodeProfileForV4L2PixelFormats(
- config.profile, arraysize(supported_input_fourccs_),
- supported_input_fourccs_)) {
- DVLOG(1) << "Initialize(): unsupported profile=" << config.profile;
+ if (config.output_mode != Config::OutputMode::ALLOCATE) {
+ NOTREACHED() << "Only ALLOCATE OutputMode is supported by this VDA";
+ return false;
+ }
+
+ if (get_gl_context_cb_.is_null() || make_context_current_cb_.is_null()) {
+ NOTREACHED() << "GL callbacks are required for this VDA";
return false;
}
@@ -375,9 +380,21 @@ void V4L2VideoDecodeAccelerator::AssignPictureBuffers(
DCHECK_EQ(output_record.cleared, false);
DCHECK_LE(1u, buffers[i].texture_ids().size());
- EGLImageKHR egl_image = device_->CreateEGLImage(
- egl_display_, gl_context->GetHandle(), buffers[i].texture_ids()[0],
- coded_size_, i, output_format_fourcc_, output_planes_count_);
+ std::vector<base::ScopedFD> dmabuf_fds;
+ dmabuf_fds = device_->GetDmabufsForV4L2Buffer(
+ i, output_planes_count_, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+ if (dmabuf_fds.empty()) {
+ NOTIFY_ERROR(PLATFORM_FAILURE);
+ return;
+ }
+
+ EGLImageKHR egl_image = device_->CreateEGLImage(egl_display_,
+ gl_context->GetHandle(),
+ buffers[i].texture_ids()[0],
+ coded_size_,
+ i,
+ output_format_fourcc_,
+ dmabuf_fds);
if (egl_image == EGL_NO_IMAGE_KHR) {
LOG(ERROR) << "AssignPictureBuffers(): could not create EGLImageKHR";
// Ownership of EGLImages allocated in previous iterations of this loop
@@ -471,6 +488,10 @@ bool V4L2VideoDecodeAccelerator::TryToSetupDecodeOnSeparateThread(
return true;
}
+media::VideoPixelFormat V4L2VideoDecodeAccelerator::GetOutputFormat() const {
+ return V4L2Device::V4L2PixFmtToVideoPixelFormat(output_format_fourcc_);
+}
+
// static
media::VideoDecodeAccelerator::SupportedProfiles
V4L2VideoDecodeAccelerator::GetSupportedProfiles() {
« no previous file with comments | « content/common/gpu/media/v4l2_video_decode_accelerator.h ('k') | content/common/gpu/media/vaapi_video_decode_accelerator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698