media: vicodec: fix wrong sizeimage
authorHans Verkuil <hverkuil@xs4all.nl>
Sat, 1 Sep 2018 12:38:07 +0000 (08:38 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Tue, 11 Sep 2018 12:38:12 +0000 (08:38 -0400)
The initial sizeimage for the compressed decoder output was wrong.
The size of the output was incorrectly used to calculate the image
size, that should have been the size of the capture.

Rework the code to fix this.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/vicodec/vicodec-core.c

index fdd77441a47b78fc86f47a70630b643da4eee4ea..47e9ad0941ab5636d6f568e2cc10c0f2101bb0fd 100644 (file)
@@ -1186,23 +1186,28 @@ static int vicodec_open(struct file *file)
        ctx->q_data[V4L2_M2M_SRC].height = 720;
        size = 1280 * 720 * ctx->q_data[V4L2_M2M_SRC].info->sizeimage_mult /
                ctx->q_data[V4L2_M2M_SRC].info->sizeimage_div;
-       ctx->q_data[V4L2_M2M_SRC].sizeimage = size;
+       if (ctx->is_enc)
+               ctx->q_data[V4L2_M2M_SRC].sizeimage = size;
+       else
+               ctx->q_data[V4L2_M2M_SRC].sizeimage =
+                       size + sizeof(struct fwht_cframe_hdr);
        ctx->q_data[V4L2_M2M_DST] = ctx->q_data[V4L2_M2M_SRC];
        ctx->q_data[V4L2_M2M_DST].info =
                ctx->is_enc ? &pixfmt_fwht : v4l2_fwht_get_pixfmt(0);
        size = 1280 * 720 * ctx->q_data[V4L2_M2M_DST].info->sizeimage_mult /
                ctx->q_data[V4L2_M2M_DST].info->sizeimage_div;
-       ctx->q_data[V4L2_M2M_DST].sizeimage = size;
+       if (ctx->is_enc)
+               ctx->q_data[V4L2_M2M_DST].sizeimage =
+                       size + sizeof(struct fwht_cframe_hdr);
+       else
+               ctx->q_data[V4L2_M2M_DST].sizeimage = size;
        ctx->state.colorspace = V4L2_COLORSPACE_REC709;
 
-       size += sizeof(struct fwht_cframe_hdr);
        if (ctx->is_enc) {
-               ctx->q_data[V4L2_M2M_DST].sizeimage = size;
                ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->enc_dev, ctx,
                                                    &queue_init);
                ctx->lock = &dev->enc_lock;
        } else {
-               ctx->q_data[V4L2_M2M_SRC].sizeimage = size;
                ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->dec_dev, ctx,
                                                    &queue_init);
                ctx->lock = &dev->dec_lock;