mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-22 08:39:23 +08:00
[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:
@@ -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),
|
||||
|
@@ -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) \
|
||||
|
@@ -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) ||
|
||||
|
@@ -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 : {
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user