[media] s5p-fimc: Fix G_FMT ioctl handler
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Sat, 15 Jan 2011 04:17:42 +0000 (01:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 22 Mar 2011 07:54:20 +0000 (04:54 -0300)
Use pix_mp member of struct v4l2_format to return a format
description rather than pix. Also fill in the plane_fmt array.
This is a missing bit of conversion to the multiplanar API.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/s5p-fimc/fimc-core.c

index b29937eba602eb80f2dab9710306e34b27d2ddc2..6c919b38a3d89c17c33d4cd5d4beee2252f23929 100644 (file)
@@ -804,15 +804,33 @@ int fimc_vidioc_g_fmt_mplane(struct file *file, void *priv,
 {
        struct fimc_ctx *ctx = priv;
        struct fimc_frame *frame;
+       struct v4l2_pix_format_mplane *pixm;
+       int i;
 
        frame = ctx_get_frame(ctx, f->type);
        if (IS_ERR(frame))
                return PTR_ERR(frame);
 
-       f->fmt.pix.width        = frame->width;
-       f->fmt.pix.height       = frame->height;
-       f->fmt.pix.field        = V4L2_FIELD_NONE;
-       f->fmt.pix.pixelformat  = frame->fmt->fourcc;
+       pixm = &f->fmt.pix_mp;
+
+       pixm->width             = frame->width;
+       pixm->height            = frame->height;
+       pixm->field             = V4L2_FIELD_NONE;
+       pixm->pixelformat       = frame->fmt->fourcc;
+       pixm->colorspace        = V4L2_COLORSPACE_JPEG;
+       pixm->num_planes        = frame->fmt->memplanes;
+
+       for (i = 0; i < pixm->num_planes; ++i) {
+               int bpl = frame->o_width;
+
+               if (frame->fmt->colplanes == 1) /* packed formats */
+                       bpl = (bpl * frame->fmt->depth[0]) / 8;
+
+               pixm->plane_fmt[i].bytesperline = bpl;
+
+               pixm->plane_fmt[i].sizeimage = (frame->o_width *
+                       frame->o_height * frame->fmt->depth[i]) / 8;
+       }
 
        return 0;
 }
@@ -907,6 +925,7 @@ int fimc_vidioc_try_fmt_mplane(struct file *file, void *priv,
                &pix->height, 8, variant->pix_limit->scaler_dis_w, mod_y, 0);
 
        pix->num_planes = fmt->memplanes;
+       pix->colorspace = V4L2_COLORSPACE_JPEG;
 
        for (i = 0; i < pix->num_planes; ++i) {
                int bpl = pix->plane_fmt[i].bytesperline;