diff options
author | Bartłomiej Grzesik <bag@semihalf.com> | 2022-01-17 10:56:42 +0000 |
---|---|---|
committer | Richard Fung <richardfung@google.com> | 2023-10-12 00:00:57 +0000 |
commit | 8539d39d02b1f6647d58803fc85f8d27a9c449b0 (patch) | |
tree | 18e536764a2a948a70186f8e7f9e27798897dcc4 | |
parent | e74ad8784852acbc96a126b35797ea5640dcf256 (diff) | |
download | virtual-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.c | 4 |
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); |