From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Yunke Cao <yunkec@google.com>
Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>,
Nicolas Dufresne <nicolas@ndufresne.ca>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Tomasz Figa <tfiga@chromium.org>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Ricardo Ribalda <ribalda@chromium.org>,
linux-media@vger.kernel.org
Subject: Re: [PATCH v7 6/7] media: uvcvideo: support V4L2_CTRL_WHICH_MIN/MAX_VAL
Date: Wed, 24 Aug 2022 23:03:53 +0300 [thread overview]
Message-ID: <YwaEKeJCjzio11MG@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20220628075705.2278044-7-yunkec@google.com>
Hi Yunke,
Thank you for the patch.
On Tue, Jun 28, 2022 at 04:57:04PM +0900, Yunke Cao wrote:
> Add support for V4L2_CTRL_WHICH_MIN/MAX_VAL in uvc driver.
> It is useful for the V4L2_CID_UVC_REGION_OF_INTEREST_RECT control.
>
> Signed-off-by: Yunke Cao <yunkec@google.com>
> ---
> drivers/media/usb/uvc/uvc_ctrl.c | 73 ++++++++++++++++++++++++++------
> drivers/media/usb/uvc/uvc_v4l2.c | 11 +++--
> drivers/media/usb/uvc/uvcvideo.h | 3 +-
> 3 files changed, 70 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 00482269233a..b569d6824ac1 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1923,7 +1923,7 @@ int uvc_ctrl_get(struct uvc_video_chain *chain,
> }
>
> int __uvc_ctrl_get_fixed_std(struct uvc_video_chain *chain,
> - struct v4l2_ext_control *xctrl)
> + struct v4l2_ext_control *xctrl, u32 v4l2_which)
> {
> struct v4l2_queryctrl qc = { .id = xctrl->id };
> int ret = uvc_query_v4l2_ctrl(chain, &qc);
> @@ -1931,16 +1931,69 @@ int __uvc_ctrl_get_fixed_std(struct uvc_video_chain *chain,
> if (ret < 0)
> return ret;
>
> - xctrl->value = qc.default_value;
> + switch (v4l2_which) {
> + case V4L2_CTRL_WHICH_DEF_VAL:
> + xctrl->value = qc.default_value;
> + break;
> + case V4L2_CTRL_WHICH_MIN_VAL:
> + xctrl->value = qc.minimum;
> + break;
> + case V4L2_CTRL_WHICH_MAX_VAL:
> + xctrl->value = qc.maximum;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> return 0;
> }
>
> +static int __uvc_ctrl_get_fixed_compound(struct uvc_video_chain *chain,
> + struct uvc_control_mapping *mapping,
> + struct uvc_control *ctrl,
> + u32 v4l2_which,
> + struct v4l2_ext_control *xctrl)
> +{
> + int ret;
> + u32 flag, id;
> +
> + if (mapping->v4l2_type < V4L2_CTRL_COMPOUND_TYPES)
> + return -EINVAL;
> +
This can't happen.
> + switch (v4l2_which) {
> + case V4L2_CTRL_WHICH_DEF_VAL:
> + flag = UVC_CTRL_FLAG_GET_DEF;
> + id = UVC_CTRL_DATA_DEF;
> + break;
> + case V4L2_CTRL_WHICH_MIN_VAL:
> + flag = UVC_CTRL_FLAG_GET_MIN;
> + id = UVC_CTRL_DATA_MIN;
> + break;
> + case V4L2_CTRL_WHICH_MAX_VAL:
> + flag = UVC_CTRL_FLAG_GET_MAX;
> + id = UVC_CTRL_DATA_MAX;
> + break;
> + default:
> + return -EINVAL;
Can this happen ?
> + }
> +
> + if (!(ctrl->info.flags & flag) && flag != UVC_CTRL_FLAG_GET_DEF)
> + return -EACCES;
> +
> + if (!ctrl->cached) {
> + ret = uvc_ctrl_populate_cache(chain, ctrl);
> + if (ret < 0)
> + return ret;
> + }
> +
> + return __uvc_ctrl_get_compound_to_user(mapping, ctrl, id, xctrl);
> +}
> +
> int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
> - struct v4l2_ext_control *xctrl)
> + struct v4l2_ext_control *xctrl, u32 v4l2_which)
> {
> struct uvc_control *ctrl;
> struct uvc_control_mapping *mapping;
> - int ret;
>
> if (__uvc_query_v4l2_class(chain, xctrl->id, 0) >= 0)
> return -EACCES;
> @@ -1950,16 +2003,10 @@ int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
> return -EINVAL;
>
> if (mapping->v4l2_type < V4L2_CTRL_COMPOUND_TYPES)
> - return __uvc_ctrl_get_fixed_std(chain, xctrl);
> + return __uvc_ctrl_get_fixed_std(chain, xctrl, v4l2_which);
>
> - if (!ctrl->cached) {
> - ret = uvc_ctrl_populate_cache(chain, ctrl);
> - if (ret < 0)
> - return ret;
> - }
> -
> - return __uvc_ctrl_get_compound_to_user(mapping, ctrl, UVC_CTRL_DATA_DEF,
> - xctrl);
> + return __uvc_ctrl_get_fixed_compound(chain, mapping, ctrl, v4l2_which,
> + xctrl);
> }
>
> int __uvc_ctrl_set_compound(struct uvc_control_mapping *mapping,
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index aad61af36271..004e3b764737 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -1043,16 +1043,21 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
> if (ret < 0)
> return ret;
>
> - if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
> + switch (ctrls->which) {
> + case V4L2_CTRL_WHICH_DEF_VAL:
> + case V4L2_CTRL_WHICH_MIN_VAL:
> + case V4L2_CTRL_WHICH_MAX_VAL:
> for (i = 0; i < ctrls->count; ++ctrl, ++i) {
> - ret = uvc_ctrl_get_fixed(chain, ctrl);
> + ret = uvc_ctrl_get_fixed(chain, ctrl, ctrls->which);
> if (ret < 0) {
> ctrls->error_idx = i;
> return ret;
> }
> }
> -
> return 0;
> +
> + default:
case V4L2_CTRL_WHICH_CUR_VAL:
> + break;
and
default:
return -EINVAL;
(please double-check that the error value is the right one). This should
be mentioned in the commit message.
> }
>
> ret = uvc_ctrl_begin(chain);
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index 9ff95bbad251..54cc47bc2d33 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -913,7 +913,8 @@ static inline int uvc_ctrl_rollback(struct uvc_fh *handle)
>
> int uvc_ctrl_get(struct uvc_video_chain *chain, struct v4l2_ext_control *xctrl);
> int uvc_ctrl_get_fixed(struct uvc_video_chain *chain,
> - struct v4l2_ext_control *xctrl);
> + struct v4l2_ext_control *xctrl,
> + u32 v4l2_which);
> int uvc_ctrl_set(struct uvc_fh *handle, struct v4l2_ext_control *xctrl);
> int uvc_ctrl_is_accessible(struct uvc_video_chain *chain, u32 v4l2_id,
> bool read);
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2022-08-24 20:04 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-28 7:56 [PATCH v7 0/7] media: Implement UVC v1.5 ROI Yunke Cao
2022-06-28 7:56 ` [PATCH v7 1/7] media: v4l2_ctrl: Add V4L2_CTRL_TYPE_RECT Yunke Cao
2022-08-24 8:40 ` Laurent Pinchart
2022-08-24 8:50 ` Hans Verkuil
2022-08-24 8:51 ` Hans Verkuil
2022-08-25 6:15 ` Yunke Cao
2022-06-28 7:57 ` [PATCH v7 2/7] media: uvcvideo: add uvc_ctrl_get_fixed for getting default value Yunke Cao
2022-08-24 16:24 ` Laurent Pinchart
2022-06-28 7:57 ` [PATCH v7 3/7] media: uvcvideo: Add support for compound controls Yunke Cao
2022-06-30 6:42 ` Ricardo Ribalda
2022-08-24 19:56 ` Laurent Pinchart
2022-08-29 5:39 ` Yunke Cao
2022-06-28 7:57 ` [PATCH v7 4/7] media: uvcvideo: implement UVC v1.5 ROI Yunke Cao
2022-06-30 6:42 ` Ricardo Ribalda
2022-08-24 20:36 ` Laurent Pinchart
2022-08-29 5:48 ` Yunke Cao
2022-09-28 8:13 ` Ricardo Ribalda
2022-06-28 7:57 ` [PATCH v7 5/7] v4l2-ctrls: add support for V4L2_CTRL_WHICH_MIN/MAX_VAL Yunke Cao
2022-08-24 16:20 ` Laurent Pinchart
2022-09-20 10:01 ` Yunke Cao
2022-09-30 7:59 ` Hans Verkuil
2022-06-28 7:57 ` [PATCH v7 6/7] media: uvcvideo: support V4L2_CTRL_WHICH_MIN/MAX_VAL Yunke Cao
2022-06-30 6:41 ` Ricardo Ribalda
2022-08-24 20:03 ` Laurent Pinchart [this message]
2022-09-20 7:52 ` Yunke Cao
2022-06-28 7:57 ` [PATCH v7 7/7] media: uvcvideo: document UVC v1.5 ROI Yunke Cao
2022-06-30 6:41 ` Ricardo Ribalda
2022-08-24 20:17 ` Laurent Pinchart
2022-09-20 7:46 ` Yunke Cao
2022-07-14 23:25 ` [PATCH v7 0/7] media: Implement " Yunke Cao
2022-07-15 0:52 ` Laurent Pinchart
2022-09-27 4:32 ` Yunke Cao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YwaEKeJCjzio11MG@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=nicolas@ndufresne.ca \
--cc=ribalda@chromium.org \
--cc=senozhatsky@chromium.org \
--cc=tfiga@chromium.org \
--cc=yunkec@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.