summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartłomiej Grzesik <bag@semihalf.com>2022-01-17 10:56:42 +0000
committerRichard Fung <richardfung@google.com>2023-10-12 00:00:57 +0000
commit8539d39d02b1f6647d58803fc85f8d27a9c449b0 (patch)
tree18e536764a2a948a70186f8e7f9e27798897dcc4
parente74ad8784852acbc96a126b35797ea5640dcf256 (diff)
downloadvirtual-device-8539d39d02b1f6647d58803fc85f8d27a9c449b0.tar.gz
CHROMIUM: drivers: virtio: media: don't send send h264 controls when other codec is in use
Currently values from VIDIOC_S_CTRLS are passed blindly to hypervisor, no matter what codec is in use. This will always fail or cause undefined behaviour. This patch makes VIDIOC_S_CTRLS implementation for encoder return EINVAL if trying to set H264 specific controls while different format is used. Signed-off-by: Bartłomiej Grzesik <bag@semihalf.com> BUG=b:161774071 TEST=tast run eve arc.Video* Change-Id: Idc267e99a5834164c501572142258297fd433028 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3395052 Tested-by: Bartłomiej Grzesik <bag@semihalf.com> Reviewed-by: Alexandre Courbot <acourbot@chromium.org> Commit-Queue: Marcin Wojtas <mwojtas@google.com>
-rw-r--r--drivers/media/virtio/virtio_video_enc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/media/virtio/virtio_video_enc.c b/drivers/media/virtio/virtio_video_enc.c
index f272af3..5f03103 100644
--- a/drivers/media/virtio/virtio_video_enc.c
+++ b/drivers/media/virtio/virtio_video_enc.c
@@ -128,11 +128,15 @@ static int virtio_video_enc_s_ctrl(struct v4l2_ctrl *ctrl)
control, value);
break;
case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
+ if (stream->out_info.fourcc_format != V4L2_PIX_FMT_H264)
+ return -EINVAL;
value = virtio_video_v4l2_level_to_virtio(ctrl->val);
ret = virtio_video_cmd_set_control(vv, stream->stream_id,
control, value);
break;
case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
+ if (stream->out_info.fourcc_format != V4L2_PIX_FMT_H264)
+ return -EINVAL;
value = virtio_video_v4l2_profile_to_virtio(ctrl->val);
ret = virtio_video_cmd_set_control(vv, stream->stream_id,
control, value);