diff --git a/driver/platform/kalama/src/msm_vidc_kalama.c b/driver/platform/kalama/src/msm_vidc_kalama.c index d04f32ccdc..51e5e386cd 100644 --- a/driver/platform/kalama/src/msm_vidc_kalama.c +++ b/driver/platform/kalama/src/msm_vidc_kalama.c @@ -478,21 +478,12 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { {0}, msm_vidc_adjust_b_frame, msm_vidc_set_u32}, - {BLUR_TYPES, ENC, CODECS_ALL, - VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_ADAPTIVE, - V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES, - HFI_PROP_BLUR_TYPES, - CAP_FLAG_OUTPUT_PORT, - {PIX_FMTS, BITRATE_MODE, CONTENT_ADAPTIVE_CODING}, - {BLUR_RESOLUTION}, - msm_vidc_adjust_blur_type, msm_vidc_set_u32_enum}, - {BLUR_TYPES, ENC, H264|HEVC, VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_ADAPTIVE, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES, HFI_PROP_BLUR_TYPES, CAP_FLAG_OUTPUT_PORT, - {PIX_FMTS, BITRATE_MODE, CONTENT_ADAPTIVE_CODING, MIN_QUALITY}, + {PIX_FMTS, BITRATE_MODE, MIN_QUALITY}, {BLUR_RESOLUTION}, msm_vidc_adjust_blur_type, msm_vidc_set_u32_enum}, @@ -608,7 +599,7 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { HFI_PROP_CONTENT_ADAPTIVE_CODING, CAP_FLAG_OUTPUT_PORT, {BITRATE_MODE, MIN_QUALITY}, - {BLUR_TYPES}, + {0}, msm_vidc_adjust_cac, msm_vidc_set_vbr_related_properties}, @@ -644,7 +635,7 @@ static struct msm_platform_inst_capability instance_data_kalama[] = { msm_vidc_set_vbr_related_properties}, {VBV_DELAY, ENC, H264|HEVC, - 200, 300, 100, 300, + 100, 300, 100, 300, V4L2_CID_MPEG_VIDEO_VBV_DELAY, HFI_PROP_VBV_DELAY, CAP_FLAG_OUTPUT_PORT, diff --git a/driver/platform/waipio/inc/msm_vidc_waipio.h b/driver/platform/waipio/inc/msm_vidc_waipio.h index e934c144cb..bfea9a97e3 100644 --- a/driver/platform/waipio/inc/msm_vidc_waipio.h +++ b/driver/platform/waipio/inc/msm_vidc_waipio.h @@ -7,6 +7,9 @@ #define _MSM_VIDC_WAIPIO_H_ #include "msm_vidc_core.h" +#if defined(CONFIG_MSM_VIDC_IRIS2) +#include "msm_vidc_iris2.h" +#endif #if defined(CONFIG_MSM_VIDC_WAIPIO) int msm_vidc_init_platform_waipio(struct msm_vidc_core *core, struct device *dev); diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index 84ce225aaa..0c19f9fb3b 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -467,15 +467,6 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { {ALL_INTRA}, msm_vidc_adjust_b_frame, msm_vidc_set_u32}, - {BLUR_TYPES, ENC, CODECS_ALL, - VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_ADAPTIVE, - V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES, - HFI_PROP_BLUR_TYPES, - CAP_FLAG_OUTPUT_PORT, - {PIX_FMTS, BITRATE_MODE, CONTENT_ADAPTIVE_CODING}, - {BLUR_RESOLUTION}, - msm_vidc_adjust_blur_type, msm_vidc_set_u32_enum}, - {BLUR_TYPES, ENC, H264|HEVC, VIDC_BLUR_NONE, VIDC_BLUR_ADAPTIVE, 1, VIDC_BLUR_ADAPTIVE, V4L2_CID_MPEG_VIDC_VIDEO_BLUR_TYPES, @@ -483,7 +474,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { CAP_FLAG_OUTPUT_PORT, {PIX_FMTS, BITRATE_MODE, CONTENT_ADAPTIVE_CODING, MIN_QUALITY}, {BLUR_RESOLUTION}, - msm_vidc_adjust_blur_type, msm_vidc_set_u32_enum}, + msm_vidc_adjust_blur_type_iris2, msm_vidc_set_u32_enum}, {BLUR_RESOLUTION, ENC, CODECS_ALL, 0, S32_MAX, 1, 0, diff --git a/driver/variant/iris2/inc/msm_vidc_iris2.h b/driver/variant/iris2/inc/msm_vidc_iris2.h index 1d0ee44d91..dd6034cba7 100644 --- a/driver/variant/iris2/inc/msm_vidc_iris2.h +++ b/driver/variant/iris2/inc/msm_vidc_iris2.h @@ -11,6 +11,7 @@ #if defined(CONFIG_MSM_VIDC_IRIS2) int msm_vidc_init_iris2(struct msm_vidc_core *core); int msm_vidc_deinit_iris2(struct msm_vidc_core *core); +int msm_vidc_adjust_blur_type_iris2(void *instance, struct v4l2_ctrl *ctrl); #else static inline int msm_vidc_init_iris2(struct msm_vidc_core *core) { @@ -20,6 +21,10 @@ static inline int msm_vidc_deinit_iris2(struct msm_vidc_core *core) { return -EINVAL; } +static inline int msm_vidc_adjust_blur_type_iris2(void *instance, struct v4l2_ctrl *ctrl) +{ + return -EINVAL; +} #endif #endif // _MSM_VIDC_IRIS2_H_ diff --git a/driver/variant/iris2/src/msm_vidc_iris2.c b/driver/variant/iris2/src/msm_vidc_iris2.c index 29a59e368b..07690dbe24 100644 --- a/driver/variant/iris2/src/msm_vidc_iris2.c +++ b/driver/variant/iris2/src/msm_vidc_iris2.c @@ -2,7 +2,6 @@ /* * Copyright (c) 2020-2021,, The Linux Foundation. All rights reserved. */ - #include "msm_vidc_iris2.h" #include "msm_vidc_buffer_iris2.h" #include "msm_vidc_power_iris2.h" @@ -15,6 +14,7 @@ #include "msm_vidc_internal.h" #include "msm_vidc_buffer.h" #include "msm_vidc_debug.h" +#include "msm_vidc_control.h" #define VIDEO_ARCH_LX 1 @@ -1079,6 +1079,56 @@ exit: return 0; } +int msm_vidc_adjust_blur_type_iris2(void *instance, struct v4l2_ctrl *ctrl) +{ + struct msm_vidc_inst_capability *capability; + s32 adjusted_value; + struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance; + s32 rc_type = -1, cac = -1; + s32 pix_fmts = -1, min_quality = -1; + + if (!inst || !inst->capabilities) { + d_vpr_e("%s: invalid params\n", __func__); + return -EINVAL; + } + + capability = inst->capabilities; + + adjusted_value = ctrl ? ctrl->val : + capability->cap[BLUR_TYPES].value; + + if (adjusted_value == VIDC_BLUR_NONE) + return 0; + + if (msm_vidc_get_parent_value(inst, BLUR_TYPES, BITRATE_MODE, + &rc_type, __func__) || + msm_vidc_get_parent_value(inst, BLUR_TYPES, + CONTENT_ADAPTIVE_CODING, &cac, __func__) || + msm_vidc_get_parent_value(inst, BLUR_TYPES, PIX_FMTS, + &pix_fmts, __func__) || + msm_vidc_get_parent_value(inst, BLUR_TYPES, MIN_QUALITY, + &min_quality, __func__)) + return -EINVAL; + + if (adjusted_value == VIDC_BLUR_EXTERNAL) { + if (is_scaling_enabled(inst) || min_quality) { + adjusted_value = VIDC_BLUR_NONE; + } + } else if (adjusted_value == VIDC_BLUR_ADAPTIVE) { + if (is_scaling_enabled(inst) || min_quality || + (rc_type != HFI_RC_VBR_CFR) || + !cac || + is_10bit_colorformat(pix_fmts)) { + adjusted_value = VIDC_BLUR_NONE; + } + } + + msm_vidc_update_cap_value(inst, BLUR_TYPES, + adjusted_value, __func__); + + return 0; +} + int msm_vidc_decide_quality_mode_iris2(struct msm_vidc_inst* inst) { struct msm_vidc_inst_capability* capability = NULL; diff --git a/driver/vidc/inc/msm_vidc_control.h b/driver/vidc/inc/msm_vidc_control.h index d85577fd10..60dc8b7a79 100644 --- a/driver/vidc/inc/msm_vidc_control.h +++ b/driver/vidc/inc/msm_vidc_control.h @@ -116,5 +116,6 @@ int msm_vidc_v4l2_to_hfi_enum(struct msm_vidc_inst *inst, enum msm_vidc_inst_capability_type cap_id, u32 *value); int msm_vidc_update_cap_value(struct msm_vidc_inst *inst, u32 cap, s32 adjusted_val, const char *func); - +int msm_vidc_get_parent_value(struct msm_vidc_inst* inst, u32 cap, u32 parent, + s32 *value, const char *func); #endif diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index 2547ab1946..eb426efe27 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -365,7 +365,7 @@ int msm_vidc_update_cap_value(struct msm_vidc_inst *inst, u32 cap, return 0; } -static int msm_vidc_get_parent_value(struct msm_vidc_inst* inst, +int msm_vidc_get_parent_value(struct msm_vidc_inst* inst, u32 cap, u32 parent, s32 *value, const char *func) { int rc = 0; @@ -2031,7 +2031,7 @@ int msm_vidc_adjust_blur_type(void *instance, struct v4l2_ctrl *ctrl) struct msm_vidc_inst_capability *capability; s32 adjusted_value; struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance; - s32 rc_type = -1, cac = -1; + s32 rc_type = -1; s32 pix_fmts = -1, min_quality = -1; if (!inst || !inst->capabilities) { @@ -2048,8 +2048,6 @@ int msm_vidc_adjust_blur_type(void *instance, struct v4l2_ctrl *ctrl) if (msm_vidc_get_parent_value(inst, BLUR_TYPES, BITRATE_MODE, &rc_type, __func__) || - msm_vidc_get_parent_value(inst, BLUR_TYPES, - CONTENT_ADAPTIVE_CODING, &cac, __func__) || msm_vidc_get_parent_value(inst, BLUR_TYPES, PIX_FMTS, &pix_fmts, __func__) || msm_vidc_get_parent_value(inst, BLUR_TYPES, MIN_QUALITY, @@ -2062,8 +2060,10 @@ int msm_vidc_adjust_blur_type(void *instance, struct v4l2_ctrl *ctrl) } } else if (adjusted_value == VIDC_BLUR_ADAPTIVE) { if (is_scaling_enabled(inst) || min_quality || - (rc_type != HFI_RC_VBR_CFR) || - !cac || is_10bit_colorformat(pix_fmts)) { + (rc_type != HFI_RC_VBR_CFR && + rc_type != HFI_RC_CBR_CFR && + rc_type != HFI_RC_CBR_VFR) || + is_10bit_colorformat(pix_fmts)) { adjusted_value = VIDC_BLUR_NONE; } }