diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index 19befbff..ca0be7c3 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -881,8 +881,8 @@ typedef struct MppEncH265DblkCfg_t { } MppEncH265DblkCfg_t; typedef struct MppEncH265SaoCfg_t { - RK_U32 slice_sao_luma_flag; - RK_U32 slice_sao_chroma_flag; + RK_U32 slice_sao_luma_disable; + RK_U32 slice_sao_chroma_disable; } MppEncH265SaoCfg; typedef struct MppEncH265TransCfg_t { diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index f17dfa08..138da3ba 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -211,6 +211,8 @@ RK_U32 mpp_enc_cfg_debug = 0; ENTRY(h265, qp_max_i, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_QP_RANGE_I, rc, qp_max_i) \ ENTRY(h265, qp_step, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_QP_MAX_STEP, rc, qp_max_step) \ ENTRY(h265, qp_delta_ip, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_QP_IP, rc, qp_delta_ip) \ + ENTRY(h265, sao_luma_disable, S32, RK_S32, MPP_ENC_H265_CFG_SAO_CHANGE, codec.h265, sao_cfg.slice_sao_luma_disable) \ + ENTRY(h265, sao_chroma_disable, S32, RK_S32, MPP_ENC_H265_CFG_SAO_CHANGE, codec.h265, sao_cfg.slice_sao_chroma_disable) \ /* vp8 config */ \ ENTRY(vp8, qp_init, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_QP_INIT, rc, qp_init) \ ENTRY(vp8, qp_min, S32, RK_S32, MPP_ENC_RC_CFG_CHANGE_QP_RANGE, rc, qp_min) \ @@ -251,7 +253,7 @@ RK_S32 const_strlen(const char* str) return *str ? 1 + const_strlen(str + 1) : 0; } -static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 73; +static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 61; class MppEncCfgService { diff --git a/mpp/codec/enc/h265/h265e_api.c b/mpp/codec/enc/h265/h265e_api.c index 909f9f1e..f980fb06 100644 --- a/mpp/codec/enc/h265/h265e_api.c +++ b/mpp/codec/enc/h265/h265e_api.c @@ -95,8 +95,8 @@ static MPP_RET h265e_init(void *ctx, EncImplCfg *ctrlCfg) h265->slice_cfg.split_enable = 0; h265->entropy_cfg.cabac_init_flag = 1; - h265->sao_cfg.slice_sao_chroma_flag = 1; - h265->sao_cfg.slice_sao_luma_flag = 1; + h265->sao_cfg.slice_sao_chroma_disable = 0; + h265->sao_cfg.slice_sao_luma_disable = 0; h265->dblk_cfg.slice_deblocking_filter_disabled_flag = 0; h265->cu_cfg.strong_intra_smoothing_enabled_flag = 1; h265->merge_cfg.max_mrg_cnd = 2; @@ -434,6 +434,10 @@ static MPP_RET h265e_proc_h265_cfg(MppEncH265Cfg *dst, MppEncH265Cfg *src) memcpy(&dst->vui, &src->vui, sizeof(src->vui)); } + if (change & MPP_ENC_H265_CFG_SAO_CHANGE) { + memcpy(&dst->sao_cfg, &src->sao_cfg, sizeof(src->sao_cfg)); + } + /* * NOTE: use OR here for avoiding overwrite on multiple config * When next encoding is trigger the change flag will be clear diff --git a/mpp/codec/enc/h265/h265e_slice.c b/mpp/codec/enc/h265/h265e_slice.c index af756821..35a67032 100644 --- a/mpp/codec/enc/h265/h265e_slice.c +++ b/mpp/codec/enc/h265/h265e_slice.c @@ -255,8 +255,8 @@ void h265e_slice_init(void *ctx, EncFrmStatus curr) slice->m_deblockingFilterBetaOffsetDiv2 = pps->m_deblockingFilterBetaOffsetDiv2; slice->m_deblockingFilterTcOffsetDiv2 = pps->m_deblockingFilterTcOffsetDiv2; } - slice->m_saoEnabledFlag = codec->sao_cfg.slice_sao_luma_flag; - slice->m_saoEnabledFlagChroma = codec->sao_cfg.slice_sao_chroma_flag; + slice->m_saoEnabledFlag = !codec->sao_cfg.slice_sao_luma_disable; + slice->m_saoEnabledFlagChroma = !codec->sao_cfg.slice_sao_chroma_disable; slice->m_maxNumMergeCand = codec->merge_cfg.max_mrg_cnd; slice->m_cabacInitFlag = codec->entropy_cfg.cabac_init_flag; slice->m_picOutputFlag = 1;