Commit 23558d80 authored by Hans Verkuil's avatar Hans Verkuil
Browse files

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: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
parent 0fd7c0c2
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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;
}

+3 −3
Original line number Diff line number Diff line
@@ -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;
}

+2 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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;