usbtv: fix v4l2-compliance issues
PATCH 1/1 usbtv: fix v4l2-compliance issues
Running v4l2-compliance on my usbtv stick revealed two failures:
1) Correct handling of CREATE_BUFS in usbtv_queue_setup was missing. Added this.
2) The sequence counter wasn't reset to 0 when starting streaming.
Signed-off-by Hans Verkuil <[email protected]>
Tested-by Hans Verkuil <[email protected]>
---
drivers/media/usb/usbtv/usbtv-video.c +8 -4
@@ -599,15 +599,18 @@ static struct v4l2_file_operations usbtv_fops = { };static int usbtv_queue_setup (struct vb2_queue *vq, -const struct v4l2_format *v4l_fmt,unsigned int *nbuffers, +const struct v4l2_format *fmt,unsigned int *nbuffers,unsigned int *nplanes,unsigned int sizes[],void *alloc_ctxs[]) {struct usbtv *usbtv =vb2_get_drv_priv (vq); +unsigned size =USBTV_CHUNK * usbtv->n_chunks *2 *sizeof (u32); -if (*nbuffers <2 ) - *nbuffers =2 ; +if (vq->num_buffers + *nbuffers <2 ) + *nbuffers =2 - vq->num_buffers; *nplanes =1 ; - sizes[0 ] =USBTV_CHUNK * usbtv->n_chunks *2 *sizeof (u32); +if (fmt && fmt->fmt.pix.sizeimage < size) +return -EINVAL ; + sizes[0 ] = fmt ? fmt->fmt.pix.sizeimage : size;return 0 ; }
@@ -635,6 +638,7 @@ static int usbtv_start_streaming(struct vb2_queue *vq, unsigned int count)if (usbtv->udev ==NULL )return -ENODEV ; + usbtv->sequence =0 ;return usbtv_start (usbtv); }