]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: vivid: fix CREATE_BUFS support in queue_setup()
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 26 Jun 2024 11:00:49 +0000 (13:00 +0200)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 26 Jun 2024 15:28:31 +0000 (17:28 +0200)
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>
drivers/media/test-drivers/vivid/vivid-sdr-cap.c
drivers/media/test-drivers/vivid/vivid-touch-cap.c
drivers/media/test-drivers/vivid/vivid-vbi-cap.c
drivers/media/test-drivers/vivid/vivid-vbi-out.c

index a81f26b769883f23a04c75353c33119f3a57efc7..38cda33dffb2aba68b2ce1187448a291d57a64ee 100644 (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;
 }
 
index 3888c21b4d0c4cb3ea0280c9f88187debb658579..3600b084bca53eb22a10a7d17152c5d0c39705c5 100644 (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;
 }
 
index 3840b3a664ac114c0e1741add402077cfbbd464b..95387d57eb938050f9007f308b01663862d3a6ab 100644 (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;
index 434a10676417a1f3439188edc6bc2c58c2ec1790..871a56d934254a198648835c38a65a33d3c8c85d 100644 (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;