]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
media: mediatek: vcodec: Use 4K frame size when supported by stateful decoder
authorPin-yen Lin <treapking@chromium.org>
Tue, 14 Mar 2023 10:22:41 +0000 (10:22 +0000)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 7 Jul 2023 10:16:52 +0000 (12:16 +0200)
BugLink: https://bugs.launchpad.net/bugs/2025067
[ Upstream commit e25528e1dbe52784ac250071653104a8adc848e2 ]

After commit b018be06f3c7 ("media: mediatek: vcodec: Read max resolution
from dec_capability"), the stateful video decoder driver never really
sets its output frame size to 4K.

Parse the decoder capability reported by the firmware, and update the
output frame size in mtk_init_vdec_params to enable 4K frame size when
available.

Fixes: b018be06f3c7 ("media: mediatek: vcodec: Read max resolution from dec_capability")
Signed-off-by: Pin-yen Lin <treapking@chromium.org>
Reviewed-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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec_stateful.c

index 035c86e7809fd77ffcaafe0dada4bf12d2249f05..29991551cf6140671e486490ff648871b0860250 100644 (file)
@@ -11,7 +11,7 @@
 #include "mtk_vcodec_dec_pm.h"
 #include "vdec_drv_if.h"
 
-static const struct mtk_video_fmt mtk_video_formats[] = {
+static struct mtk_video_fmt mtk_video_formats[] = {
        {
                .fourcc = V4L2_PIX_FMT_H264,
                .type = MTK_FMT_DEC,
@@ -580,6 +580,16 @@ static int mtk_vcodec_dec_ctrls_setup(struct mtk_vcodec_ctx *ctx)
 
 static void mtk_init_vdec_params(struct mtk_vcodec_ctx *ctx)
 {
+       unsigned int i;
+
+       if (!(ctx->dev->dec_capability & VCODEC_CAPABILITY_4K_DISABLED)) {
+               for (i = 0; i < num_supported_formats; i++) {
+                       mtk_video_formats[i].frmsize.max_width =
+                               VCODEC_DEC_4K_CODED_WIDTH;
+                       mtk_video_formats[i].frmsize.max_height =
+                               VCODEC_DEC_4K_CODED_HEIGHT;
+               }
+       }
 }
 
 static struct vb2_ops mtk_vdec_frame_vb2_ops = {