V4L2_ENC_CMD_STOP and V4L2_ENC_CMD_START are already supported. Add a way to query for support. --- drivers/media/platform/qcom/venus/venc.c | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c index 2ddfeddf98514..e05db3c4bfb24 100644 --- a/drivers/media/platform/qcom/venus/venc.c +++ b/drivers/media/platform/qcom/venus/venc.c @@ -507,6 +507,27 @@ static int venc_enum_frameintervals(struct file *file, void *fh, return 0; } +static int +venc_try_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) +{ + struct venus_inst *inst = to_inst(file); + struct device *dev = inst->core->dev_dec; + + switch (cmd->cmd) { + case V4L2_ENC_CMD_STOP: + case V4L2_ENC_CMD_START: + if (cmd->flags != 0) { + dev_dbg(dev, "flags=%u are not supported", cmd->flags); + return -EINVAL; + } + break; + default: + return -EINVAL; + } + + return 0; +} + static int venc_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) { @@ -514,6 +535,10 @@ venc_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) struct hfi_frame_data fdata = {0}; int ret = 0; + ret = venc_try_encoder_cmd(file, fh, cmd); + if (ret < 0) + return ret; + ret = v4l2_m2m_ioctl_try_encoder_cmd(file, fh, cmd); if (ret) return ret; @@ -575,6 +600,7 @@ static const struct v4l2_ioctl_ops venc_ioctl_ops = { .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, .vidioc_unsubscribe_event = v4l2_event_unsubscribe, .vidioc_encoder_cmd = venc_encoder_cmd, + .vidioc_try_encoder_cmd = venc_try_encoder_cmd, }; static int venc_set_properties(struct venus_inst *inst) -- 2.29.2.454.gaff20da3a2-goog