[media] marvell-ccic: fix the bytesperline and sizeimage calculations
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 9 Mar 2015 20:14:36 +0000 (17:14 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 1 May 2015 10:49:37 +0000 (07:49 -0300)
These were calculated incorrectly for the planar formats.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/marvell-ccic/mcam-core.c

index 1a326102791fec6fc6607d358cc01cd22a9490d7..9343051c984f87a5efc6b0b50d56233fc078bef8 100644 (file)
@@ -127,21 +127,21 @@ static struct mcam_format_struct {
                .desc           = "YUV 4:2:2 PLANAR",
                .pixelformat    = V4L2_PIX_FMT_YUV422P,
                .mbus_code      = MEDIA_BUS_FMT_YUYV8_2X8,
-               .bpp            = 2,
+               .bpp            = 1,
                .planar         = true,
        },
        {
                .desc           = "YUV 4:2:0 PLANAR",
                .pixelformat    = V4L2_PIX_FMT_YUV420,
                .mbus_code      = MEDIA_BUS_FMT_YUYV8_2X8,
-               .bpp            = 2,
+               .bpp            = 1,
                .planar         = true,
        },
        {
                .desc           = "YVU 4:2:0 PLANAR",
                .pixelformat    = V4L2_PIX_FMT_YVU420,
                .mbus_code      = MEDIA_BUS_FMT_YUYV8_2X8,
-               .bpp            = 2,
+               .bpp            = 1,
                .planar         = true,
        },
        {
@@ -764,6 +764,7 @@ static void mcam_ctlr_image(struct mcam_camera *cam)
        default:
                widthy = fmt->bytesperline;
                widthuv = 0;
+               break;
        }
 
        mcam_reg_write_mask(cam, REG_IMGPITCH, widthuv << 16 | widthy,
@@ -1370,16 +1371,19 @@ static int mcam_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
        v4l2_fill_mbus_format(&mbus_fmt, pix, f->mbus_code);
        ret = sensor_call(cam, video, try_mbus_fmt, &mbus_fmt);
        v4l2_fill_pix_format(pix, &mbus_fmt);
+       pix->bytesperline = pix->width * f->bpp;
        switch (f->pixelformat) {
+       case V4L2_PIX_FMT_YUV422P:
+               pix->sizeimage = pix->height * pix->bytesperline * 2;
+               break;
        case V4L2_PIX_FMT_YUV420:
        case V4L2_PIX_FMT_YVU420:
-               pix->bytesperline = pix->width * 3 / 2;
+               pix->sizeimage = pix->height * pix->bytesperline * 3 / 2;
                break;
        default:
-               pix->bytesperline = pix->width * f->bpp;
+               pix->sizeimage = pix->height * pix->bytesperline;
                break;
        }
-       pix->sizeimage = pix->height * pix->bytesperline;
        pix->colorspace = V4L2_COLORSPACE_SRGB;
        return ret;
 }