From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Cc: "Ming Qian(OSS)" <ming.qian@oss.nxp.com>,
linux-media@vger.Kernel.org, tfiga@chromium.org,
ribalda@chromium.org, yunkec@google.com, xiahong.bao@nxp.com,
ming.zhou@nxp.com, eagle.zhou@nxp.com, tao.jiang_2@nxp.com,
ming.qian@nxp.com
Subject: Re: [PATCH v2 2/3] v4l2-ctl: Support V4L2_CTRL_TYPE_RECT
Date: Tue, 5 Nov 2024 10:51:25 +0200 [thread overview]
Message-ID: <20241105085125.GH27775@pendragon.ideasonboard.com> (raw)
In-Reply-To: <d7818bb6-ffd8-41a7-bb2b-90ed20b44e40@xs4all.nl>
Hi Hans,
On Tue, Nov 05, 2024 at 09:30:43AM +0100, Hans Verkuil wrote:
> On 04/11/2024 02:24, Ming Qian(OSS) wrote:
> > On 2024/10/31 18:09, Laurent Pinchart wrote:
> >> On Thu, Oct 31, 2024 at 05:46:49PM +0800, Ming Qian(OSS) wrote:
> >>> On 2024/10/31 17:34, Laurent Pinchart wrote:
> >>>> On Thu, Oct 31, 2024 at 05:19:02PM +0800, Ming Qian(OSS) wrote:
> >>>>> On 2024/10/30 17:19, Hans Verkuil wrote:
> >>>>>> On 30/10/2024 10:03, Laurent Pinchart wrote:
> >>>>>>> On Wed, Oct 30, 2024 at 11:43:06AM +0900, ming.qian@oss.nxp.com wrote:
> >>>>>>>> From: Yunke Cao <yunkec@google.com>
> >>>>>>>>
> >>>>>>>> Tested with VIVID
> >>>>>>>>
> >>>>>>>> ./v4l2-ctl -C rect -d 0
> >>>>>>>> rect: 300x400@200x100
> >>>>>>>>
> >>>>>>>> ./v4l2-ctl -c rect=1000x2000@0x0
> >>>>>>>> ./v4l2-ctl -C rect -d 0
> >>>>>>>> rect: 1000x2000@0x0
> >>>>>>>>
> >>>>>>>> Signed-off-by: Yunke Cao <yunkec@google.com>
> >>>>>>>> Signed-off-by: Ming Qian <ming.qian@oss.nxp.com>
> >>>>>>>> ---
> >>>>>>>> utils/v4l2-ctl/v4l2-ctl-common.cpp | 12 ++++++++++++
> >>>>>>>> 1 file changed, 12 insertions(+)
> >>>>>>>>
> >>>>>>>> diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> >>>>>>>> index 40667575fcc7..538e1951cf81 100644
> >>>>>>>> --- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
> >>>>>>>> +++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> >>>>>>>> @@ -614,6 +614,10 @@ static void print_value(int fd, const v4l2_query_ext_ctrl &qc, const v4l2_ext_co
> >>>>>>>> case V4L2_CTRL_TYPE_AREA:
> >>>>>>>> printf("%dx%d", ctrl.p_area->width, ctrl.p_area->height);
> >>>>>>>> break;
> >>>>>>>> + case V4L2_CTRL_TYPE_RECT:
> >>>>>>>> + printf("%ux%u@%dx%d", ctrl.p_rect->width, ctrl.p_rect->height,
> >>>>>>>
> >>>>>>> I find this notation ambiguous, it's not immediately clear when reading
> >>>>>>> 10x10@20x20 if we're looking at a 10x10 rectangle positioned at (20,20)
> >>>>>>> or the other way around. media-ctl use (20,20)/10x10 which I think would
> >>>>>>> be a better notation.
> >>>>>>
> >>>>>> Good point, I agree.
> >>>>>>
> >>>>>> Ming Qian, can you also update patch 1/4 of the kernel patch series to
> >>>>>> use the same formatting when logging the V4L2_CTRL_TYPE_RECT value?
> >>>>>>
> >>>>>> Regards,
> >>>>>>
> >>>>>> Hans
> >>>>>
> >>>>> There is a issue in v4l2-utils, that ',' is the ending flag in
> >>>>> v4l_getsubopt(), then I can't set the rect control,
> >>>>> for example:
> >>>>>
> >>>>> $v4l2-ctl -d 0 -c rect="(0,0)/1000x2000"
> >>>>> control '0)/1000x2000' without '='
> >>>>
> >>>> The should be fixable in v4l_getsubopt().
> >>>>
> >>>
> >>> I can see the following comments of v4l_getsubopt(),
> >>>
> >>> Parse comma separated suboption from *OPTIONP and match against
> >>> strings in TOKENS.
> >>>
> >>> I am not sure if we can change it.
> >>
> >> I think we can improve quotes handling by considering quoted substrings
> >> as a single value, ignoring commas. Hans any opinion ?
>
> I think commas are hard to parse. Note that v4l_getsubopt is normally a
> #define for getsubopt from glibc. So you can't change the behavior of
> that function.
Can't we ? Isn't it an internal function ?
> I propose this format for parsing instead:
>
> widthxheight@(top;left)
>
> e.g.: 1000x2000@(0;0)
>
> According to this:
> https://www.dr-aart.nl/Geometry-coordinates.html
>
> the ';' is the separator in countries where a decimal comma is used
> instead of a decimal point.
>
> I prefer to have the position after the size of the rectangle, for two
> reasons: it feels more natural to talk about a 'rectangle of size S at position
> P', and it also makes it possible to allow a variant where only the size
> is given and the position will default to (0;0). I.e., we can support
> parsing either "widthxheight" or "widthxheight@(top;left)".
>
> However, logging rectangles in the kernel should use a comma instead of a
> semicolon. Inside v4l-utils just consistently use the semicolon.
>
> What do you think, Laurent?
We have a precedent of using (x,y)/WxH , both in the kernel and in
media-ctl. Breaking that with another syntax would cause trouble,
especially having different syntaxes between media-ctl and v4l2-ctl.
Think about the shell scripts that would need to convert from one syntax
to another for instance. I would very strongly like to avoid that.
> > How about omitting the commas between the brackets when parsing subopt?
> >
> >
> >>>>>>>> + ctrl.p_rect->left, ctrl.p_rect->top);
> >>>>>>>> + break;
> >>>>>>>> default:
> >>>>>>>> printf("unsupported payload type");
> >>>>>>>> break;
> >>>>>>>> @@ -702,6 +706,9 @@ static void print_qctrl(int fd, const v4l2_query_ext_ctrl &qc,
> >>>>>>>> case V4L2_CTRL_TYPE_AREA:
> >>>>>>>> printf("%31s %#8.8x (area) :", s.c_str(), qc.id);
> >>>>>>>> break;
> >>>>>>>> + case V4L2_CTRL_TYPE_RECT:
> >>>>>>>> + printf("%31s %#8.8x (rect) :", s.c_str(), qc.id);
> >>>>>>>> + break;
> >>>>>>>> case V4L2_CTRL_TYPE_HDR10_CLL_INFO:
> >>>>>>>> printf("%31s %#8.8x (hdr10-cll-info):", s.c_str(), qc.id);
> >>>>>>>> break;
> >>>>>>>> @@ -1279,6 +1286,11 @@ void common_set(cv4l_fd &_fd)
> >>>>>>>> sscanf(set_ctrl.second.c_str(), "%ux%u",
> >>>>>>>> &ctrl.p_area->width, &ctrl.p_area->height);
> >>>>>>>> break;
> >>>>>>>> + case V4L2_CTRL_TYPE_RECT:
> >>>>>>>> + sscanf(set_ctrl.second.c_str(), "%ux%u@%dx%d",
> >>>>>>>> + &ctrl.p_rect->width, &ctrl.p_rect->height,
> >>>>>>>> + &ctrl.p_rect->left, &ctrl.p_rect->top);
> >>>>>>>> + break;
> >>>>>>>> default:
> >>>>>>>> fprintf(stderr, "%s: unsupported payload type\n",
> >>>>>>>> qc.name);
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2024-11-05 8:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-30 2:43 [PATCH v2 0/2] Support V4L2_CTRL_TYPE_RECT and V4L2_CTRL_WHICH_MIN/MAX_VAL ming.qian
2024-10-30 2:43 ` [PATCH v2 1/3] v4l-utils: Define V4L2_CTRL_TYPE_RECT ming.qian
2024-10-30 2:43 ` [PATCH v2 2/3] v4l2-ctl: Support V4L2_CTRL_TYPE_RECT ming.qian
2024-10-30 9:03 ` Laurent Pinchart
2024-10-30 9:19 ` Hans Verkuil
2024-10-30 9:22 ` Ming Qian(OSS)
2024-10-31 9:19 ` Ming Qian(OSS)
2024-10-31 9:34 ` Laurent Pinchart
2024-10-31 9:46 ` Ming Qian(OSS)
2024-10-31 10:09 ` Laurent Pinchart
2024-11-04 1:24 ` Ming Qian(OSS)
2024-11-05 8:30 ` Hans Verkuil
2024-11-05 8:51 ` Laurent Pinchart [this message]
2024-11-05 9:01 ` Hans Verkuil
2024-11-05 15:29 ` Laurent Pinchart
2024-10-30 9:21 ` Ming Qian(OSS)
2024-10-30 2:43 ` [PATCH v2 3/3] v4l2-utils: Support V4L2_CTRL_WHICH_MIN/MAX_VAL ming.qian
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=20241105085125.GH27775@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=eagle.zhou@nxp.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=linux-media@vger.Kernel.org \
--cc=ming.qian@nxp.com \
--cc=ming.qian@oss.nxp.com \
--cc=ming.zhou@nxp.com \
--cc=ribalda@chromium.org \
--cc=tao.jiang_2@nxp.com \
--cc=tfiga@chromium.org \
--cc=xiahong.bao@nxp.com \
--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.