From 446693d0b9aad6553dce2f31a8a96ca613f37035 Mon Sep 17 00:00:00 2001 From: Gaviraju Doddabettahalli Bettegowda Date: Tue, 7 Sep 2021 14:43:43 +0530 Subject: [PATCH] msm: vidc: update VP9 level ranges Added changes to update decoder VP9 level ranges According to the platform specific. Change-Id: Ie0115bf255fa2edc2ebed047d095e086cb18b3e0 --- msm/vidc/msm_vidc_common.c | 3 +++ msm/vidc/msm_vidc_platform.c | 50 ++++++++++++++++++++++++++++-------- msm/vidc/vidc_hfi_api.h | 1 + 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c index b8a97f53c778..32cd6f6a1f04 100644 --- a/msm/vidc/msm_vidc_common.c +++ b/msm/vidc/msm_vidc_common.c @@ -1407,6 +1407,9 @@ static void msm_vidc_comm_update_ctrl_limits(struct msm_vidc_inst *inst) msm_vidc_comm_update_ctrl(inst, V4L2_CID_MPEG_VIDEO_HEVC_LEVEL, &inst->capability.cap[CAP_HEVC_LEVEL]); + msm_vidc_comm_update_ctrl(inst, + V4L2_CID_MPEG_VIDC_VIDEO_VP9_LEVEL, + &inst->capability.cap[CAP_VP9_LEVEL]); /* * Default value of level is unknown, but since we are not * using unknown value while updating level controls, we need diff --git a/msm/vidc/msm_vidc_platform.c b/msm/vidc/msm_vidc_platform.c index ecc6d3ca781f..1abab9cf22bc 100644 --- a/msm/vidc/msm_vidc_platform.c +++ b/msm/vidc/msm_vidc_platform.c @@ -203,13 +203,16 @@ static struct msm_vidc_codec_capability bengal_capabilities_v0[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_1}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5}, }; static struct msm_vidc_codec_capability bengal_capabilities_v1[] = { @@ -270,13 +273,16 @@ static struct msm_vidc_codec_capability bengal_capabilities_v1[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_1}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5}, }; static struct msm_vidc_codec_capability holi_capabilities[] = { @@ -339,13 +345,16 @@ static struct msm_vidc_codec_capability holi_capabilities[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_1}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5}, }; static struct msm_vidc_codec_capability scuba_capabilities[] = { @@ -408,13 +417,16 @@ static struct msm_vidc_codec_capability scuba_capabilities[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_0, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_1}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5}, }; static struct msm_vidc_codec_capability lahaina_capabilities[] = { @@ -518,13 +530,16 @@ static struct msm_vidc_codec_capability lahaina_capabilities[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_6, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_6}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_6_1, 1, V4L2_MPEG_VIDEO_H264_LEVEL_5_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51}, }; static struct msm_vidc_codec_capability yupik_capabilities_v0[] = { @@ -633,13 +648,16 @@ static struct msm_vidc_codec_capability yupik_capabilities_v0[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_2, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51}, }; static struct msm_vidc_codec_capability yupik_capabilities_v1[] = { @@ -741,13 +759,16 @@ static struct msm_vidc_codec_capability yupik_capabilities_v1[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_2, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_5}, }; static struct msm_vidc_codec_capability shima_capabilities_v0[] = { @@ -854,13 +875,16 @@ static struct msm_vidc_codec_capability shima_capabilities_v0[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_6_0, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_6, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51}, }; static struct msm_vidc_codec_capability shima_capabilities_v1[] = { @@ -961,13 +985,16 @@ static struct msm_vidc_codec_capability shima_capabilities_v1[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_2, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51}, }; static struct msm_vidc_codec_capability shima_capabilities_v2[] = { @@ -1067,13 +1094,16 @@ static struct msm_vidc_codec_capability shima_capabilities_v2[] = { V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, - /* Level for AVC and HEVC decoder specific */ + /* Level for AVC, HEVC and VP9 decoder specific */ {CAP_H264_LEVEL, DEC, H264, V4L2_MPEG_VIDEO_H264_LEVEL_1_0, V4L2_MPEG_VIDEO_H264_LEVEL_5_1, 1, V4L2_MPEG_VIDEO_H264_LEVEL_4_0}, {CAP_HEVC_LEVEL, DEC, HEVC, V4L2_MPEG_VIDEO_HEVC_LEVEL_1, V4L2_MPEG_VIDEO_HEVC_LEVEL_5, 1, V4L2_MPEG_VIDEO_HEVC_LEVEL_4}, + {CAP_VP9_LEVEL, DEC, VP9, V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_UNUSED, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51, 1, + V4L2_MPEG_VIDC_VIDEO_VP9_LEVEL_51}, }; /* Generally Iris2 VPSS only support 8 multiple encoding if diff --git a/msm/vidc/vidc_hfi_api.h b/msm/vidc/vidc_hfi_api.h index 230c217d3db6..069185c1b0d8 100644 --- a/msm/vidc/vidc_hfi_api.h +++ b/msm/vidc/vidc_hfi_api.h @@ -257,6 +257,7 @@ enum hal_capability { CAP_HEIC_IMAGE_FRAME_HEIGHT, CAP_H264_LEVEL, CAP_HEVC_LEVEL, + CAP_VP9_LEVEL, CAP_MAX, };