[mpp_enc]: Separate qp change flag

Separate H.264 QP limit change flag into 3 flags

Change-Id: I658ab337569f8f715bde7633dce02b631a7d4239
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2020-12-15 17:26:29 +08:00
parent 711459b3c5
commit de8ace6622
7 changed files with 32 additions and 29 deletions

View File

@@ -508,18 +508,22 @@ typedef enum MppEncH264CfgChange_e {
/* change on log2 max frame number minus 4 */
MPP_ENC_H264_CFG_CHANGE_MAX_FRM_NUM = (1 << 12),
/* change on max_qp / min_qp / max_qp_step */
/* change on max_qp / min_qp */
MPP_ENC_H264_CFG_CHANGE_QP_LIMIT = (1 << 16),
/* change on max_qp_i / min_qp_i */
MPP_ENC_H264_CFG_CHANGE_QP_LIMIT_I = (1 << 17),
/* change on qp_delta_ip */
MPP_ENC_H264_CFG_CHANGE_QP_DELTA = (1 << 18),
/* change on intra_refresh_mode / intra_refresh_arg */
MPP_ENC_H264_CFG_CHANGE_INTRA_REFRESH = (1 << 17),
MPP_ENC_H264_CFG_CHANGE_INTRA_REFRESH = (1 << 20),
/* change on max long-term reference frame count */
MPP_ENC_H264_CFG_CHANGE_MAX_LTR = (1 << 18),
MPP_ENC_H264_CFG_CHANGE_MAX_LTR = (1 << 21),
/* change on max temporal id */
MPP_ENC_H264_CFG_CHANGE_MAX_TID = (1 << 19),
MPP_ENC_H264_CFG_CHANGE_MAX_TID = (1 << 22),
/* change on adding prefix nal */
MPP_ENC_H264_CFG_CHANGE_ADD_PREFIX = (1 << 20),
MPP_ENC_H264_CFG_CHANGE_ADD_PREFIX = (1 << 23),
/* change on base layer priority id */
MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID = (1 << 21),
MPP_ENC_H264_CFG_CHANGE_BASE_LAYER_PID = (1 << 24),
/* change on vui */
MPP_ENC_H264_CFG_CHANGE_VUI = (1 << 28),

View File

@@ -209,10 +209,10 @@ static const char *cfg_func_names[] = {
ENTRY(h264, qp_init, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_init) \
ENTRY(h264, qp_max, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_max) \
ENTRY(h264, qp_min, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_min) \
ENTRY(h264, qp_max_i, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_max_i) \
ENTRY(h264, qp_min_i, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_min_i) \
ENTRY(h264, qp_step, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_max_step) \
ENTRY(h264, qp_delta_ip, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT, codec.h264, qp_delta_ip) \
ENTRY(h264, qp_max_i, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT_I, codec.h264, qp_max_i) \
ENTRY(h264, qp_min_i, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_LIMIT_I, codec.h264, qp_min_i) \
ENTRY(h264, qp_step, S32, RK_S32, 0, codec.h264, qp_max_step) \
ENTRY(h264, qp_delta_ip, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_QP_DELTA, codec.h264, qp_delta_ip) \
ENTRY(h264, max_tid, S32, RK_S32, MPP_ENC_H264_CFG_CHANGE_MAX_TID, codec.h264, max_tid) \
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) \
@@ -231,7 +231,7 @@ static const char *cfg_func_names[] = {
ENTRY(h265, qp_min, S32, RK_S32, MPP_ENC_H265_CFG_RC_QP_CHANGE, codec.h265, min_qp) \
ENTRY(h265, qp_max_i, S32, RK_S32, MPP_ENC_H265_CFG_RC_QP_CHANGE, codec.h265, max_i_qp) \
ENTRY(h265, qp_min_i, S32, RK_S32, MPP_ENC_H265_CFG_RC_QP_CHANGE, codec.h265, min_i_qp) \
ENTRY(h265, qp_step, S32, RK_S32, MPP_ENC_H265_CFG_RC_QP_CHANGE, codec.h265, qp_max_step) \
ENTRY(h265, qp_step, S32, RK_S32, 0, codec.h265, qp_max_step) \
ENTRY(h265, qp_delta_ip, S32, RK_S32, MPP_ENC_H265_CFG_RC_QP_CHANGE, codec.h265, ip_qp_delta) \
/* vp8 config */ \
ENTRY(vp8, qp_init, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_init) \
@@ -239,7 +239,7 @@ static const char *cfg_func_names[] = {
ENTRY(vp8, qp_min, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_min) \
ENTRY(vp8, qp_max_i, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_max_i) \
ENTRY(vp8, qp_min_i, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_min_i) \
ENTRY(vp8, qp_step, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_max_step) \
ENTRY(vp8, qp_step, S32, RK_S32, 0, codec.vp8, qp_max_step) \
ENTRY(vp8, disable_ivf, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_DIS_IVF, codec.vp8, disable_ivf) \
/* jpeg config */ \
ENTRY(jpeg, quant, S32, RK_S32, MPP_ENC_JPEG_CFG_CHANGE_QP, codec.jpeg, quant) \

View File

@@ -104,8 +104,7 @@ static void init_h264e_cfg_set(MppEncCfgSet *cfg, MppClientType type)
/* default max/min intra qp is not set */
h264->qp_max_i = 0;
h264->qp_min_i = 0;
h264->qp_max_step = 8;
h264->qp_delta_ip = 8;
h264->qp_delta_ip = 4;
switch (type) {
case VPU_CLIENT_VEPU1 :
@@ -512,19 +511,23 @@ static MPP_RET h264e_proc_h264_cfg(MppEncH264Cfg *dst, MppEncH264Cfg *src)
if ((change & MPP_ENC_H264_CFG_CHANGE_QP_LIMIT) &&
((dst->qp_init != src->qp_init) ||
(dst->qp_max != src->qp_max) ||
(dst->qp_min != src->qp_min) ||
(dst->qp_max_i != src->qp_max_i) ||
(dst->qp_min_i != src->qp_min_i) ||
(dst->qp_max_step != src->qp_max_step) ||
(dst->qp_delta_ip != src->qp_delta_ip))) {
(dst->qp_min != src->qp_min))) {
dst->qp_init = src->qp_init;
dst->qp_max = src->qp_max;
dst->qp_min = src->qp_min;
dst->change |= MPP_ENC_H264_CFG_CHANGE_QP_LIMIT;
}
if ((change & MPP_ENC_H264_CFG_CHANGE_QP_LIMIT_I) &&
((dst->qp_max_i != src->qp_max_i) ||
(dst->qp_min_i != src->qp_min_i))) {
dst->qp_max_i = src->qp_max_i ? src->qp_max_i : src->qp_max;
dst->qp_min_i = src->qp_min_i ? src->qp_min_i : src->qp_min;
dst->qp_max_step = src->qp_max_step;
dst->change |= MPP_ENC_H264_CFG_CHANGE_QP_LIMIT_I;
}
if ((change & MPP_ENC_H264_CFG_CHANGE_QP_DELTA) &&
(dst->qp_delta_ip != src->qp_delta_ip)) {
dst->qp_delta_ip = src->qp_delta_ip;
dst->change |= MPP_ENC_H264_CFG_CHANGE_QP_LIMIT;
dst->change |= MPP_ENC_H264_CFG_CHANGE_QP_DELTA;
}
if ((change & MPP_ENC_H264_CFG_CHANGE_INTRA_REFRESH) &&
((dst->intra_refresh_mode != src->intra_refresh_mode) ||

View File

@@ -459,7 +459,6 @@ MPP_RET test_mpp_setup(MpiEncTestData *p)
codec_cfg->h264.qp_max = p->qp_max;
codec_cfg->h264.qp_min = p->qp_min;
codec_cfg->h264.qp_max_step = p->qp_step;
codec_cfg->h264.qp_init = p->qp_init;
} break;
case MPP_VIDEO_CodingMJPEG : {

View File

@@ -348,9 +348,10 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
mpp_enc_cfg_set_s32(cfg, "h264:qp_init", 26);
mpp_enc_cfg_set_s32(cfg, "h264:qp_max", 51);
mpp_enc_cfg_set_s32(cfg, "h264:qp_min", 10);
mpp_enc_cfg_set_s32(cfg, "h264:qp_max_i", 46);
mpp_enc_cfg_set_s32(cfg, "h264:qp_min_i", 24);
mpp_enc_cfg_set_s32(cfg, "h264:qp_max_i", 51);
mpp_enc_cfg_set_s32(cfg, "h264:qp_min_i", 10);
}
mpp_enc_cfg_set_s32(cfg, "h264:qp_delta_ip", 4);
} break;
case MPP_VIDEO_CodingMJPEG : {
mpp_enc_cfg_set_s32(cfg, "jpeg:q_factor", 80);

View File

@@ -591,7 +591,6 @@ static MPP_RET mpi_rc_enc_init(MpiRc2TestCtx *ctx)
/* constant QP mode qp is fixed */
codec_cfg->h264.qp_max = 26;
codec_cfg->h264.qp_min = 26;
codec_cfg->h264.qp_max_step = 0;
codec_cfg->h264.qp_init = 26;
codec_cfg->h264.change |= MPP_ENC_H264_CFG_CHANGE_QP_LIMIT;
}

View File

@@ -645,17 +645,14 @@ static MPP_RET mpi_rc_codec(MpiRcTestCtx *ctx)
codec_cfg->h264.qp_init = 26;
codec_cfg->h264.qp_max = 26;
codec_cfg->h264.qp_min = 26;
codec_cfg->h264.qp_max_step = 0;
} else if (rc_cfg->rc_mode == MPP_ENC_RC_MODE_CBR) {
/* constant bitrate do not limit qp range */
codec_cfg->h264.qp_max = 48;
codec_cfg->h264.qp_min = 4;
codec_cfg->h264.qp_max_step = 16;
} else if (rc_cfg->rc_mode == MPP_ENC_RC_MODE_VBR) {
/* variable bitrate has qp min limit */
codec_cfg->h264.qp_max = 40;
codec_cfg->h264.qp_min = 12;
codec_cfg->h264.qp_max_step = 8;
}
ret = enc_mpi->control(enc_ctx, MPP_ENC_SET_CODEC_CFG, codec_cfg);
if (ret) {