Commit 01452feb authored by Alexandre Courbot's avatar Alexandre Courbot Committed by Commit Bot

media/gpu/v4l2svda: query output planes count during format setup

So far we were forcibly setting the number of output planes to 1, but
the Kukui decoder uses a multiplanar format.

The V4L2 driver will update the number of planes if it is incorrect, so
use this information when attempting to set the format to get the
correct number of planes. This is what the v4l2vda already does.

Bug: b:132589320
Test: vdaunittest and vdatests pass on Minnie.

Change-Id: Idb4170875adf1df2fdbd1cbe65c233937aed0702
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1730732
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: default avatarChih-Yu Huang <akahuang@chromium.org>
Reviewed-by: default avatarHirokazu Honda <hiroh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683465}
parent 334ad5dc
...@@ -239,9 +239,7 @@ bool V4L2SliceVideoDecodeAccelerator::Initialize(const Config& config, ...@@ -239,9 +239,7 @@ bool V4L2SliceVideoDecodeAccelerator::Initialize(const Config& config,
video_profile_ = config.profile; video_profile_ = config.profile;
// TODO(posciak): This needs to be queried once supported.
input_planes_count_ = 1; input_planes_count_ = 1;
output_planes_count_ = 1;
input_format_fourcc_ = input_format_fourcc_ =
V4L2Device::VideoCodecProfileToV4L2PixFmt(video_profile_, true); V4L2Device::VideoCodecProfileToV4L2PixFmt(video_profile_, true);
...@@ -466,10 +464,13 @@ bool V4L2SliceVideoDecodeAccelerator::SetupFormats() { ...@@ -466,10 +464,13 @@ bool V4L2SliceVideoDecodeAccelerator::SetupFormats() {
memset(&format, 0, sizeof(format)); memset(&format, 0, sizeof(format));
format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
format.fmt.pix_mp.pixelformat = output_format_fourcc_; format.fmt.pix_mp.pixelformat = output_format_fourcc_;
format.fmt.pix_mp.num_planes = output_planes_count_; format.fmt.pix_mp.num_planes = V4L2Device::GetNumPlanesOfV4L2PixFmt(output_format_fourcc_);
IOCTL_OR_ERROR_RETURN_FALSE(VIDIOC_S_FMT, &format); IOCTL_OR_ERROR_RETURN_FALSE(VIDIOC_S_FMT, &format);
DCHECK_EQ(format.fmt.pix_mp.pixelformat, output_format_fourcc_); DCHECK_EQ(format.fmt.pix_mp.pixelformat, output_format_fourcc_);
DCHECK_EQ(V4L2Device::GetNumPlanesOfV4L2PixFmt(output_format_fourcc_), static_cast<size_t>(format.fmt.pix_mp.num_planes));
output_planes_count_ = format.fmt.pix_mp.num_planes;
return true; return true;
} }
......
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