diff --git a/test/mpi_enc_test.c b/test/mpi_enc_test.c index 00f68183..e932a17a 100644 --- a/test/mpi_enc_test.c +++ b/test/mpi_enc_test.c @@ -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;