diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index 6747bcb0..6ce19893 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -559,6 +559,8 @@ typedef enum MppEncH264CfgChange_e { MPP_ENC_H264_CFG_CHANGE_MAX_POC_LSB = (1 << 11), /* change on log2 max frame number minus 4 */ MPP_ENC_H264_CFG_CHANGE_MAX_FRM_NUM = (1 << 12), + /* change on gaps_in_frame_num_value_allowed_flag */ + MPP_ENC_H264_CFG_CHANGE_GAPS_IN_FRM_NUM = (1 << 13), /* change on max_qp / min_qp */ MPP_ENC_H264_CFG_CHANGE_QP_LIMIT = (1 << 16), @@ -607,6 +609,7 @@ typedef struct MppEncH264Cfg_t { RK_U8 poc_type; RK_U8 log2_max_poc_lsb; RK_U8 log2_max_frame_num; + RK_U32 gaps_not_allowed; /* * H.264 profile_idc parameter diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index 46c840dc..9aea0609 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -169,6 +169,7 @@ RK_U32 mpp_enc_cfg_debug = 0; ENTRY(h264, poc_type, U32, RK_U32, MPP_ENC_H264_CFG_CHANGE_POC_TYPE, codec.h264, poc_type) \ ENTRY(h264, log2_max_poc_lsb, U32, RK_U32, MPP_ENC_H264_CFG_CHANGE_MAX_POC_LSB, codec.h264, log2_max_poc_lsb) \ ENTRY(h264, log2_max_frm_num, U32, RK_U32, MPP_ENC_H264_CFG_CHANGE_MAX_FRM_NUM, codec.h264, log2_max_frame_num) \ + ENTRY(h264, gaps_not_allowed, U32, RK_U32, MPP_ENC_H264_CFG_CHANGE_GAPS_IN_FRM_NUM, codec.h264, gaps_not_allowed) \ ENTRY(h264, cabac_en, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_ENTROPY, codec.h264, entropy_coding_mode) \ ENTRY(h264, cabac_idc, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_ENTROPY, codec.h264, cabac_init_idc) \ ENTRY(h264, trans8x8, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_TRANS_8x8, codec.h264, transform8x8_mode) \ diff --git a/mpp/codec/enc/h264/h264e_api_v2.c b/mpp/codec/enc/h264/h264e_api_v2.c index bdeca78c..850975e0 100644 --- a/mpp/codec/enc/h264/h264e_api_v2.c +++ b/mpp/codec/enc/h264/h264e_api_v2.c @@ -349,6 +349,11 @@ static MPP_RET h264e_proc_h264_cfg(MppEncH264Cfg *dst, MppEncH264Cfg *src) dst->log2_max_frame_num = src->log2_max_frame_num; dst->change |= MPP_ENC_H264_CFG_CHANGE_MAX_FRM_NUM; } + if ((change & MPP_ENC_H264_CFG_CHANGE_GAPS_IN_FRM_NUM) && + (dst->gaps_not_allowed != src->gaps_not_allowed)) { + dst->gaps_not_allowed = src->gaps_not_allowed; + dst->change |= MPP_ENC_H264_CFG_CHANGE_GAPS_IN_FRM_NUM; + } if ((change & MPP_ENC_H264_CFG_CHANGE_ENTROPY) && ((dst->entropy_coding_mode != src->entropy_coding_mode) || (dst->cabac_init_idc != src->cabac_init_idc))) { diff --git a/mpp/codec/enc/h264/h264e_sps.c b/mpp/codec/enc/h264/h264e_sps.c index 3c0a1117..b66c9124 100644 --- a/mpp/codec/enc/h264/h264e_sps.c +++ b/mpp/codec/enc/h264/h264e_sps.c @@ -141,7 +141,7 @@ MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg) // max one reference frame sps->num_ref_frames = info->dpb_size; - sps->gaps_in_frame_num_value_allowed = 0; + sps->gaps_in_frame_num_value_allowed = !h264->gaps_not_allowed; // default 720p without cropping sps->pic_width_in_mbs = aligned_w >> 4;