diff --git a/driver/platform/kalama/src/msm_vidc_kalama.c b/driver/platform/kalama/src/msm_vidc_kalama.c index cafaf8e8f3..722717f59a 100644 --- a/driver/platform/kalama/src/msm_vidc_kalama.c +++ b/driver/platform/kalama/src/msm_vidc_kalama.c @@ -1491,6 +1491,18 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { 0, HFI_PROP_AV1_SUPER_BLOCK_ENABLED}, + {META_BITSTREAM_RESOLUTION, DEC, AV1, + V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, + 1, V4L2_MPEG_MSM_VIDC_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_BITSTREAM_RESOLUTION, + HFI_PROP_BITSTREAM_RESOLUTION}, + + {META_CROP_OFFSETS, DEC, AV1, + V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, + 1, V4L2_MPEG_MSM_VIDC_DISABLE, + V4L2_CID_MPEG_VIDC_METADATA_CROP_OFFSETS, + HFI_PROP_CROP_OFFSETS}, + {META_LTR_MARK_USE, ENC, H264|HEVC, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, 1, V4L2_MPEG_MSM_VIDC_DISABLE, diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index ae6ac8c0f0..3d72792bdd 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -114,7 +114,9 @@ static inline bool is_output_meta_enabled(struct msm_vidc_inst *inst) bool enabled = false; if (is_decode_session(inst)) { - enabled = (inst->capabilities->cap[META_DPB_MISR].value || + enabled = (inst->capabilities->cap[META_BITSTREAM_RESOLUTION].value || + inst->capabilities->cap[META_CROP_OFFSETS].value || + inst->capabilities->cap[META_DPB_MISR].value || inst->capabilities->cap[META_OPB_MISR].value || inst->capabilities->cap[META_INTERLACE].value || inst->capabilities->cap[META_CONCEALED_MB_CNT].value || diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index eda6bb5468..401019e60e 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -472,6 +472,8 @@ enum msm_vidc_inst_capability_type { FILM_GRAIN, SUPER_BLOCK, ALL_INTRA, + META_BITSTREAM_RESOLUTION, + META_CROP_OFFSETS, META_LTR_MARK_USE, META_DPB_MISR, META_OPB_MISR, diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 9bf3a354bd..fedeec5346 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -1183,6 +1183,8 @@ static int msm_vdec_subscribe_metadata(struct msm_vidc_inst *inst, u32 i, count = 0; struct msm_vidc_inst_capability *capability; static const u32 metadata_list[] = { + META_BITSTREAM_RESOLUTION, + META_CROP_OFFSETS, META_DPB_MISR, META_OPB_MISR, META_INTERLACE, diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index 7a6366a5b3..b00730e3ee 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -80,7 +80,9 @@ static bool is_meta_ctrl(u32 id) id == V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT || id == V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO || id == V4L2_CID_MPEG_VIDC_METADATA_TIMESTAMP || - id == V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA); + id == V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA || + id == V4L2_CID_MPEG_VIDC_METADATA_BITSTREAM_RESOLUTION || + id == V4L2_CID_MPEG_VIDC_METADATA_CROP_OFFSETS); } static const char *const mpeg_video_rate_control[] = { diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 6008548815..061369dd16 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -168,6 +168,8 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {FILM_GRAIN, "FILM_GRAIN" }, {SUPER_BLOCK, "SUPER_BLOCK" }, {ALL_INTRA, "ALL_INTRA" }, + {META_BITSTREAM_RESOLUTION, "META_BITSTREAM_RESOLUTION" }, + {META_CROP_OFFSETS, "META_CROP_OFFSETS" }, {META_LTR_MARK_USE, "META_LTR_MARK_USE" }, {META_DPB_MISR, "META_DPB_MISR" }, {META_OPB_MISR, "META_OPB_MISR" }, diff --git a/include/uapi/vidc/media/v4l2_vidc_extensions.h b/include/uapi/vidc/media/v4l2_vidc_extensions.h index a3c05a5d14..36f4785168 100644 --- a/include/uapi/vidc/media/v4l2_vidc_extensions.h +++ b/include/uapi/vidc/media/v4l2_vidc_extensions.h @@ -123,6 +123,10 @@ enum v4l2_mpeg_vidc_blur_types { (V4L2_CID_MPEG_VIDC_BASE + 0x22) #define V4L2_CID_MPEG_VIDC_MIN_BITSTREAM_SIZE_OVERWRITE \ (V4L2_CID_MPEG_VIDC_BASE + 0x23) +#define V4L2_CID_MPEG_VIDC_METADATA_BITSTREAM_RESOLUTION \ + (V4L2_CID_MPEG_VIDC_BASE + 0x24) +#define V4L2_CID_MPEG_VIDC_METADATA_CROP_OFFSETS \ + (V4L2_CID_MPEG_VIDC_BASE + 0x25) /* Encoder Super frame control */ #define V4L2_CID_MPEG_VIDC_SUPERFRAME (V4L2_CID_MPEG_VIDC_BASE + 0x28) @@ -296,6 +300,8 @@ struct msm_vidc_metapayload_header { __u32 reserved[3]; }; enum v4l2_mpeg_vidc_metadata { + METADATA_BITSTREAM_RESOLUTION = 0x03000103, + METADATA_CROP_OFFSETS = 0x03000105, METADATA_LTR_MARK_USE_DETAILS = 0x03000137, METADATA_SEQ_HEADER_NAL = 0x0300014a, METADATA_DPB_LUMA_CHROMA_MISR = 0x03000153,