[media] stk1160: Fix s_fmt and try_fmt implementation
authorEzequiel Garcia <elezegarcia@gmail.com>
Mon, 20 Aug 2012 00:23:45 +0000 (21:23 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 25 Sep 2012 13:53:34 +0000 (10:53 -0300)
The driver was expecting to get a valid pixelformat on s_fmt and try_fmt.
This is wrong, since the user may pass a bitmask and expect the driver
to change it, returning a valid (fourcc) pixelformat.
This problem was spotted by v4l2-compliance.

Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/usb/stk1160/stk1160-v4l.c

index c414bc3570c50e91878649f77d23bde84a703ef6..879800dd162f964c740c094e93b2eacf624ed38f 100644 (file)
@@ -318,12 +318,6 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
 {
        struct stk1160 *dev = video_drvdata(file);
 
-       if (f->fmt.pix.pixelformat != format[0].fourcc) {
-               stk1160_err("fourcc format 0x%08x invalid\n",
-                       f->fmt.pix.pixelformat);
-               return -EINVAL;
-       }
-
        /*
         * User can't choose size at his own will,
         * so we just return him the current size chosen
@@ -331,6 +325,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
         * TODO: Implement frame scaling?
         */
 
+       f->fmt.pix.pixelformat = dev->fmt->fourcc;
        f->fmt.pix.width = dev->width;
        f->fmt.pix.height = dev->height;
        f->fmt.pix.field = V4L2_FIELD_INTERLACED;
@@ -346,14 +341,11 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
 {
        struct stk1160 *dev = video_drvdata(file);
        struct vb2_queue *q = &dev->vb_vidq;
-       int rc;
 
        if (vb2_is_busy(q))
                return -EBUSY;
 
-       rc = vidioc_try_fmt_vid_cap(file, priv, f);
-       if (rc < 0)
-               return rc;
+       vidioc_try_fmt_vid_cap(file, priv, f);
 
        /* We don't support any format changes */