mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[h264e_sps]: Add parameters config for encoder
Encorder parameters: constraint_set0~5 Signed-off-by: xueman.ruan <xueman.ruan@rock-chips.com> Change-Id: I7f90ff97881f875ffad77cf4125ee6623d179563
This commit is contained in:
@@ -667,6 +667,10 @@ typedef enum MppEncH264CfgChange_e {
|
|||||||
|
|
||||||
/* change on vui */
|
/* change on vui */
|
||||||
MPP_ENC_H264_CFG_CHANGE_VUI = (1 << 28),
|
MPP_ENC_H264_CFG_CHANGE_VUI = (1 << 28),
|
||||||
|
|
||||||
|
/* change on constraint */
|
||||||
|
MPP_ENC_H264_CFG_CHANGE_CONSTRAINT_SET = (1 << 29),
|
||||||
|
|
||||||
MPP_ENC_H264_CFG_CHANGE_ALL = (0xFFFFFFFF),
|
MPP_ENC_H264_CFG_CHANGE_ALL = (0xFFFFFFFF),
|
||||||
} MppEncH264CfgChange;
|
} MppEncH264CfgChange;
|
||||||
|
|
||||||
@@ -806,6 +810,17 @@ typedef struct MppEncH264Cfg_t {
|
|||||||
RK_S32 max_tid;
|
RK_S32 max_tid;
|
||||||
RK_S32 prefix_mode;
|
RK_S32 prefix_mode;
|
||||||
RK_S32 base_layer_pid;
|
RK_S32 base_layer_pid;
|
||||||
|
/*
|
||||||
|
* Mpp encoder constraint_set parameter
|
||||||
|
* Mpp encoder constraint_set controls constraint_setx_flag in AVC.
|
||||||
|
* Mpp encoder constraint_set uses type RK_U32 to store force_flag and constraint_force as followed.
|
||||||
|
* | 00 | force_flag | 00 | constraint_force |
|
||||||
|
* As for force_flag and constraint_force, only low 6 bits are valid,
|
||||||
|
* corresponding to constraint_setx_flag from 5 to 0.
|
||||||
|
* If force_flag bit is enabled, constraint_setx_flag will be set correspondingly.
|
||||||
|
* Otherwise, constraint_setx_flag will use default value.
|
||||||
|
*/
|
||||||
|
RK_U32 constraint_set;
|
||||||
} MppEncH264Cfg;
|
} MppEncH264Cfg;
|
||||||
|
|
||||||
#define H265E_MAX_ROI_NUMBER 64
|
#define H265E_MAX_ROI_NUMBER 64
|
||||||
|
@@ -206,6 +206,7 @@ public:
|
|||||||
ENTRY(h264, max_ltr, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_MAX_LTR, codec.h264, max_ltr_frames) \
|
ENTRY(h264, max_ltr, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_MAX_LTR, codec.h264, max_ltr_frames) \
|
||||||
ENTRY(h264, prefix_mode, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_ADD_PREFIX, codec.h264, prefix_mode) \
|
ENTRY(h264, prefix_mode, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_ADD_PREFIX, codec.h264, prefix_mode) \
|
||||||
ENTRY(h264, base_layer_pid, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID, codec.h264, base_layer_pid) \
|
ENTRY(h264, base_layer_pid, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID, codec.h264, base_layer_pid) \
|
||||||
|
ENTRY(h264, constraint_set, U32, RK_U32, MPP_ENC_H264_CFG_CHANGE_CONSTRAINT_SET, codec.h264, constraint_set) \
|
||||||
/* h265 config*/ \
|
/* h265 config*/ \
|
||||||
ENTRY(h265, profile, S32, RK_S32, MPP_ENC_H265_CFG_PROFILE_LEVEL_TILER_CHANGE, codec.h265, profile) \
|
ENTRY(h265, profile, S32, RK_S32, MPP_ENC_H265_CFG_PROFILE_LEVEL_TILER_CHANGE, codec.h265, profile) \
|
||||||
ENTRY(h265, level, S32, RK_S32, MPP_ENC_H265_CFG_PROFILE_LEVEL_TILER_CHANGE, codec.h265, level) \
|
ENTRY(h265, level, S32, RK_S32, MPP_ENC_H265_CFG_PROFILE_LEVEL_TILER_CHANGE, codec.h265, level) \
|
||||||
@@ -357,7 +358,7 @@ MppEncCfgService::MppEncCfgService() :
|
|||||||
MPP_RET ret;
|
MPP_RET ret;
|
||||||
RK_S32 i;
|
RK_S32 i;
|
||||||
|
|
||||||
ret = mpp_trie_init(&trie, 1604, cfg_cnt);
|
ret = mpp_trie_init(&trie, 1622, cfg_cnt);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mpp_err_f("failed to init enc cfg set trie\n");
|
mpp_err_f("failed to init enc cfg set trie\n");
|
||||||
return ;
|
return ;
|
||||||
|
@@ -435,6 +435,12 @@ static MPP_RET h264e_proc_h264_cfg(MppEncH264Cfg *dst, MppEncH264Cfg *src)
|
|||||||
dst->change |= MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID;
|
dst->change |= MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((change & MPP_ENC_H264_CFG_CHANGE_CONSTRAINT_SET) &&
|
||||||
|
(dst->constraint_set != src->constraint_set)) {
|
||||||
|
dst->constraint_set = src->constraint_set;
|
||||||
|
dst->change |= MPP_ENC_H264_CFG_CHANGE_CONSTRAINT_SET;
|
||||||
|
}
|
||||||
|
|
||||||
src->change = 0;
|
src->change = 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -117,6 +117,24 @@ MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg)
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//updata constraint_set0~5
|
||||||
|
RK_U32 set = h264->constraint_set;
|
||||||
|
RK_U8 constraint_force = (set >> 0) & 0x3f;
|
||||||
|
RK_U8 force_flag = (set >> 16) & 0x3f;
|
||||||
|
|
||||||
|
if (force_flag & 1)
|
||||||
|
sps->constraint_set0 = (constraint_force & 1) ? 1 : 0;
|
||||||
|
if (force_flag & 2)
|
||||||
|
sps->constraint_set1 = (constraint_force & 2) ? 1 : 0;
|
||||||
|
if (force_flag & 4)
|
||||||
|
sps->constraint_set2 = (constraint_force & 4) ? 1 : 0;
|
||||||
|
if (force_flag & 8)
|
||||||
|
sps->constraint_set3 = (constraint_force & 8) ? 1 : 0;
|
||||||
|
if (force_flag & 16)
|
||||||
|
sps->constraint_set4 = (constraint_force & 16) ? 1 : 0;
|
||||||
|
if (force_flag & 32)
|
||||||
|
sps->constraint_set5 = (constraint_force & 32) ? 1 : 0;
|
||||||
|
|
||||||
// level_idc is connected with frame size
|
// level_idc is connected with frame size
|
||||||
{
|
{
|
||||||
RK_S32 mbs = (aligned_w * aligned_h) >> 8;
|
RK_S32 mbs = (aligned_w * aligned_h) >> 8;
|
||||||
|
@@ -405,6 +405,8 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncMultiCtxInfo *info)
|
|||||||
mpp_enc_cfg_set_s32(cfg, "codec:type", p->type);
|
mpp_enc_cfg_set_s32(cfg, "codec:type", p->type);
|
||||||
switch (p->type) {
|
switch (p->type) {
|
||||||
case MPP_VIDEO_CodingAVC : {
|
case MPP_VIDEO_CodingAVC : {
|
||||||
|
RK_U32 constraint_set;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* H.264 profile_idc parameter
|
* H.264 profile_idc parameter
|
||||||
* 66 - Baseline profile
|
* 66 - Baseline profile
|
||||||
@@ -424,6 +426,10 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncMultiCtxInfo *info)
|
|||||||
mpp_enc_cfg_set_s32(cfg, "h264:cabac_en", 1);
|
mpp_enc_cfg_set_s32(cfg, "h264:cabac_en", 1);
|
||||||
mpp_enc_cfg_set_s32(cfg, "h264:cabac_idc", 0);
|
mpp_enc_cfg_set_s32(cfg, "h264:cabac_idc", 0);
|
||||||
mpp_enc_cfg_set_s32(cfg, "h264:trans8x8", 1);
|
mpp_enc_cfg_set_s32(cfg, "h264:trans8x8", 1);
|
||||||
|
|
||||||
|
mpp_env_get_u32("constraint_set", &constraint_set, 0);
|
||||||
|
if (constraint_set & 0x3f0000)
|
||||||
|
mpp_enc_cfg_set_s32(cfg, "h264:constraint_set", constraint_set);
|
||||||
} break;
|
} break;
|
||||||
case MPP_VIDEO_CodingHEVC :
|
case MPP_VIDEO_CodingHEVC :
|
||||||
case MPP_VIDEO_CodingMJPEG :
|
case MPP_VIDEO_CodingMJPEG :
|
||||||
|
Reference in New Issue
Block a user