Re: [PATCH v7 06/10] media: mediatek: vcodec: Add VP9 Probability Size Configuration
From: Kyrie Wu (吴晗) <hidden>
Date: 2026-01-28 07:15:10
Also in:
linux-arm-kernel, linux-media, linux-mediatek, lkml
On Tue, 2026-01-27 at 13:07 +0100, AngeloGioacchino Del Regno wrote:
Il 27/01/26 03:42, Kyrie Wu ha scritto:quoted
This commit introduces support for configuring the VP9 decoder probability buffer size. It removes hard-coded values and ensures chipset-specific buffer sizes are handled dynamically, improving maintainability and alignment.Depending on how you see it, the buffer sizes are still static, as those are defined in const structures and never change during the entire driver life. Also, never start a commit description with "this commit" - as it's implicit that you're describing ... this commit. Moreover, the hardcoded values are not removed - they're just hardcoded in a different way - as in, they are now hardcoded as a possibly different value for each decoder. A better description would be: Introduce support for using different probability buffer sizes for different stateless decoders: in particular, the VP9 decoder can use a different size on different SoCs because of different hardware capabilities. Move the hardcoded single probability buffer size value to decoder params, introduce a new VP9_4K_PROB_BUF_SIZE and assign: - VP9_PROB_BUF_SIZE (2560 lines) to legacy SoCs; and - VP9_PROB_BUF_SIZE (3840 lines) to newer SoCs (MT8196, MT8189). After which... Reviewed-by: AngeloGioacchino Del Regno < angelogioacchino.delregno@collabora.com>
Dear Angelo, Thanks for your suggestion, I will upgrade this patch in the next version. Thanks a lot. Regards, Kyrie.
quoted
Signed-off-by: Kyrie Wu <redacted> --- .../mediatek/vcodec/decoder/mtk_vcodec_dec_drv.h | 2 ++ .../mediatek/vcodec/decoder/mtk_vcodec_dec_stateful.c | 1 + .../mediatek/vcodec/decoder/mtk_vcodec_dec_stateless.c | 10 ++++++++++ .../mediatek/vcodec/decoder/vdec/vdec_vp9_req_lat_if.c | 4 ++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv .h b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv .h index f38b5dc4bb74..08cc65054de5 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv .h +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv .h@@ -80,10 +80,12 @@ struct vdec_pic_info { * struct mtk_vcodec_dec_params - decoder supported parameters * @level: decoder supported vcodec level * @profile: decoder supported vcodec profile + * @prob_size: vp9 decoder probability size */ struct mtk_vcodec_dec_params { s64 level; s64 profile; + size_t prob_size; }; /**diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teful.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teful.c index a47906b9d717..99c252e0a2e1 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teful.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teful.c@@ -630,5 +630,6 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8173_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_4_0, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_1, + .prob_size = 2560, }, }; diff --git a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teless.c b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teless.c index b571c4ed3f79..ca39ae3571a3 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teless.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_sta teless.c@@ -10,6 +10,9 @@ #include "mtk_vcodec_dec_pm.h" #include "vdec_drv_if.h" +#define VP9_PROB_BUF_SIZE 2560 +#define VP9_4K_PROB_BUF_SIZE 3840 + /** * struct mtk_stateless_control - CID control type * @cfg: control configuration@@ -841,6 +844,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8183_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_4_0, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_1, + .prob_size = VP9_PROB_BUF_SIZE, }, };@@ -892,6 +896,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8188_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_5_1, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_2, + .prob_size = VP9_PROB_BUF_SIZE, }, };@@ -910,6 +915,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8192_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_5_1, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_1, + .prob_size = VP9_PROB_BUF_SIZE, }, };@@ -928,6 +934,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8195_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_5_2, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_2, + .prob_size = VP9_PROB_BUF_SIZE, }, };@@ -946,6 +953,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8196_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_5_2, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_2, + .prob_size = VP9_4K_PROB_BUF_SIZE, }, };@@ -981,6 +989,7 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8186_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_4_1, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_1, + .prob_size = VP9_PROB_BUF_SIZE, }, };@@ -1011,5 +1020,6 @@ const struct mtk_vcodec_dec_pdatamtk_vdec_8189_pdata = { .vp9_params = { .level = V4L2_MPEG_VIDEO_VP9_LEVEL_5_2, .profile = V4L2_MPEG_VIDEO_VP9_PROFILE_2, + .prob_size = VP9_4K_PROB_BUF_SIZE, }, }; diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_ lat_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_ lat_if.c index 82e257bd059f..e8ba99d31e74 100644 --- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_ lat_if.c +++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_req_ lat_if.c@@ -22,7 +22,6 @@ #define VP9_RESET_FRAME_CONTEXT_ALL 3 #define VP9_TILE_BUF_SIZE 4096 -#define VP9_PROB_BUF_SIZE 2560 #define VP9_COUNTS_BUF_SIZE 16384 #define HDR_FLAG(x) (!!((hdr)->flags & V4L2_VP9_FRAME_FLAG_##x))@@ -546,6 +545,7 @@ static intvdec_vp9_slice_alloc_working_buffer(struct vdec_vp9_slice_instance *i struct vdec_vp9_slice_vsi *vsi) { struct mtk_vcodec_dec_ctx *ctx = instance->ctx; + struct mtk_vcodec_dec_dev *pdev = ctx->dev; enum vdec_vp9_slice_resolution_level level; /* super blocks */ unsigned int max_sb_w;@@ -616,7 +616,7 @@ static intvdec_vp9_slice_alloc_working_buffer(struct vdec_vp9_slice_instance *i } if (!instance->prob.va) { - instance->prob.size = VP9_PROB_BUF_SIZE; + instance->prob.size = pdev->vdec_pdata-quoted
vp9_params.prob_size;if (mtk_vcodec_mem_alloc(ctx, &instance->prob)) goto err; }