From: Hans de Goede <hdegoede@redhat.com>
To: Ricardo Ribalda <ribalda@chromium.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Ricardo Ribalda <ribalda@kernel.org>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Hans Verkuil <hverkuil@xs4all.nl>
Cc: Yunke Cao <yunkec@chromium.org>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v15 15/19] media: uvcvideo: let v4l2_query_v4l2_ctrl() work with v4l2_query_ext_ctrl
Date: Mon, 9 Dec 2024 15:08:53 +0100 [thread overview]
Message-ID: <d99f507b-1890-4ad3-aabc-494a3b0a0dd8@redhat.com> (raw)
In-Reply-To: <20241114-uvc-roi-v15-15-64cfeb56b6f8@chromium.org>
Hi,
On 14-Nov-24 8:10 PM, Ricardo Ribalda wrote:
> v4l2_query_ext_ctrl contains information that is missing in
> v4l2_queryctrl, like elem_size and elems.
>
> With this change we can handle all the element_size information inside
> uvc_ctrl.c.
>
> Now that we are at it, remove the memset of the reserved fields, the
> v4l2 ioctl handler should do that for us.
>
> There is no functional change expected from this change.
>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Doesn't the v4l2-core ioctl wrapping offers queryctrl emulation
using query_ext_ctrl ? If not maybe that should be added there?
(this can be done later)
Othwerise looks good to me:
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Regards,
Hans
> ---
> drivers/media/usb/uvc/uvc_ctrl.c | 24 ++++++++++++++----------
> drivers/media/usb/uvc/uvc_v4l2.c | 35 +++++++++++++++--------------------
> drivers/media/usb/uvc/uvcvideo.h | 2 +-
> 3 files changed, 30 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 72ed7dc9cfc1..1bc019138995 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1252,7 +1252,8 @@ static int __uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
> }
>
> static int uvc_query_v4l2_class(struct uvc_video_chain *chain, u32 req_id,
> - u32 found_id, struct v4l2_queryctrl *v4l2_ctrl)
> + u32 found_id,
> + struct v4l2_query_ext_ctrl *v4l2_ctrl)
> {
> int idx;
>
> @@ -1400,7 +1401,7 @@ static u32 uvc_get_ctrl_bitmap(struct uvc_control *ctrl,
> static int __uvc_queryctrl_boundaries(struct uvc_video_chain *chain,
> struct uvc_control *ctrl,
> struct uvc_control_mapping *mapping,
> - struct v4l2_queryctrl *v4l2_ctrl)
> + struct v4l2_query_ext_ctrl *v4l2_ctrl)
> {
> if (!ctrl->cached) {
> int ret = uvc_ctrl_populate_cache(chain, ctrl);
> @@ -1465,7 +1466,7 @@ static int __uvc_queryctrl_boundaries(struct uvc_video_chain *chain,
> static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
> struct uvc_control *ctrl,
> struct uvc_control_mapping *mapping,
> - struct v4l2_queryctrl *v4l2_ctrl)
> + struct v4l2_query_ext_ctrl *v4l2_ctrl)
> {
> struct uvc_control_mapping *master_map = NULL;
> struct uvc_control *master_ctrl = NULL;
> @@ -1503,6 +1504,9 @@ static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
> v4l2_ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
> }
>
> + v4l2_ctrl->elem_size = sizeof(s32);
> + v4l2_ctrl->elems = 1;
> +
> if (v4l2_ctrl->type >= V4L2_CTRL_COMPOUND_TYPES) {
> v4l2_ctrl->flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
> v4l2_ctrl->default_value = 0;
> @@ -1516,7 +1520,7 @@ static int __uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
> }
>
> int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
> - struct v4l2_queryctrl *v4l2_ctrl)
> + struct v4l2_query_ext_ctrl *v4l2_ctrl)
> {
> struct uvc_control *ctrl;
> struct uvc_control_mapping *mapping;
> @@ -1642,7 +1646,7 @@ static void uvc_ctrl_fill_event(struct uvc_video_chain *chain,
> struct uvc_control_mapping *mapping,
> s32 value, u32 changes)
> {
> - struct v4l2_queryctrl v4l2_ctrl;
> + struct v4l2_query_ext_ctrl v4l2_ctrl;
>
> __uvc_query_v4l2_ctrl(chain, ctrl, mapping, &v4l2_ctrl);
>
> @@ -2119,7 +2123,7 @@ static int uvc_mapping_get_xctrl_std(struct uvc_video_chain *chain,
> struct uvc_control_mapping *mapping,
> u32 which, struct v4l2_ext_control *xctrl)
> {
> - struct v4l2_queryctrl qc;
> + struct v4l2_query_ext_ctrl qec;
> int ret;
>
> switch (which) {
> @@ -2133,19 +2137,19 @@ static int uvc_mapping_get_xctrl_std(struct uvc_video_chain *chain,
> return -EINVAL;
> }
>
> - ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qc);
> + ret = __uvc_queryctrl_boundaries(chain, ctrl, mapping, &qec);
> if (ret < 0)
> return ret;
>
> switch (which) {
> case V4L2_CTRL_WHICH_DEF_VAL:
> - xctrl->value = qc.default_value;
> + xctrl->value = qec.default_value;
> break;
> case V4L2_CTRL_WHICH_MIN_VAL:
> - xctrl->value = qc.minimum;
> + xctrl->value = qec.minimum;
> break;
> case V4L2_CTRL_WHICH_MAX_VAL:
> - xctrl->value = qc.maximum;
> + xctrl->value = qec.maximum;
> break;
> }
>
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index 7e284770149d..5000c74271e0 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -1014,40 +1014,35 @@ static int uvc_ioctl_s_input(struct file *file, void *fh, unsigned int input)
> return ret;
> }
>
> -static int uvc_ioctl_queryctrl(struct file *file, void *fh,
> - struct v4l2_queryctrl *qc)
> +static int uvc_ioctl_query_ext_ctrl(struct file *file, void *fh,
> + struct v4l2_query_ext_ctrl *qec)
> {
> struct uvc_fh *handle = fh;
> struct uvc_video_chain *chain = handle->chain;
>
> - return uvc_query_v4l2_ctrl(chain, qc);
> + return uvc_query_v4l2_ctrl(chain, qec);
> }
>
> -static int uvc_ioctl_query_ext_ctrl(struct file *file, void *fh,
> - struct v4l2_query_ext_ctrl *qec)
> +static int uvc_ioctl_queryctrl(struct file *file, void *fh,
> + struct v4l2_queryctrl *qc)
> {
> struct uvc_fh *handle = fh;
> struct uvc_video_chain *chain = handle->chain;
> - struct v4l2_queryctrl qc = { qec->id };
> + struct v4l2_query_ext_ctrl qec = { qc->id };
> int ret;
>
> - ret = uvc_query_v4l2_ctrl(chain, &qc);
> + ret = uvc_query_v4l2_ctrl(chain, &qec);
> if (ret)
> return ret;
>
> - qec->id = qc.id;
> - qec->type = qc.type;
> - strscpy(qec->name, qc.name, sizeof(qec->name));
> - qec->minimum = qc.minimum;
> - qec->maximum = qc.maximum;
> - qec->step = qc.step;
> - qec->default_value = qc.default_value;
> - qec->flags = qc.flags;
> - qec->elem_size = 4;
> - qec->elems = 1;
> - qec->nr_of_dims = 0;
> - memset(qec->dims, 0, sizeof(qec->dims));
> - memset(qec->reserved, 0, sizeof(qec->reserved));
> + qc->id = qec.id;
> + qc->type = qec.type;
> + strscpy(qc->name, qec.name, sizeof(qc->name));
> + qc->minimum = qec.minimum;
> + qc->maximum = qec.maximum;
> + qc->step = qec.step;
> + qc->default_value = qec.default_value;
> + qc->flags = qec.flags;
>
> return 0;
> }
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index f429f325433b..8aca1a2fe587 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -766,7 +766,7 @@ void uvc_status_put(struct uvc_device *dev);
> extern const struct v4l2_subscribed_event_ops uvc_ctrl_sub_ev_ops;
>
> int uvc_query_v4l2_ctrl(struct uvc_video_chain *chain,
> - struct v4l2_queryctrl *v4l2_ctrl);
> + struct v4l2_query_ext_ctrl *v4l2_ctrl);
> int uvc_query_v4l2_menu(struct uvc_video_chain *chain,
> struct v4l2_querymenu *query_menu);
>
>
next prev parent reply other threads:[~2024-12-09 14:08 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 19:10 [PATCH v15 00/19] media: uvcvideo: Implement UVC v1.5 ROI Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 01/19] media: uvcvideo: Fix event flags in uvc_ctrl_send_events Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 02/19] media: v4l2_ctrl: Add V4L2_CTRL_TYPE_RECT Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 03/19] media: v4l2-ctrls: add support for V4L2_CTRL_WHICH_MIN/MAX_VAL Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 04/19] media: vivid: Add a rectangle control Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 05/19] media: uvcvideo: Handle uvc menu translation inside uvc_get_le_value Ricardo Ribalda
2024-11-25 15:50 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 06/19] media: uvcvideo: Handle uvc menu translation inside uvc_set_le_value Ricardo Ribalda
2024-11-25 15:58 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 07/19] media: uvcvideo: refactor uvc_ioctl_g_ext_ctrls Ricardo Ribalda
2024-11-25 16:01 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 08/19] media: uvcvideo: uvc_ioctl_(g|s)_ext_ctrls: handle NoP case Ricardo Ribalda
2024-11-25 16:01 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 09/19] media: uvcvideo: Support any size for mapping get/set Ricardo Ribalda
2024-12-09 8:56 ` Yunke Cao
2024-12-09 12:49 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 10/19] media: uvcvideo: Factor out clamping from uvc_ctrl_set Ricardo Ribalda
2024-12-09 8:50 ` Yunke Cao
2024-12-09 12:57 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 11/19] media: uvcvideo: add support for compound controls Ricardo Ribalda
2024-12-09 13:35 ` Hans de Goede
2024-12-09 13:58 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 12/19] media: uvcvideo: Factor out query_boundaries from query_ctrl Ricardo Ribalda
2024-12-09 8:50 ` Yunke Cao
2024-12-09 13:38 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 13/19] media: uvcvideo: support V4L2_CTRL_WHICH_MIN/MAX_VAL Ricardo Ribalda
2024-12-09 13:47 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 14/19] media: uvcvideo: Use the camera to clamp compound controls Ricardo Ribalda
2024-12-09 14:05 ` Hans de Goede
2024-12-09 14:46 ` Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 15/19] media: uvcvideo: let v4l2_query_v4l2_ctrl() work with v4l2_query_ext_ctrl Ricardo Ribalda
2024-12-09 8:50 ` Yunke Cao
2024-12-09 14:08 ` Hans de Goede [this message]
2024-12-09 14:12 ` Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 16/19] media: uvcvideo: Introduce uvc_mapping_v4l2_size Ricardo Ribalda
2024-12-09 8:51 ` Yunke Cao
2024-12-09 14:09 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 17/19] media: uvcvideo: Add sanity check to uvc_ioctl_xu_ctrl_map Ricardo Ribalda
2024-11-29 8:15 ` Ricardo Ribalda
2024-12-09 14:11 ` Hans de Goede
2024-12-09 14:15 ` Ricardo Ribalda
2024-11-14 19:10 ` [PATCH v15 18/19] media: uvcvideo: implement UVC v1.5 ROI Ricardo Ribalda
2024-11-14 19:53 ` Gergo Koteles
2024-11-14 20:03 ` Ricardo Ribalda
2024-11-14 20:16 ` Gergo Koteles
2024-11-14 20:28 ` Ricardo Ribalda
2024-11-15 0:04 ` Gergo Koteles
2024-11-15 8:22 ` Ricardo Ribalda
2024-11-18 15:59 ` Hans de Goede
2024-11-18 16:16 ` Ricardo Ribalda Delgado
2024-11-25 14:27 ` Hans de Goede
2024-12-02 8:02 ` Yunke Cao
2024-12-02 9:26 ` Ricardo Ribalda
2024-12-06 7:50 ` Yunke Cao
2024-12-09 14:22 ` Hans de Goede
2024-12-09 15:23 ` Ricardo Ribalda
2024-12-09 15:28 ` Hans de Goede
2024-11-14 19:10 ` [PATCH v15 19/19] media: uvcvideo: document " Ricardo Ribalda
2024-12-09 14:36 ` Hans de Goede
2024-12-09 15:22 ` Ricardo Ribalda
2024-12-09 15:31 ` Hans de Goede
2024-12-09 8:53 ` [PATCH v15 00/19] media: uvcvideo: Implement " 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=d99f507b-1890-4ad3-aabc-494a3b0a0dd8@redhat.com \
--to=hdegoede@redhat.com \
--cc=hverkuil@xs4all.nl \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=ribalda@chromium.org \
--cc=ribalda@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=yunkec@chromium.org \
/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.