1

media: vivid: fix CREATE_BUFS support in queue_setup()

While queue_setup was correct for CREATE_BUFS support for
video devices, for VBI, SDR and touch devices it was wrong.

This was found after adding new v4l2-compliance tests.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
Hans Verkuil 2024-06-26 13:00:49 +02:00
parent 0fd7c0c2c1
commit 23558d802a
4 changed files with 13 additions and 4 deletions

View File

@ -219,8 +219,13 @@ static int sdr_cap_queue_setup(struct vb2_queue *vq,
unsigned sizes[], struct device *alloc_devs[])
{
/* 2 = max 16-bit sample returned */
sizes[0] = SDR_CAP_SAMPLES_PER_BUF * 2;
u32 size = SDR_CAP_SAMPLES_PER_BUF * 2;
if (*nplanes)
return sizes[0] < size ? -EINVAL : 0;
*nplanes = 1;
sizes[0] = size;
return 0;
}

View File

@ -17,13 +17,13 @@ static int touch_cap_queue_setup(struct vb2_queue *vq, unsigned int *nbuffers,
unsigned int size = f->sizeimage;
if (*nplanes) {
if (sizes[0] < size)
if (*nplanes != 1)
return -EINVAL;
} else {
sizes[0] = size;
return sizes[0] < size ? -EINVAL : 0;
}
*nplanes = 1;
sizes[0] = size;
return 0;
}

View File

@ -132,6 +132,8 @@ static int vbi_cap_queue_setup(struct vb2_queue *vq,
if (!vivid_is_sdtv_cap(dev))
return -EINVAL;
if (*nplanes)
return sizes[0] < size ? -EINVAL : 0;
sizes[0] = size;
*nplanes = 1;

View File

@ -28,6 +28,8 @@ static int vbi_out_queue_setup(struct vb2_queue *vq,
if (!vivid_is_svid_out(dev))
return -EINVAL;
if (*nplanes)
return sizes[0] < size ? -EINVAL : 0;
sizes[0] = size;
*nplanes = 1;