mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[mpi_enc_test]: Remove legacy cfg function
NOTE: Use new string config function. Change-Id: I69d96482dba15f69cd340d501372463e9b92d004 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -47,7 +47,6 @@ typedef struct {
|
||||
// base flow context
|
||||
MppCtx ctx;
|
||||
MppApi *mpi;
|
||||
RK_U32 use_legacy_cfg;
|
||||
MppEncCfg cfg;
|
||||
MppEncPrepCfg prep_cfg;
|
||||
MppEncRcCfg rc_cfg;
|
||||
@@ -264,233 +263,6 @@ MPP_RET test_ctx_deinit(MpiEncTestData **data)
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
MPP_RET test_mpp_setup_legacy(MpiEncTestData *p)
|
||||
{
|
||||
MPP_RET ret;
|
||||
MppApi *mpi;
|
||||
MppCtx ctx;
|
||||
MppEncCodecCfg *codec_cfg;
|
||||
MppEncPrepCfg *prep_cfg;
|
||||
MppEncRcCfg *rc_cfg;
|
||||
MppEncSliceSplit *split_cfg;
|
||||
|
||||
if (NULL == p)
|
||||
return MPP_ERR_NULL_PTR;
|
||||
|
||||
mpi = p->mpi;
|
||||
ctx = p->ctx;
|
||||
codec_cfg = &p->codec_cfg;
|
||||
prep_cfg = &p->prep_cfg;
|
||||
rc_cfg = &p->rc_cfg;
|
||||
split_cfg = &p->split_cfg;
|
||||
|
||||
/* setup default parameter */
|
||||
if (p->fps_in_den == 0)
|
||||
p->fps_in_den = 1;
|
||||
if (p->fps_in_num == 0)
|
||||
p->fps_in_num = 30;
|
||||
if (p->fps_out_den == 0)
|
||||
p->fps_out_den = 1;
|
||||
if (p->fps_out_num == 0)
|
||||
p->fps_out_num = 30;
|
||||
|
||||
|
||||
if (!p->bps)
|
||||
p->bps = p->width * p->height / 8 * (p->fps_out_num / p->fps_out_den);
|
||||
|
||||
prep_cfg->change = MPP_ENC_PREP_CFG_CHANGE_INPUT |
|
||||
MPP_ENC_PREP_CFG_CHANGE_ROTATION |
|
||||
MPP_ENC_PREP_CFG_CHANGE_FORMAT;
|
||||
prep_cfg->width = p->width;
|
||||
prep_cfg->height = p->height;
|
||||
prep_cfg->hor_stride = p->hor_stride;
|
||||
prep_cfg->ver_stride = p->ver_stride;
|
||||
prep_cfg->format = p->fmt;
|
||||
prep_cfg->rotation = MPP_ENC_ROT_0;
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_PREP_CFG, prep_cfg);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set prep cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
rc_cfg->change = MPP_ENC_RC_CFG_CHANGE_ALL;
|
||||
rc_cfg->rc_mode = p->rc_mode;
|
||||
rc_cfg->quality = MPP_ENC_RC_QUALITY_MEDIUM;
|
||||
|
||||
if (rc_cfg->rc_mode == MPP_ENC_RC_MODE_FIXQP) {
|
||||
/* constant QP does not have bps */
|
||||
rc_cfg->bps_target = -1;
|
||||
rc_cfg->bps_max = -1;
|
||||
rc_cfg->bps_min = -1;
|
||||
} else if (rc_cfg->rc_mode == MPP_ENC_RC_MODE_CBR) {
|
||||
/* constant bitrate has very small bps range of 1/16 bps */
|
||||
rc_cfg->bps_target = p->bps;
|
||||
rc_cfg->bps_max = p->bps_max ? p->bps_max : p->bps * 17 / 16;
|
||||
rc_cfg->bps_min = p->bps_min ? p->bps_min : p->bps * 15 / 16;
|
||||
} else {
|
||||
/* variable bitrate has large bps range */
|
||||
rc_cfg->bps_target = p->bps;
|
||||
rc_cfg->bps_max = p->bps_max ? p->bps_max : p->bps * 17 / 16;
|
||||
rc_cfg->bps_min = p->bps_min ? p->bps_min : p->bps * 1 / 16;
|
||||
}
|
||||
|
||||
/* fix input / output frame rate */
|
||||
rc_cfg->fps_in_flex = p->fps_in_flex;
|
||||
rc_cfg->fps_in_num = p->fps_in_num;
|
||||
rc_cfg->fps_in_denorm = p->fps_in_den;
|
||||
rc_cfg->fps_out_flex = p->fps_out_flex;
|
||||
rc_cfg->fps_out_num = p->fps_out_num;
|
||||
rc_cfg->fps_out_denorm = p->fps_out_den;
|
||||
|
||||
rc_cfg->max_reenc_times = 1;
|
||||
rc_cfg->gop = p->gop_len ? p->gop_len : p->fps_out_num * 2;
|
||||
|
||||
mpp_log("%p mpi_enc_test bps %d fps %d gop %d\n", ctx,
|
||||
rc_cfg->bps_target, rc_cfg->fps_out_num, rc_cfg->gop);
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_RC_CFG, rc_cfg);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set rc cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
codec_cfg->coding = p->type;
|
||||
switch (codec_cfg->coding) {
|
||||
case MPP_VIDEO_CodingAVC : {
|
||||
codec_cfg->h264.change = MPP_ENC_H264_CFG_CHANGE_PROFILE |
|
||||
MPP_ENC_H264_CFG_CHANGE_ENTROPY |
|
||||
MPP_ENC_H264_CFG_CHANGE_TRANS_8x8;
|
||||
/*
|
||||
* H.264 profile_idc parameter
|
||||
* 66 - Baseline profile
|
||||
* 77 - Main profile
|
||||
* 100 - High profile
|
||||
*/
|
||||
codec_cfg->h264.profile = 100;
|
||||
/*
|
||||
* H.264 level_idc parameter
|
||||
* 10 / 11 / 12 / 13 - qcif@15fps / cif@7.5fps / cif@15fps / cif@30fps
|
||||
* 20 / 21 / 22 - cif@30fps / half-D1@@25fps / D1@12.5fps
|
||||
* 30 / 31 / 32 - D1@25fps / 720p@30fps / 720p@60fps
|
||||
* 40 / 41 / 42 - 1080p@30fps / 1080p@30fps / 1080p@60fps
|
||||
* 50 / 51 / 52 - 4K@30fps
|
||||
*/
|
||||
codec_cfg->h264.level = 40;
|
||||
codec_cfg->h264.entropy_coding_mode = 1;
|
||||
codec_cfg->h264.cabac_init_idc = 0;
|
||||
codec_cfg->h264.transform8x8_mode = 1;
|
||||
} break;
|
||||
case MPP_VIDEO_CodingMJPEG : {
|
||||
codec_cfg->jpeg.change = MPP_ENC_JPEG_CFG_CHANGE_QP;
|
||||
codec_cfg->jpeg.quant = 10;
|
||||
} break;
|
||||
case MPP_VIDEO_CodingVP8 : {
|
||||
} break;
|
||||
case MPP_VIDEO_CodingHEVC : {
|
||||
codec_cfg->h265.change = MPP_ENC_H265_CFG_INTRA_QP_CHANGE | MPP_ENC_H265_CFG_RC_QP_CHANGE;
|
||||
if (rc_cfg->rc_mode != MPP_ENC_RC_MODE_FIXQP)
|
||||
codec_cfg->h265.qp_init = -1;
|
||||
else
|
||||
codec_cfg->h265.qp_init = 26;
|
||||
codec_cfg->h265.max_i_qp = 46;
|
||||
codec_cfg->h265.min_i_qp = 24;
|
||||
codec_cfg->h265.max_qp = 51;
|
||||
codec_cfg->h265.min_qp = 10;
|
||||
if (0) {
|
||||
codec_cfg->h265.change |= MPP_ENC_H265_CFG_SLICE_CHANGE;
|
||||
codec_cfg->h265.slice_cfg.split_enable = 1;
|
||||
codec_cfg->h265.slice_cfg.split_mode = 1;
|
||||
codec_cfg->h265.slice_cfg.slice_size = 10;
|
||||
}
|
||||
} break;
|
||||
default : {
|
||||
mpp_err_f("support encoder coding type %d\n", codec_cfg->coding);
|
||||
} break;
|
||||
}
|
||||
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_CODEC_CFG, codec_cfg);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set codec cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
p->split_mode = 0;
|
||||
p->split_arg = 0;
|
||||
|
||||
mpp_env_get_u32("split_mode", &p->split_mode, MPP_ENC_SPLIT_NONE);
|
||||
mpp_env_get_u32("split_arg", &p->split_arg, 0);
|
||||
|
||||
if (p->split_mode) {
|
||||
split_cfg->change = MPP_ENC_SPLIT_CFG_CHANGE_ALL;
|
||||
split_cfg->split_mode = p->split_mode;
|
||||
split_cfg->split_arg = p->split_arg;
|
||||
|
||||
mpp_log("%p split_mode %d split_arg %d\n", ctx, p->split_mode, p->split_arg);
|
||||
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_SPLIT, split_cfg);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set codec cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
p->sei_mode = MPP_ENC_SEI_MODE_ONE_FRAME;
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_SEI_CFG, &p->sei_mode);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set sei cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
if (p->type == MPP_VIDEO_CodingAVC || p->type == MPP_VIDEO_CodingHEVC) {
|
||||
p->header_mode = MPP_ENC_HEADER_MODE_EACH_IDR;
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_HEADER_MODE, &p->header_mode);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set header mode failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
}
|
||||
|
||||
RK_U32 gop_mode = p->gop_mode;
|
||||
|
||||
mpp_env_get_u32("gop_mode", &gop_mode, gop_mode);
|
||||
if (gop_mode) {
|
||||
MppEncRefCfg ref;
|
||||
|
||||
mpp_enc_ref_cfg_init(&ref);
|
||||
mpi_enc_gen_ref_cfg(ref, gop_mode);
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_REF_CFG, ref);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set ref cfg failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
mpp_enc_ref_cfg_deinit(&ref);
|
||||
}
|
||||
|
||||
/* setup test mode by env */
|
||||
mpp_env_get_u32("osd_enable", &p->osd_enable, 0);
|
||||
mpp_env_get_u32("osd_mode", &p->osd_mode, MPP_ENC_OSD_PLT_TYPE_DEFAULT);
|
||||
|
||||
if (p->osd_enable) {
|
||||
/* gen and cfg osd plt */
|
||||
mpi_enc_gen_osd_plt(&p->osd_plt, p->plt_table);
|
||||
p->osd_plt_cfg.change = MPP_ENC_OSD_PLT_CFG_CHANGE_ALL;
|
||||
p->osd_plt_cfg.type = MPP_ENC_OSD_PLT_TYPE_USERDEF;
|
||||
p->osd_plt_cfg.plt = &p->osd_plt;
|
||||
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_OSD_PLT_CFG, &p->osd_plt_cfg);
|
||||
if (ret) {
|
||||
mpp_err("mpi control enc set osd plt failed ret %d\n", ret);
|
||||
goto RET;
|
||||
}
|
||||
}
|
||||
|
||||
mpp_env_get_u32("osd_enable", &p->user_data_enable, 0);
|
||||
mpp_env_get_u32("roi_enable", &p->roi_enable, 0);
|
||||
|
||||
RET:
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
|
||||
{
|
||||
MPP_RET ret;
|
||||
@@ -1013,10 +785,7 @@ int mpi_enc_test(MpiEncTestArgs *cmd)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
if (p->use_legacy_cfg)
|
||||
ret = test_mpp_setup_legacy(p);
|
||||
else
|
||||
ret = test_mpp_enc_cfg_setup(p);
|
||||
ret = test_mpp_enc_cfg_setup(p);
|
||||
if (ret) {
|
||||
mpp_err_f("test mpp setup failed ret %d\n", ret);
|
||||
goto MPP_TEST_OUT;
|
||||
|
Reference in New Issue
Block a user