]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: verisilicon: Hook the (TRY_)DECODER_CMD stateless ioctls
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>
Thu, 9 Nov 2023 20:16:39 +0000 (21:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:44:58 +0000 (15:44 -0800)
[ Upstream commit 6c0d9e12b1d12bbd95484e4b99f63feeb423765f ]

The (TRY_)DECODER_CMD ioctls are used to support flushing when holding
capture buffers is supported. This is the case of this driver but the
ioctls were never hooked to the ioctl ops.

Add them to correctly support flushing.

Fixes: 340ce50f75a6 ("media: hantro: Enable HOLD_CAPTURE_BUF for H.264")
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/verisilicon/hantro_drv.c
drivers/media/platform/verisilicon/hantro_v4l2.c

index a9fa05ac56a9b60367c778ffdb097e8a2a48e6af..3a2a0f28cbfe0fb7475498d6c906408349ffb7be 100644 (file)
@@ -905,6 +905,8 @@ static int hantro_add_func(struct hantro_dev *vpu, unsigned int funcid)
 
        if (funcid == MEDIA_ENT_F_PROC_VIDEO_ENCODER) {
                vpu->encoder = func;
+               v4l2_disable_ioctl(vfd, VIDIOC_TRY_DECODER_CMD);
+               v4l2_disable_ioctl(vfd, VIDIOC_DECODER_CMD);
        } else {
                vpu->decoder = func;
                v4l2_disable_ioctl(vfd, VIDIOC_TRY_ENCODER_CMD);
index b3ae037a50f61266f6350cecba62a1b2c96b0c10..db145519fc5d38028800133a240ba91d7312ac30 100644 (file)
@@ -785,6 +785,9 @@ const struct v4l2_ioctl_ops hantro_ioctl_ops = {
        .vidioc_g_selection = vidioc_g_selection,
        .vidioc_s_selection = vidioc_s_selection,
 
+       .vidioc_decoder_cmd = v4l2_m2m_ioctl_stateless_decoder_cmd,
+       .vidioc_try_decoder_cmd = v4l2_m2m_ioctl_stateless_try_decoder_cmd,
+
        .vidioc_try_encoder_cmd = v4l2_m2m_ioctl_try_encoder_cmd,
        .vidioc_encoder_cmd = vidioc_encoder_cmd,
 };