]> Pileus Git - ~andy/linux/commitdiff
[media] mem2mem_testdev: set default size and fix colorspace
authorHans Verkuil <hans.verkuil@cisco.com>
Wed, 18 Jul 2012 14:33:22 +0000 (11:33 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Jul 2012 22:20:21 +0000 (19:20 -0300)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/mem2mem_testdev.c

index f7a2a2d635f56de2c890e7dd8499ea96cf4d99de..7fdee8fcf3f762c59cdcfefaffb2b77addefc9a8 100644 (file)
@@ -171,6 +171,8 @@ struct m2mtest_ctx {
        /* Processing mode */
        int                     mode;
 
+       enum v4l2_colorspace    colorspace;
+
        struct v4l2_m2m_ctx     *m2m_ctx;
 
        /* Source and destination queue data */
@@ -494,6 +496,7 @@ static int vidioc_g_fmt(struct m2mtest_ctx *ctx, struct v4l2_format *f)
        f->fmt.pix.pixelformat  = q_data->fmt->fourcc;
        f->fmt.pix.bytesperline = (q_data->width * q_data->fmt->depth) >> 3;
        f->fmt.pix.sizeimage    = q_data->sizeimage;
+       f->fmt.pix.colorspace   = ctx->colorspace;
 
        return 0;
 }
@@ -555,6 +558,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
                         f->fmt.pix.pixelformat);
                return -EINVAL;
        }
+       f->fmt.pix.colorspace = ctx->colorspace;
 
        return vidioc_try_fmt(f, fmt);
 }
@@ -572,6 +576,8 @@ static int vidioc_try_fmt_vid_out(struct file *file, void *priv,
                         f->fmt.pix.pixelformat);
                return -EINVAL;
        }
+       if (!f->fmt.pix.colorspace)
+               f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
 
        return vidioc_try_fmt(f, fmt);
 }
@@ -622,13 +628,17 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
 static int vidioc_s_fmt_vid_out(struct file *file, void *priv,
                                struct v4l2_format *f)
 {
+       struct m2mtest_ctx *ctx = file2ctx(file);
        int ret;
 
        ret = vidioc_try_fmt_vid_out(file, priv, f);
        if (ret)
                return ret;
 
-       return vidioc_s_fmt(file2ctx(file), f);
+       ret = vidioc_s_fmt(file2ctx(file), f);
+       if (!ret)
+               ctx->colorspace = f->fmt.pix.colorspace;
+       return ret;
 }
 
 static int vidioc_reqbufs(struct file *file, void *priv,
@@ -906,7 +916,14 @@ static int m2mtest_open(struct file *file)
        v4l2_ctrl_handler_setup(hdl);
 
        ctx->q_data[V4L2_M2M_SRC].fmt = &formats[0];
-       ctx->q_data[V4L2_M2M_DST].fmt = &formats[0];
+       ctx->q_data[V4L2_M2M_SRC].width = 640;
+       ctx->q_data[V4L2_M2M_SRC].height = 480;
+       ctx->q_data[V4L2_M2M_SRC].sizeimage =
+               ctx->q_data[V4L2_M2M_SRC].width *
+               ctx->q_data[V4L2_M2M_SRC].height *
+               (ctx->q_data[V4L2_M2M_SRC].fmt->depth >> 3);
+       ctx->q_data[V4L2_M2M_DST] = ctx->q_data[V4L2_M2M_SRC];
+       ctx->colorspace = V4L2_COLORSPACE_REC709;
 
        ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, &queue_init);