diff --git a/driver/platform/kalama/src/msm_vidc_kalama.c b/driver/platform/kalama/src/msm_vidc_kalama.c index f3ef11a63e..82d67054b5 100644 --- a/driver/platform/kalama/src/msm_vidc_kalama.c +++ b/driver/platform/kalama/src/msm_vidc_kalama.c @@ -400,6 +400,14 @@ static struct msm_platform_inst_capability instance_cap_data_kalama[] = { 1, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR}, + {VUI_TIMING_INFO, ENC, CODECS_ALL, + V4L2_MPEG_MSM_VIDC_DISABLE, + V4L2_MPEG_MSM_VIDC_ENABLE, + 1, V4L2_MPEG_MSM_VIDC_DISABLE, + V4L2_CID_MPEG_VIDC_VUI_TIMING_INFO, + HFI_PROP_DISABLE_VUI_TIMING_INFO, + CAP_FLAG_OUTPUT_PORT}, + {WITHOUT_STARTCODE, ENC, CODECS_ALL, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, @@ -2415,6 +2423,12 @@ static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_kala {SLICE_MODE}, {LOWLATENCY_MODE, OUTPUT_BUF_HOST_MAX_COUNT}, msm_vidc_adjust_delivery_mode, msm_vidc_set_u32}, + + {VUI_TIMING_INFO, ENC, CODECS_ALL, + {0}, + {0}, + NULL, + msm_vidc_set_vui_timing_info}, }; /* Default UBWC config for LPDDR5 */ diff --git a/driver/vidc/inc/hfi_property.h b/driver/vidc/inc/hfi_property.h index e383cbd0b3..f48c39ff64 100644 --- a/driver/vidc/inc/hfi_property.h +++ b/driver/vidc/inc/hfi_property.h @@ -567,6 +567,8 @@ enum hfi_saliency_type { #define HFI_PROP_COMV_BUFFER_COUNT 0x03000193 +#define HFI_PROP_DISABLE_VUI_TIMING_INFO 0x03000194 + #define HFI_PROP_END 0x03FFFFFF #define HFI_SESSION_ERROR_BEGIN 0x04000000 diff --git a/driver/vidc/inc/msm_vidc_control.h b/driver/vidc/inc/msm_vidc_control.h index 100bffc0d1..ef8df444d5 100644 --- a/driver/vidc/inc/msm_vidc_control.h +++ b/driver/vidc/inc/msm_vidc_control.h @@ -137,5 +137,7 @@ int msm_vidc_get_parent_value(struct msm_vidc_inst* inst, u32 cap, u32 parent, s32 *value, const char *func); u32 msm_vidc_get_port_info(struct msm_vidc_inst *inst, enum msm_vidc_inst_capability_type cap_id); +int msm_vidc_set_vui_timing_info(void *instance, + enum msm_vidc_inst_capability_type cap_id); #endif diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index b1ae1813b4..36afe95bb5 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -538,6 +538,7 @@ enum msm_vidc_inst_capability_type { INPUT_BUF_HOST_MAX_COUNT, OUTPUT_BUF_HOST_MAX_COUNT, DELIVERY_MODE, + VUI_TIMING_INFO, /* place all leaf(no child) enums before this line */ INST_CAP_MAX, }; diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index bd68cd1d74..ca5d17fa49 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -4511,3 +4511,33 @@ int msm_vidc_set_pipe(void *instance, return rc; } + +int msm_vidc_set_vui_timing_info(void *instance, + enum msm_vidc_inst_capability_type cap_id) +{ + int rc = 0; + struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance; + u32 hfi_value; + + if (!inst || !inst->capabilities) { + d_vpr_e("%s: invalid params\n", __func__); + return -EINVAL; + } + + /* + * hfi is HFI_PROP_DISABLE_VUI_TIMING_INFO and v4l2 cap is + * V4L2_CID_MPEG_VIDC_VUI_TIMING_INFO and hence reverse + * the hfi_value from cap_id value. + */ + if (inst->capabilities->cap[cap_id].value == V4L2_MPEG_MSM_VIDC_ENABLE) + hfi_value = 0; + else + hfi_value = 1; + + rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, + &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; + + return rc; +} diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 8566db5dfc..ec171c8d90 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -228,6 +228,7 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {INPUT_BUF_HOST_MAX_COUNT, "INPUT_BUF_HOST_MAX_COUNT" }, {OUTPUT_BUF_HOST_MAX_COUNT, "OUTPUT_BUF_HOST_MAX_COUNT" }, {DELIVERY_MODE, "DELIVERY_MODE" }, + {VUI_TIMING_INFO, "VUI_TIMING_INFO" }, {INST_CAP_MAX, "INST_CAP_MAX" }, }; diff --git a/include/uapi/vidc/media/v4l2_vidc_extensions.h b/include/uapi/vidc/media/v4l2_vidc_extensions.h index 17e02d8293..3cdf1accbb 100644 --- a/include/uapi/vidc/media/v4l2_vidc_extensions.h +++ b/include/uapi/vidc/media/v4l2_vidc_extensions.h @@ -271,6 +271,9 @@ enum v4l2_h264_encode_delivery_mode { #define V4L2_CID_MPEG_VIDC_LAST_FLAG_EVENT_ENABLE \ (V4L2_CID_MPEG_VIDC_BASE + 0x42) +#define V4L2_CID_MPEG_VIDC_VUI_TIMING_INFO \ + (V4L2_CID_MPEG_VIDC_BASE + 0x43) + /* add new controls above this line */ /* Deprecate below controls once availble in gki and gsi bionic header */ #ifndef V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID