diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index c7dd6fef..cd99dd4a 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -902,6 +902,7 @@ typedef struct MppEncH265SliceCfg_t { * when splitmode is 1, this value presents lcu line number */ RK_U32 slice_size; + RK_U32 slice_out; RK_U32 loop_filter_across_slices_enabled_flag; } MppEncH265SliceCfg; @@ -1094,6 +1095,7 @@ typedef enum MppEncSliceSplit_e { /* change on quant parameter */ MPP_ENC_SPLIT_CFG_CHANGE_MODE = (1 << 0), MPP_ENC_SPLIT_CFG_CHANGE_ARG = (1 << 1), + MPP_ENC_SPLIT_CFG_CHANGE_OUTPUT = (1 << 2), MPP_ENC_SPLIT_CFG_CHANGE_ALL = (0xFFFFFFFF), } MppEncSliceSplitChange; @@ -1124,6 +1126,14 @@ typedef struct MppEncSliceSplit_t { * for each slice. */ RK_U32 split_arg; + + /* + * slice split output mode + * + * 0 - output all slice in one packet + * 1 - output each slice in a single packet + */ + RK_U32 split_out; } MppEncSliceSplit; /** diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index 2d375132..c46dca77 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -244,6 +244,7 @@ public: /* split config */ \ ENTRY(split, mode, U32, RK_U32, MPP_ENC_SPLIT_CFG_CHANGE_MODE, split, split_mode) \ ENTRY(split, arg, U32, RK_U32, MPP_ENC_SPLIT_CFG_CHANGE_ARG, split, split_arg) \ + ENTRY(split, out, U32, RK_U32, MPP_ENC_SPLIT_CFG_CHANGE_OUTPUT, split, split_out) \ /* hardware detail config */ \ ENTRY(hw, qp_row, S32, RK_S32, MPP_ENC_HW_CFG_CHANGE_QP_ROW, hw, qp_delta_row) \ ENTRY(hw, qp_row_i, S32, RK_S32, MPP_ENC_HW_CFG_CHANGE_QP_ROW_I, hw, qp_delta_row_i) \ @@ -352,7 +353,7 @@ MppEncCfgService::MppEncCfgService() : MPP_RET ret; RK_S32 i; - ret = mpp_trie_init(&trie, 1555, cfg_cnt); + ret = mpp_trie_init(&trie, 1560, cfg_cnt); if (ret) { mpp_err_f("failed to init enc cfg set trie\n"); return ; diff --git a/mpp/codec/enc/h264/h264e_api_v2.c b/mpp/codec/enc/h264/h264e_api_v2.c index a16fb240..c48e8978 100644 --- a/mpp/codec/enc/h264/h264e_api_v2.c +++ b/mpp/codec/enc/h264/h264e_api_v2.c @@ -447,6 +447,9 @@ static MPP_RET h264e_proc_split_cfg(MppEncSliceSplit *dst, MppEncSliceSplit *src if (change & MPP_ENC_SPLIT_CFG_CHANGE_ARG) dst->split_arg = src->split_arg; + if (change & MPP_ENC_SPLIT_CFG_CHANGE_OUTPUT) + dst->split_out = src->split_out; + dst->change |= change; src->change = 0; diff --git a/mpp/codec/enc/h265/h265e_api.c b/mpp/codec/enc/h265/h265e_api.c index 3559fdc4..c0d9b286 100644 --- a/mpp/codec/enc/h265/h265e_api.c +++ b/mpp/codec/enc/h265/h265e_api.c @@ -454,8 +454,10 @@ static MPP_RET h265e_proc_split_cfg(MppEncH265SliceCfg *dst, MppEncSliceSplit *s if (src->split_mode == MPP_ENC_SPLIT_BY_CTU) dst->split_mode = 1; dst->slice_size = src->split_arg; + dst->slice_out = src->split_out; } else { dst->split_enable = 0; + dst->slice_out = 0; } return MPP_OK;