Re: [PATCH] media: uvc: limit max bandwidth for HDMI capture

From: Nicolas Dufresne
Date: Fri Jun 25 2021 - 15:18:22 EST


Le mardi 22 juin 2021 à 10:29 +0200, Mauro Carvalho Chehab a écrit :
> Em Mon, 21 Jun 2021 21:22:26 +0300
> Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> escreveu:
>
> > Hi Mauro,
> >
> > Thank you for the patch.
>
> Thanks for reviewing it!
>
> >
> > On Mon, Feb 01, 2021 at 08:08:59PM +0100, Mauro Carvalho Chehab wrote:
> > > This device:
> > > 534d:2109 MacroSilicon
> > >
> > > Announces that it supports several frame intervals for
> > > their resolutions for MJPEG compression:
> > >
> > > VideoStreaming Interface Descriptor:
> > > bLength 46
> > > bDescriptorType 36
> > > bDescriptorSubtype 7 (FRAME_MJPEG)
> > > bFrameIndex 1
> > > bmCapabilities 0x00
> > > Still image unsupported
> > > wWidth 1920
> > > wHeight 1080
> > > dwMinBitRate 768000
> > > dwMaxBitRate 196608000
> > > dwMaxVideoFrameBufferSize 4147200
> > > dwDefaultFrameInterval 166666
> > > bFrameIntervalType 5
> > > dwFrameInterval( 0) 166666
> > > dwFrameInterval( 1) 333333
> > > dwFrameInterval( 2) 400000
> > > dwFrameInterval( 3) 500000
> > > dwFrameInterval( 4) 1000000
> > >
> > > However, the highest frame interval (166666), which means 60 fps
> > > is not supported. For such resolution, the maximum interval
> > > is, instead 333333 (30 fps).
> >
> > What happens if you try to select it ?
>
> Basically, URBs get lost: they cause apps like qv4l2 to crash
> sometimes, with:
>
> v4l-convert: libjpeg error: Corrupt JPEG data: premature end of data segment

This is the emulated format handler that decodes jpeg behind application back
that is broken. The converter should implement this in a nicer way. E.g. it
could return ERROR buffer with payload = 0 in that case.

>
> The image keeps blinking, and part of the image is replaced by
> white noise.
>
> Clearly, it tries to send more data than the maximum available bandwidth
> on this chipset.
>
>
> Sent a v2 addressing the issues you pointed.
>
>
> Thanks,
> Mauro