summaryrefslogtreecommitdiff
path: root/vpxenc.c
diff options
context:
space:
mode:
authorCheng Chen <chengchen@google.com>2021-03-16 21:27:18 -0700
committerCheng Chen <chengchen@google.com>2021-03-29 20:55:37 -0700
commitc19de35ed2b772fd21092c727c5e090034876d4f (patch)
tree475b08f50b2724a3608527f9246b60f76e8b4e07 /vpxenc.c
parentd55cab425d57b7e73894ac62e28ac505b6b4d6f1 (diff)
downloadlibvpx-c19de35ed2b772fd21092c727c5e090034876d4f.tar
libvpx-c19de35ed2b772fd21092c727c5e090034876d4f.tar.gz
libvpx-c19de35ed2b772fd21092c727c5e090034876d4f.tar.bz2
libvpx-c19de35ed2b772fd21092c727c5e090034876d4f.zip
Add command line options for a few rc parameters
These rate control parameters are for the Vizier experiment. They are defined as rational numbers. Change-Id: I23f382dd49158db463b75b5ad8a82d8e0d536308
Diffstat (limited to 'vpxenc.c')
-rw-r--r--vpxenc.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/vpxenc.c b/vpxenc.c
index 5042e688c..3c04c64b3 100644
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -287,6 +287,46 @@ static const arg_def_t *rc_args[] = {
&buf_sz, &buf_initial_sz, &buf_optimal_sz, NULL
};
+#if CONFIG_VP9_ENCODER
+static const arg_def_t active_wq_factor =
+ ARG_DEF(NULL, "active-wq-factor", 1, "Active worst quality factor");
+static const arg_def_t base_err_per_mb =
+ ARG_DEF(NULL, "base-err-per-mb", 1, "Base error per macroblock");
+static const arg_def_t sr_default_decay_limit = ARG_DEF(
+ NULL, "sr-default-decay-limit", 1, "Second reference default decay limit");
+static const arg_def_t sr_diff_factor =
+ ARG_DEF(NULL, "sr-diff-factor", 1, "Second reference diff factor");
+static const arg_def_t kf_err_per_mb =
+ ARG_DEF(NULL, "kf-err-per-mb", 1, "Keyframe error per macroblock");
+static const arg_def_t kf_frame_min_boost =
+ ARG_DEF(NULL, "kf-frame-min-boost", 1, "Keyframe min boost");
+static const arg_def_t kf_frame_max_boost_first = ARG_DEF(
+ NULL, "kf-frame-max-boost-first", 1, "Max for the first keyframe boost");
+static const arg_def_t kf_frame_max_boost_subs = ARG_DEF(
+ NULL, "kf-frame-max-boost-subs", 1, "Max for subsequent keyframe boost");
+static const arg_def_t kf_max_total_boost =
+ ARG_DEF(NULL, "kf-max-total-boost", 1, "Keyframe max total boost");
+static const arg_def_t gf_max_total_boost =
+ ARG_DEF(NULL, "gf-max-total-boost", 1, "Golden frame max total boost");
+static const arg_def_t gf_frame_max_boost =
+ ARG_DEF(NULL, "gf-frame-max-boost", 1, "Golden frame max boost");
+static const arg_def_t zm_power_factor =
+ ARG_DEF(NULL, "zm-power-factor", 1, "Zero motion power factor");
+static const arg_def_t *vizier_rc_args[] = { &active_wq_factor,
+ &base_err_per_mb,
+ &sr_default_decay_limit,
+ &sr_diff_factor,
+ &kf_err_per_mb,
+ &kf_frame_min_boost,
+ &kf_frame_max_boost_first,
+ &kf_frame_max_boost_subs,
+ &kf_max_total_boost,
+ &gf_max_total_boost,
+ &gf_frame_max_boost,
+ &zm_power_factor,
+ NULL };
+#endif
+
static const arg_def_t bias_pct =
ARG_DEF(NULL, "bias-pct", 1, "CBR/VBR bias (0=CBR, 100=VBR)");
static const arg_def_t minsection_pct =
@@ -573,6 +613,8 @@ static void show_help(FILE *fout, int shorthelp) {
#if CONFIG_VP9_ENCODER
fprintf(fout, "\nVP9 Specific Options:\n");
arg_show_usage(fout, vp9_args);
+ fprintf(fout, "\nVizier Rate Control Options:\n");
+ arg_show_usage(fout, vizier_rc_args);
#endif
fprintf(fout,
"\nStream timebase (--timebase):\n"
@@ -983,6 +1025,32 @@ static int parse_stream_params(struct VpxEncoderConfig *global,
config->cfg.kf_max_dist = arg_parse_uint(&arg);
} else if (arg_match(&arg, &kf_disabled, argi)) {
config->cfg.kf_mode = VPX_KF_DISABLED;
+#if CONFIG_VP9_ENCODER
+ } else if (arg_match(&arg, &active_wq_factor, argi)) {
+ config->cfg.active_wq_factor = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &base_err_per_mb, argi)) {
+ config->cfg.base_err_per_mb = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &sr_default_decay_limit, argi)) {
+ config->cfg.sr_default_decay_limit = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &sr_diff_factor, argi)) {
+ config->cfg.sr_diff_factor = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &kf_err_per_mb, argi)) {
+ config->cfg.kf_err_per_mb = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &kf_frame_min_boost, argi)) {
+ config->cfg.kf_frame_min_boost = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &kf_frame_max_boost_first, argi)) {
+ config->cfg.kf_frame_max_boost_first = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &kf_frame_max_boost_subs, argi)) {
+ config->cfg.kf_frame_max_boost_subs = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &kf_max_total_boost, argi)) {
+ config->cfg.kf_max_total_boost = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &gf_max_total_boost, argi)) {
+ config->cfg.gf_max_total_boost = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &gf_frame_max_boost, argi)) {
+ config->cfg.gf_frame_max_boost = arg_parse_rational(&arg);
+ } else if (arg_match(&arg, &zm_power_factor, argi)) {
+ config->cfg.zm_power_factor = arg_parse_rational(&arg);
+#endif
#if CONFIG_VP9_HIGHBITDEPTH
} else if (arg_match(&arg, &test16bitinternalarg, argi)) {
if (strcmp(global->codec->name, "vp9") == 0) {
@@ -1177,6 +1245,9 @@ static void show_stream_config(struct stream_state *stream,
SHOW(kf_mode);
SHOW(kf_min_dist);
SHOW(kf_max_dist);
+ // Temporary use for debug
+ SHOW(active_wq_factor.num);
+ SHOW(active_wq_factor.den);
}
static void open_output_file(struct stream_state *stream,