[media] coda: add bytesperline to queue data
authorPhilipp Zabel <p.zabel@pengutronix.de>
Fri, 11 Jul 2014 09:36:36 +0000 (06:36 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 22 Jul 2014 15:11:15 +0000 (12:11 -0300)
bytesperline is calculated in multiple places, store it in the coda_q_data
structure. This will be more useful later when adding JPEG support.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/platform/coda.c

index b8c3d61..5ac455f 100644 (file)
@@ -119,6 +119,7 @@ struct coda_devtype {
 struct coda_q_data {
        unsigned int            width;
        unsigned int            height;
+       unsigned int            bytesperline;
        unsigned int            sizeimage;
        unsigned int            fourcc;
        struct v4l2_rect        rect;
@@ -636,10 +637,7 @@ static int coda_g_fmt(struct file *file, void *priv,
        f->fmt.pix.pixelformat  = q_data->fourcc;
        f->fmt.pix.width        = q_data->width;
        f->fmt.pix.height       = q_data->height;
-       if (coda_format_is_yuv(f->fmt.pix.pixelformat))
-               f->fmt.pix.bytesperline = round_up(f->fmt.pix.width, 2);
-       else /* encoded formats h.264/mpeg4 */
-               f->fmt.pix.bytesperline = 0;
+       f->fmt.pix.bytesperline = q_data->bytesperline;
 
        f->fmt.pix.sizeimage    = q_data->sizeimage;
        f->fmt.pix.colorspace   = ctx->colorspace;
@@ -787,6 +785,7 @@ static int coda_s_fmt(struct coda_ctx *ctx, struct v4l2_format *f)
        q_data->fourcc = f->fmt.pix.pixelformat;
        q_data->width = f->fmt.pix.width;
        q_data->height = f->fmt.pix.height;
+       q_data->bytesperline = f->fmt.pix.bytesperline;
        q_data->sizeimage = f->fmt.pix.sizeimage;
        q_data->rect.left = 0;
        q_data->rect.top = 0;
@@ -1347,14 +1346,16 @@ static void coda_prepare_encode(struct coda_ctx *ctx)
        switch (q_data_src->fourcc) {
        case V4L2_PIX_FMT_YVU420:
                /* Switch Cb and Cr for YVU420 format */
-               picture_cr = picture_y + q_data_src->width * q_data_src->height;
-               picture_cb = picture_cr + q_data_src->width / 2 *
+               picture_cr = picture_y + q_data_src->bytesperline *
+                               q_data_src->height;
+               picture_cb = picture_cr + q_data_src->bytesperline / 2 *
                                q_data_src->height / 2;
                break;
        case V4L2_PIX_FMT_YUV420:
        default:
-               picture_cb = picture_y + q_data_src->width * q_data_src->height;
-               picture_cr = picture_cb + q_data_src->width / 2 *
+               picture_cb = picture_y + q_data_src->bytesperline *
+                               q_data_src->height;
+               picture_cr = picture_cb + q_data_src->bytesperline / 2 *
                                q_data_src->height / 2;
                break;
        }
@@ -1596,9 +1597,11 @@ static void set_default_params(struct coda_ctx *ctx)
        ctx->q_data[V4L2_M2M_DST].fourcc = ctx->codec->dst_fourcc;
        ctx->q_data[V4L2_M2M_SRC].width = max_w;
        ctx->q_data[V4L2_M2M_SRC].height = max_h;
+       ctx->q_data[V4L2_M2M_SRC].bytesperline = max_w;
        ctx->q_data[V4L2_M2M_SRC].sizeimage = (max_w * max_h * 3) / 2;
        ctx->q_data[V4L2_M2M_DST].width = max_w;
        ctx->q_data[V4L2_M2M_DST].height = max_h;
+       ctx->q_data[V4L2_M2M_DST].bytesperline = 0;
        ctx->q_data[V4L2_M2M_DST].sizeimage = CODA_MAX_FRAME_SIZE;
        ctx->q_data[V4L2_M2M_SRC].rect.width = max_w;
        ctx->q_data[V4L2_M2M_SRC].rect.height = max_h;
@@ -2533,10 +2536,12 @@ static int coda_start_encoding(struct coda_ctx *ctx)
        }
 
        coda_write(dev, ctx->num_internal_frames, CODA_CMD_SET_FRAME_BUF_NUM);
-       coda_write(dev, round_up(q_data_src->width, 8), CODA_CMD_SET_FRAME_BUF_STRIDE);
-       if (dev->devtype->product == CODA_7541)
-               coda_write(dev, round_up(q_data_src->width, 8),
+       coda_write(dev, q_data_src->bytesperline,
+                       CODA_CMD_SET_FRAME_BUF_STRIDE);
+       if (dev->devtype->product == CODA_7541) {
+               coda_write(dev, q_data_src->bytesperline,
                                CODA7_CMD_SET_FRAME_SOURCE_BUF_STRIDE);
+       }
        if (dev->devtype->product != CODA_DX6) {
                coda_write(dev, ctx->iram_info.buf_bit_use,
                                CODA7_CMD_SET_FRAME_AXI_BIT_ADDR);