media: mediatek: vcodec: decoder: Fix 4K frame size enumeration
authorChen-Yu Tsai <wenst@chromium.org>
Wed, 6 Jul 2022 08:21:34 +0000 (09:21 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 8 Jul 2022 17:06:56 +0000 (18:06 +0100)
This partially reverts commit b018be06f3c7 ("media: mediatek: vcodec:
Read max resolution from dec_capability"). In this commit, the maximum
resolution ended up being a function of both the firmware capability and
the current set format.

However, frame size enumeration for output (coded) formats should not
depend on the format set, but should return supported resolutions for
the format requested by userspace.

Fix this so that the driver returns the supported resolutions correctly,
even if the instance only has default settings, or if the output format
is currently set to VP8F, which does not support 4K.

This adds an copy of special casing for !VP8 and 4K support. The other
existing copy will be removed when .max_{width,height} are removed from
|struct mtk_vcodec_ctx| in a subsequent patch.

Fixes: b018be06f3c7 ("media: mediatek: vcodec: Read max resolution from dec_capability")
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.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_dec.c
drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateless.c

index 5d6fdf18c3a65eaead631b7b8b113d57e7b5fdfc..fcb4b8131c497fcabece8786d58ede41d7972d7d 100644 (file)
@@ -595,8 +595,6 @@ static int vidioc_enum_framesizes(struct file *file, void *priv,
                fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
                fsize->stepwise = dec_pdata->vdec_framesizes[i].stepwise;
 
-               fsize->stepwise.max_width = ctx->max_width;
-               fsize->stepwise.max_height = ctx->max_height;
                mtk_v4l2_debug(1, "%x, %d %d %d %d %d %d",
                                ctx->dev->dec_capability,
                                fsize->stepwise.min_width,
index f1c0276c9026c2ded69543ff7d55eada1095cbe5..5da9901e93a34874a56154d1ab90793f902fde80 100644 (file)
@@ -360,6 +360,13 @@ static void mtk_vcodec_add_formats(unsigned int fourcc,
 
                mtk_vdec_framesizes[count_framesizes].fourcc = fourcc;
                mtk_vdec_framesizes[count_framesizes].stepwise = stepwise_fhd;
+               if (!(ctx->dev->dec_capability & VCODEC_CAPABILITY_4K_DISABLED) &&
+                   fourcc != V4L2_PIX_FMT_VP8_FRAME) {
+                       mtk_vdec_framesizes[count_framesizes].stepwise.max_width =
+                               VCODEC_DEC_4K_CODED_WIDTH;
+                       mtk_vdec_framesizes[count_framesizes].stepwise.max_height =
+                               VCODEC_DEC_4K_CODED_HEIGHT;
+               }
                num_framesizes++;
                break;
        case V4L2_PIX_FMT_MM21: