[svc] Add min/max q and min/max bitrate in svc test app
Change-Id: I67ea45119f23659279d24aa67eb823c751ac86fc
This commit is contained in:
Родитель
d205335060
Коммит
6c3c66fb7f
|
@ -67,13 +67,22 @@ static const arg_def_t pass_arg =
|
|||
ARG_DEF(NULL, "pass", 1, "Pass to execute (1/2)");
|
||||
static const arg_def_t fpf_name_arg =
|
||||
ARG_DEF(NULL, "fpf", 1, "First pass statistics file name");
|
||||
static const arg_def_t min_q_arg =
|
||||
ARG_DEF(NULL, "min-q", 1, "Minimum quantizer");
|
||||
static const arg_def_t max_q_arg =
|
||||
ARG_DEF(NULL, "max-q", 1, "Maximum quantizer");
|
||||
static const arg_def_t min_bitrate_arg =
|
||||
ARG_DEF(NULL, "min-bitrate", 1, "Minimum bitrate");
|
||||
static const arg_def_t max_bitrate_arg =
|
||||
ARG_DEF(NULL, "max-bitrate", 1, "Maximum bitrate");
|
||||
|
||||
static const arg_def_t *svc_args[] = {
|
||||
&encoding_mode_arg, &frames_arg, &width_arg, &height_arg,
|
||||
&timebase_arg, &bitrate_arg, &skip_frames_arg, &layers_arg,
|
||||
&kf_dist_arg, &scale_factors_arg, &quantizers_arg,
|
||||
&quantizers_keyframe_arg, &passes_arg, &pass_arg,
|
||||
&fpf_name_arg, NULL
|
||||
&quantizers_keyframe_arg, &passes_arg, &pass_arg,
|
||||
&fpf_name_arg, &min_q_arg, &max_q_arg, &min_bitrate_arg,
|
||||
&max_bitrate_arg, NULL
|
||||
};
|
||||
|
||||
static const SVC_ENCODING_MODE default_encoding_mode =
|
||||
|
@ -120,6 +129,8 @@ static void parse_command_line(int argc, const char **argv_,
|
|||
int passes = 0;
|
||||
int pass = 0;
|
||||
const char *fpf_file_name = NULL;
|
||||
unsigned int min_bitrate = 0;
|
||||
unsigned int max_bitrate = 0;
|
||||
|
||||
// initialize SvcContext with parameters that will be passed to vpx_svc_init
|
||||
svc_ctx->log_level = SVC_LOG_DEBUG;
|
||||
|
@ -186,6 +197,14 @@ static void parse_command_line(int argc, const char **argv_,
|
|||
}
|
||||
} else if (arg_match(&arg, &fpf_name_arg, argi)) {
|
||||
fpf_file_name = arg.val;
|
||||
} else if (arg_match(&arg, &min_q_arg, argi)) {
|
||||
enc_cfg->rc_min_quantizer = arg_parse_uint(&arg);
|
||||
} else if (arg_match(&arg, &max_q_arg, argi)) {
|
||||
enc_cfg->rc_max_quantizer = arg_parse_uint(&arg);
|
||||
} else if (arg_match(&arg, &min_bitrate_arg, argi)) {
|
||||
min_bitrate = arg_parse_uint(&arg);
|
||||
} else if (arg_match(&arg, &max_bitrate_arg, argi)) {
|
||||
max_bitrate = arg_parse_uint(&arg);
|
||||
} else {
|
||||
++argj;
|
||||
}
|
||||
|
@ -221,6 +240,17 @@ static void parse_command_line(int argc, const char **argv_,
|
|||
app_input->pass = pass;
|
||||
}
|
||||
|
||||
if (enc_cfg->rc_target_bitrate > 0) {
|
||||
if (min_bitrate > 0) {
|
||||
enc_cfg->rc_2pass_vbr_minsection_pct =
|
||||
min_bitrate * 100 / enc_cfg->rc_target_bitrate;
|
||||
}
|
||||
if (max_bitrate > 0) {
|
||||
enc_cfg->rc_2pass_vbr_maxsection_pct =
|
||||
max_bitrate * 100 / enc_cfg->rc_target_bitrate;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for unrecognized options
|
||||
for (argi = argv; *argi; ++argi)
|
||||
if (argi[0][0] == '-' && strlen(argi[0]) > 1)
|
||||
|
|
|
@ -583,8 +583,12 @@ vpx_codec_err_t vpx_svc_init(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx,
|
|||
enc_cfg->rc_dropframe_thresh = 0;
|
||||
enc_cfg->rc_end_usage = VPX_CBR;
|
||||
enc_cfg->rc_resize_allowed = 0;
|
||||
enc_cfg->rc_min_quantizer = 33;
|
||||
enc_cfg->rc_max_quantizer = 33;
|
||||
|
||||
if (enc_cfg->g_pass == VPX_RC_ONE_PASS) {
|
||||
enc_cfg->rc_min_quantizer = 33;
|
||||
enc_cfg->rc_max_quantizer = 33;
|
||||
}
|
||||
|
||||
enc_cfg->rc_undershoot_pct = 100;
|
||||
enc_cfg->rc_overshoot_pct = 15;
|
||||
enc_cfg->rc_buf_initial_sz = 500;
|
||||
|
@ -784,12 +788,17 @@ static void set_svc_parameters(SvcContext *svc_ctx,
|
|||
}
|
||||
layer_index = layer + VPX_SS_MAX_LAYERS - si->layers;
|
||||
|
||||
if (vpx_svc_is_keyframe(svc_ctx)) {
|
||||
svc_params.min_quantizer = si->quantizer_keyframe[layer_index];
|
||||
svc_params.max_quantizer = si->quantizer_keyframe[layer_index];
|
||||
if (codec_ctx->config.enc->g_pass == VPX_RC_ONE_PASS) {
|
||||
if (vpx_svc_is_keyframe(svc_ctx)) {
|
||||
svc_params.min_quantizer = si->quantizer_keyframe[layer_index];
|
||||
svc_params.max_quantizer = si->quantizer_keyframe[layer_index];
|
||||
} else {
|
||||
svc_params.min_quantizer = si->quantizer[layer_index];
|
||||
svc_params.max_quantizer = si->quantizer[layer_index];
|
||||
}
|
||||
} else {
|
||||
svc_params.min_quantizer = si->quantizer[layer_index];
|
||||
svc_params.max_quantizer = si->quantizer[layer_index];
|
||||
svc_params.min_quantizer = codec_ctx->config.enc->rc_min_quantizer;
|
||||
svc_params.max_quantizer = codec_ctx->config.enc->rc_max_quantizer;
|
||||
}
|
||||
|
||||
svc_params.distance_from_i_frame = si->frame_within_gop;
|
||||
|
|
Загрузка…
Ссылка в новой задаче