From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: linux-media@vger.kernel.org,
Kieran Bingham <kieran.bingham@ideasonboard.com>
Subject: Re: [PATCH v2 5/7] media: uvcvideo: Increment intervals pointer at end of parsing
Date: Mon, 15 May 2023 17:32:58 +0300 [thread overview]
Message-ID: <20230515143258.GA30231@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CANiDSCsLvcsym2nscNuw3oZsZvAnuWO8OD9PGk3==5Wn6oU2rw@mail.gmail.com>
Hi Ricardo,
On Mon, May 15, 2023 at 03:22:13PM +0200, Ricardo Ribalda wrote:
> On Sat, 6 May 2023 at 09:14, Laurent Pinchart wrote:
> >
> > The intervals pointer is incremented for each interval when parsing the
> > format descriptor. This doesn't cause any issue as such, but gets in the
> > way of constifying some pointers. Modify the parsing code to index the
> > intervals pointer as an array and increment it in one go at end of
> > parsing.
> >
> > Careful readers will notice that the maxIntervalIndex variable is set to
> > 1 instead of n - 2 when bFrameIntervalType has a zero value. This is
> > functionally equivalent, as n is equal to 3 in that case.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
>
> > ---
> > drivers/media/usb/uvc/uvc_driver.c | 10 +++++++---
> > 1 file changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > index 446bd8ff128c..11e4fa007f3f 100644
> > --- a/drivers/media/usb/uvc/uvc_driver.c
> > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > @@ -370,6 +370,8 @@ static int uvc_parse_format(struct uvc_device *dev,
> > */
> > while (buflen > 2 && buffer[1] == USB_DT_CS_INTERFACE &&
> > buffer[2] == ftype) {
> > + unsigned int maxIntervalIndex;
> > +
> > frame = &format->frames[format->nframes];
> > if (ftype != UVC_VS_FRAME_FRAME_BASED)
> > n = buflen > 25 ? buffer[25] : 0;
> > @@ -418,7 +420,7 @@ static int uvc_parse_format(struct uvc_device *dev,
> >
> > for (i = 0; i < n; ++i) {
> > interval = get_unaligned_le32(&buffer[26+4*i]);
> > - *(*intervals)++ = interval ? interval : 1;
> > + (*intervals)[i] = interval ? interval : 1;
> > }
> >
> > /*
> > @@ -440,11 +442,11 @@ static int uvc_parse_format(struct uvc_device *dev,
> > * frame->wWidth * frame->wHeight / 8;
> >
> > /* Clamp the default frame interval to the boundaries. */
> > - n -= frame->bFrameIntervalType ? 1 : 2;
> > + maxIntervalIndex = frame->bFrameIntervalType ? n - 1 : 1;
>
> Maybe it is worth mentioning that bFrameIntervalType == 0 is a
> continuous interval. idex 0 is min and 1 is max.
I'll update the comment to
/*
* Clamp the default frame interval to the boundaries. A zero
* bFrameIntervalType value indicates a continuous frame
* interval range, with dwFrameInterval[0] storing the minimum
* value and dwFrameInterval[1] storing the maximum value.
*/
> > frame->dwDefaultFrameInterval =
> > clamp(frame->dwDefaultFrameInterval,
> > frame->dwFrameInterval[0],
> > - frame->dwFrameInterval[n]);
> > + frame->dwFrameInterval[maxIntervalIndex]);
> >
> > /*
> > * Some devices report frame intervals that are not functional.
> > @@ -463,6 +465,8 @@ static int uvc_parse_format(struct uvc_device *dev,
> > (100000000 / frame->dwDefaultFrameInterval) % 10);
> >
> > format->nframes++;
> > + *intervals += n;
> > +
> > buflen -= buffer[0];
> > buffer += buffer[0];
> > }
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2023-05-15 14:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-06 7:14 [PATCH v2 0/7] media: uvcvideo: Misc cleanups Laurent Pinchart
2023-05-06 7:14 ` [PATCH v2 1/7] media: uvcvideo: Rename uvc_streaming 'format' field to 'formats' Laurent Pinchart
2023-05-06 7:14 ` [PATCH v2 2/7] media: uvcvideo: Rename uvc_format 'frame' field to 'frames' Laurent Pinchart
2023-05-06 7:14 ` [PATCH v2 3/7] media: uvcvideo: Use clamp() to replace manual implementation Laurent Pinchart
2023-05-15 12:00 ` Ricardo Ribalda
2023-05-06 7:14 ` [PATCH v2 4/7] media: uvcvideo: Reorganize format descriptor parsing Laurent Pinchart
2023-05-15 12:16 ` Ricardo Ribalda
2023-05-06 7:14 ` [PATCH v2 5/7] media: uvcvideo: Increment intervals pointer at end of parsing Laurent Pinchart
2023-05-15 13:22 ` Ricardo Ribalda
2023-05-15 14:32 ` Laurent Pinchart [this message]
2023-05-15 14:33 ` Ricardo Ribalda
2023-05-06 7:14 ` [PATCH v2 6/7] media: uvcvideo: Constify formats, frames and intervals Laurent Pinchart
2023-05-15 13:28 ` Ricardo Ribalda
2023-05-06 7:14 ` [PATCH v2 7/7] media: uvcvideo: Constify descriptor buffers Laurent Pinchart
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=20230515143258.GA30231@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=kieran.bingham@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=ribalda@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox