linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] uvc: Fix bytesperline calculation for planar YUV
@ 2016-01-07 20:43 Nicolas Dufresne
  2016-04-13 14:36 ` Laurent Pinchart
  0 siblings, 1 reply; 4+ messages in thread
From: Nicolas Dufresne @ 2016-01-07 20:43 UTC (permalink / raw)
  To: Laurent Pinchart, Mauro Carvalho Chehab, linux-media; +Cc: Nicolas Dufresne

The formula used to calculate bytesperline only works for packed format.
So far, all planar format we support have their bytesperline equal to
the image width (stride of the Y plane or a line of Y for M420).

Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
---
 drivers/media/usb/uvc/uvc_v4l2.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
index d7723ce..ceb1d1b 100644
--- a/drivers/media/usb/uvc/uvc_v4l2.c
+++ b/drivers/media/usb/uvc/uvc_v4l2.c
@@ -142,6 +142,20 @@ static __u32 uvc_try_frame_interval(struct uvc_frame *frame, __u32 interval)
 	return interval;
 }
 
+static __u32 uvc_v4l2_get_bytesperline(struct uvc_format *format,
+	struct uvc_frame *frame)
+{
+	switch (format->fcc) {
+	case V4L2_PIX_FMT_NV12:
+	case V4L2_PIX_FMT_YVU420:
+	case V4L2_PIX_FMT_YUV420:
+	case V4L2_PIX_FMT_M420:
+		return frame->wWidth;
+	default:
+		return format->bpp * frame->wWidth / 8;
+	}
+}
+
 static int uvc_v4l2_try_format(struct uvc_streaming *stream,
 	struct v4l2_format *fmt, struct uvc_streaming_control *probe,
 	struct uvc_format **uvc_format, struct uvc_frame **uvc_frame)
@@ -245,7 +259,7 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
 	fmt->fmt.pix.width = frame->wWidth;
 	fmt->fmt.pix.height = frame->wHeight;
 	fmt->fmt.pix.field = V4L2_FIELD_NONE;
-	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth / 8;
+	fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
 	fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
 	fmt->fmt.pix.colorspace = format->colorspace;
 	fmt->fmt.pix.priv = 0;
@@ -282,7 +296,7 @@ static int uvc_v4l2_get_format(struct uvc_streaming *stream,
 	fmt->fmt.pix.width = frame->wWidth;
 	fmt->fmt.pix.height = frame->wHeight;
 	fmt->fmt.pix.field = V4L2_FIELD_NONE;
-	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth / 8;
+	fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
 	fmt->fmt.pix.sizeimage = stream->ctrl.dwMaxVideoFrameSize;
 	fmt->fmt.pix.colorspace = format->colorspace;
 	fmt->fmt.pix.priv = 0;
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] uvc: Fix bytesperline calculation for planar YUV
  2016-01-07 20:43 [PATCH] uvc: Fix bytesperline calculation for planar YUV Nicolas Dufresne
@ 2016-04-13 14:36 ` Laurent Pinchart
  2016-04-13 15:57   ` Nicolas Dufresne
  0 siblings, 1 reply; 4+ messages in thread
From: Laurent Pinchart @ 2016-04-13 14:36 UTC (permalink / raw)
  To: Nicolas Dufresne; +Cc: Mauro Carvalho Chehab, linux-media

Hi Nicolas,

Thank you for the patch.

On Thursday 07 Jan 2016 15:43:48 Nicolas Dufresne wrote:
> The formula used to calculate bytesperline only works for packed format.
> So far, all planar format we support have their bytesperline equal to
> the image width (stride of the Y plane or a line of Y for M420).
> 
> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
> ---
>  drivers/media/usb/uvc/uvc_v4l2.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c
> b/drivers/media/usb/uvc/uvc_v4l2.c index d7723ce..ceb1d1b 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -142,6 +142,20 @@ static __u32 uvc_try_frame_interval(struct uvc_frame
> *frame, __u32 interval) return interval;
>  }
> 
> +static __u32 uvc_v4l2_get_bytesperline(struct uvc_format *format,
> +	struct uvc_frame *frame)

I'd make the two parameters const.

> +{
> +	switch (format->fcc) {
> +	case V4L2_PIX_FMT_NV12:
> +	case V4L2_PIX_FMT_YVU420:
> +	case V4L2_PIX_FMT_YUV420:
> +	case V4L2_PIX_FMT_M420:
> +		return frame->wWidth;
> +	default:
> +		return format->bpp * frame->wWidth / 8;
> +	}
> +}
> +
>  static int uvc_v4l2_try_format(struct uvc_streaming *stream,
>  	struct v4l2_format *fmt, struct uvc_streaming_control *probe,
>  	struct uvc_format **uvc_format, struct uvc_frame **uvc_frame)
> @@ -245,7 +259,7 @@ static int uvc_v4l2_try_format(struct uvc_streaming
> *stream, fmt->fmt.pix.width = frame->wWidth;
>  	fmt->fmt.pix.height = frame->wHeight;
>  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth / 8;
> +	fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
>  	fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
>  	fmt->fmt.pix.colorspace = format->colorspace;
>  	fmt->fmt.pix.priv = 0;
> @@ -282,7 +296,7 @@ static int uvc_v4l2_get_format(struct uvc_streaming
> *stream, fmt->fmt.pix.width = frame->wWidth;
>  	fmt->fmt.pix.height = frame->wHeight;
>  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth / 8;
> +	fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
>  	fmt->fmt.pix.sizeimage = stream->ctrl.dwMaxVideoFrameSize;
>  	fmt->fmt.pix.colorspace = format->colorspace;
>  	fmt->fmt.pix.priv = 0;

This looks good to me otherwise.

If it's fine with you I can fix the above issue while applying.

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] uvc: Fix bytesperline calculation for planar YUV
  2016-04-13 14:36 ` Laurent Pinchart
@ 2016-04-13 15:57   ` Nicolas Dufresne
  2016-04-14 16:32     ` Laurent Pinchart
  0 siblings, 1 reply; 4+ messages in thread
From: Nicolas Dufresne @ 2016-04-13 15:57 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Mauro Carvalho Chehab, linux-media

[-- Attachment #1: Type: text/plain, Size: 2866 bytes --]

Le mercredi 13 avril 2016 à 17:36 +0300, Laurent Pinchart a écrit :
> Hi Nicolas,
> 
> Thank you for the patch.
> 
> On Thursday 07 Jan 2016 15:43:48 Nicolas Dufresne wrote:
> > 
> > The formula used to calculate bytesperline only works for packed
> > format.
> > So far, all planar format we support have their bytesperline equal
> > to
> > the image width (stride of the Y plane or a line of Y for M420).
> > 
> > Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
> > ---
> >  drivers/media/usb/uvc/uvc_v4l2.c | 18 ++++++++++++++++--
> >  1 file changed, 16 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/media/usb/uvc/uvc_v4l2.c
> > b/drivers/media/usb/uvc/uvc_v4l2.c index d7723ce..ceb1d1b 100644
> > --- a/drivers/media/usb/uvc/uvc_v4l2.c
> > +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> > @@ -142,6 +142,20 @@ static __u32 uvc_try_frame_interval(struct
> > uvc_frame
> > *frame, __u32 interval) return interval;
> >  }
> > 
> > +static __u32 uvc_v4l2_get_bytesperline(struct uvc_format *format,
> > +	struct uvc_frame *frame)
> I'd make the two parameters const.

I agree.

> 
> > 
> > +{
> > +	switch (format->fcc) {
> > +	case V4L2_PIX_FMT_NV12:
> > +	case V4L2_PIX_FMT_YVU420:
> > +	case V4L2_PIX_FMT_YUV420:
> > +	case V4L2_PIX_FMT_M420:
> > +		return frame->wWidth;
> > +	default:
> > +		return format->bpp * frame->wWidth / 8;
> > +	}
> > +}
> > +
> >  static int uvc_v4l2_try_format(struct uvc_streaming *stream,
> >  	struct v4l2_format *fmt, struct uvc_streaming_control
> > *probe,
> >  	struct uvc_format **uvc_format, struct uvc_frame
> > **uvc_frame)
> > @@ -245,7 +259,7 @@ static int uvc_v4l2_try_format(struct
> > uvc_streaming
> > *stream, fmt->fmt.pix.width = frame->wWidth;
> >  	fmt->fmt.pix.height = frame->wHeight;
> >  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> > -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth /
> > 8;
> > +	fmt->fmt.pix.bytesperline =
> > uvc_v4l2_get_bytesperline(format, frame);
> >  	fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
> >  	fmt->fmt.pix.colorspace = format->colorspace;
> >  	fmt->fmt.pix.priv = 0;
> > @@ -282,7 +296,7 @@ static int uvc_v4l2_get_format(struct
> > uvc_streaming
> > *stream, fmt->fmt.pix.width = frame->wWidth;
> >  	fmt->fmt.pix.height = frame->wHeight;
> >  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> > -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth /
> > 8;
> > +	fmt->fmt.pix.bytesperline =
> > uvc_v4l2_get_bytesperline(format, frame);
> >  	fmt->fmt.pix.sizeimage = stream->ctrl.dwMaxVideoFrameSize;
> >  	fmt->fmt.pix.colorspace = format->colorspace;
> >  	fmt->fmt.pix.priv = 0;
> This looks good to me otherwise.
> 
> If it's fine with you I can fix the above issue while applying.

That would be really nice.

thanks,
Nicolas

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] uvc: Fix bytesperline calculation for planar YUV
  2016-04-13 15:57   ` Nicolas Dufresne
@ 2016-04-14 16:32     ` Laurent Pinchart
  0 siblings, 0 replies; 4+ messages in thread
From: Laurent Pinchart @ 2016-04-14 16:32 UTC (permalink / raw)
  To: Nicolas Dufresne; +Cc: Mauro Carvalho Chehab, linux-media

Hi Nicolas,

On Wednesday 13 Apr 2016 11:57:34 Nicolas Dufresne wrote:
> Le mercredi 13 avril 2016 à 17:36 +0300, Laurent Pinchart a écrit :
> > Hi Nicolas,
> > 
> > Thank you for the patch.
> > 
> > On Thursday 07 Jan 2016 15:43:48 Nicolas Dufresne wrote:
> > > The formula used to calculate bytesperline only works for packed
> > > format.
> > > So far, all planar format we support have their bytesperline equal
> > > to
> > > the image width (stride of the Y plane or a line of Y for M420).
> > > 
> > > Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
> > > ---
> > >  drivers/media/usb/uvc/uvc_v4l2.c | 18 ++++++++++++++++--
> > >  1 file changed, 16 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/media/usb/uvc/uvc_v4l2.c
> > > b/drivers/media/usb/uvc/uvc_v4l2.c index d7723ce..ceb1d1b 100644
> > > --- a/drivers/media/usb/uvc/uvc_v4l2.c
> > > +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> > > @@ -142,6 +142,20 @@ static __u32 uvc_try_frame_interval(struct
> > > uvc_frame
> > > *frame, __u32 interval) return interval;
> > >  }
> > > 
> > > +static __u32 uvc_v4l2_get_bytesperline(struct uvc_format *format,
> > > +	struct uvc_frame *frame)
> > 
> > I'd make the two parameters const.
> 
> I agree.
> 
> > > +{
> > > +	switch (format->fcc) {
> > > +	case V4L2_PIX_FMT_NV12:
> > > +	case V4L2_PIX_FMT_YVU420:
> > > +	case V4L2_PIX_FMT_YUV420:
> > > +	case V4L2_PIX_FMT_M420:
> > > +		return frame->wWidth;
> > > +	default:
> > > +		return format->bpp * frame->wWidth / 8;
> > > +	}
> > > +}
> > > +
> > >  static int uvc_v4l2_try_format(struct uvc_streaming *stream,
> > >  	struct v4l2_format *fmt, struct uvc_streaming_control
> > > *probe,
> > >  	struct uvc_format **uvc_format, struct uvc_frame
> > > **uvc_frame)
> > > @@ -245,7 +259,7 @@ static int uvc_v4l2_try_format(struct
> > > uvc_streaming
> > > *stream, fmt->fmt.pix.width = frame->wWidth;
> > >  	fmt->fmt.pix.height = frame->wHeight;
> > >  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> > > -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth /
> > > 8;
> > > +	fmt->fmt.pix.bytesperline =
> > > uvc_v4l2_get_bytesperline(format, frame);
> > >  	fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
> > >  	fmt->fmt.pix.colorspace = format->colorspace;
> > >  	fmt->fmt.pix.priv = 0;
> > > @@ -282,7 +296,7 @@ static int uvc_v4l2_get_format(struct
> > > uvc_streaming
> > > *stream, fmt->fmt.pix.width = frame->wWidth;
> > >  	fmt->fmt.pix.height = frame->wHeight;
> > >  	fmt->fmt.pix.field = V4L2_FIELD_NONE;
> > > -	fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth /
> > > 8;
> > > +	fmt->fmt.pix.bytesperline =
> > > uvc_v4l2_get_bytesperline(format, frame);
> > >  	fmt->fmt.pix.sizeimage = stream->ctrl.dwMaxVideoFrameSize;
> > >  	fmt->fmt.pix.colorspace = format->colorspace;
> > >  	fmt->fmt.pix.priv = 0;
> > 
> > This looks good to me otherwise.
> > 
> > If it's fine with you I can fix the above issue while applying.
> 
> That would be really nice.

Applied to my tree with the above changes, thank you.

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-04-14 16:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-07 20:43 [PATCH] uvc: Fix bytesperline calculation for planar YUV Nicolas Dufresne
2016-04-13 14:36 ` Laurent Pinchart
2016-04-13 15:57   ` Nicolas Dufresne
2016-04-14 16:32     ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).