TRY_FMT should not return an error if a pixelformat is unsupported. Instead just
pick a common pixelformat.

Also the bytesperline calculation was incorrect: it used the old width instead 
of
the provided with, and it miscalculated the bytesperline value for the depth == 
12
case.

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>
Signed-off-by: Devin Heitmueller <dheitmuel...@kernellabs.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c 
b/drivers/media/usb/em28xx/em28xx-video.c
index a91a248..7c09b55 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -821,7 +821,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void 
*priv,
        if (!fmt) {
                em28xx_videodbg("Fourcc format (%08x) invalid.\n",
                                f->fmt.pix.pixelformat);
-               return -EINVAL;
+               fmt = format_by_fourcc(V4L2_PIX_FMT_YUYV);
        }
 
        if (dev->board.is_em2800) {
@@ -847,7 +847,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void 
*priv,
        f->fmt.pix.width = width;
        f->fmt.pix.height = height;
        f->fmt.pix.pixelformat = fmt->fourcc;
-       f->fmt.pix.bytesperline = (dev->width * fmt->depth + 7) >> 3;
+       f->fmt.pix.bytesperline = width * ((fmt->depth + 7) >> 3);
        f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
        f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
        if (dev->progressive)
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to