media: mediatek: vcodec: Fix bitstream crop information error
authorIrui Wang <irui.wang@mediatek.com>
Wed, 20 Jul 2022 08:57:30 +0000 (10:57 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Tue, 30 Aug 2022 12:32:09 +0000 (14:32 +0200)
Usually, the real bitstream width and height will set to driver
by vidioc_s_fmt, and vidioc_try_fmt() does align to get the
buffer width and height, driver calculate the encoded bitstream
crop information through them. The aligned resolution will be set
as real resolution now if user didn't set crop info by
V4L2_SEL_TGT_CROP, and the encoded bitstream may exist green line
because of crop information error.

Fixs: 'b6c57d313f5f8 ("media: mtk-vcodec: venc: remove redundant code")'

Signed-off-by: Irui Wang <irui.wang@mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c

index 25e81686359752e349940edf06aad92f3d588d2e..c310bb1dbbcfcff1f5024dfcd665f0338abb0421 100644 (file)
@@ -503,13 +503,13 @@ static int vidioc_venc_s_fmt_out(struct file *file, void *priv,
                f->fmt.pix.pixelformat = fmt->fourcc;
        }
 
-       ret = vidioc_try_fmt_out(ctx, f, fmt);
+       q_data->visible_width = f->fmt.pix_mp.width;
+       q_data->visible_height = f->fmt.pix_mp.height;
+       q_data->fmt = fmt;
+       ret = vidioc_try_fmt_out(ctx, f, q_data->fmt);
        if (ret)
                return ret;
 
-       q_data->fmt = fmt;
-       q_data->visible_width = f->fmt.pix_mp.width;
-       q_data->visible_height = f->fmt.pix_mp.height;
        q_data->coded_width = f->fmt.pix_mp.width;
        q_data->coded_height = f->fmt.pix_mp.height;