summaryrefslogtreecommitdiff
path: root/vp9/vp9_cx_iface.c
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2021-04-20 17:26:22 +0100
committerPaul Wilkins <paulwilkins@google.com>2021-04-20 17:51:05 +0100
commitc911c2d9c51698548c4529a4c35fb495ea95c435 (patch)
treeca6793d519089f73d8dcde81d01ff33de6ab73c8 /vp9/vp9_cx_iface.c
parent665cccfd6ccbc1be2db7d550b68388679b573410 (diff)
downloadlibvpx-c911c2d9c51698548c4529a4c35fb495ea95c435.tar
libvpx-c911c2d9c51698548c4529a4c35fb495ea95c435.tar.gz
libvpx-c911c2d9c51698548c4529a4c35fb495ea95c435.tar.bz2
libvpx-c911c2d9c51698548c4529a4c35fb495ea95c435.zip
Further normalization of Vizier parameters.
Further changes to normalize the Vizier command line parameters. The intent is that the default behavior for any given parameter is signaled by the value 1.0 (expressed on the command line as a rational). The final values used in the two pass code are obtained by multiplying the passed in factors by a default values if use_vizier_rc_params is 1. Where use_vizier_rc_params is 0 the values are explicitly set to the defaults. This patch also changes the default value of each parameter to 1.0 even if not set explicitly. This should ensure safe /default behavior if the user sets use_vizier_rc_params to 1 but does not set all the the individual parameters. Change-Id: Ied08b3c22df18f42f446a4cc9363473cad097f69
Diffstat (limited to 'vp9/vp9_cx_iface.c')
-rw-r--r--vp9/vp9_cx_iface.c74
1 files changed, 39 insertions, 35 deletions
diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c
index c2ca215f1..c700620ef 100644
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -352,15 +352,15 @@ static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t *ctx,
// The range below shall be further tuned.
RANGE_CHECK(cfg, use_vizier_rc_params, 0, 1);
RANGE_CHECK(cfg, active_wq_factor.den, 1, 1000);
- RANGE_CHECK(cfg, base_err_per_mb.den, 1, 1000);
+ RANGE_CHECK(cfg, err_per_mb_factor.den, 1, 1000);
RANGE_CHECK(cfg, sr_default_decay_limit.den, 1, 1000);
RANGE_CHECK(cfg, sr_diff_factor.den, 1, 1000);
- RANGE_CHECK(cfg, kf_err_per_mb.den, 1, 1000);
- RANGE_CHECK(cfg, kf_frame_min_boost.den, 1, 1000);
- RANGE_CHECK(cfg, kf_frame_max_boost_subs.den, 1, 1000);
- RANGE_CHECK(cfg, kf_max_total_boost.den, 1, 1000);
- RANGE_CHECK(cfg, gf_max_total_boost.den, 1, 1000);
- RANGE_CHECK(cfg, gf_frame_max_boost.den, 1, 1000);
+ RANGE_CHECK(cfg, kf_err_per_mb_factor.den, 1, 1000);
+ RANGE_CHECK(cfg, kf_frame_min_boost_factor.den, 1, 1000);
+ RANGE_CHECK(cfg, kf_frame_max_boost_subs_factor.den, 1, 1000);
+ RANGE_CHECK(cfg, kf_max_total_boost_factor.den, 1, 1000);
+ RANGE_CHECK(cfg, gf_max_total_boost_factor.den, 1, 1000);
+ RANGE_CHECK(cfg, gf_frame_max_boost_factor.den, 1, 1000);
RANGE_CHECK(cfg, zm_factor.den, 1, 1000);
RANGE_CHECK(cfg, rd_mult_inter_qp_fac.den, 1, 1000);
RANGE_CHECK(cfg, rd_mult_arf_qp_fac.den, 1, 1000);
@@ -662,31 +662,35 @@ static vpx_codec_err_t set_twopass_params_from_config(
if (cpi == NULL) return VPX_CODEC_ERROR;
cpi->twopass.use_vizier_rc_params = cfg->use_vizier_rc_params;
+
+ // The values set here are factors that will be applied to default values
+ // to get the final value used in the two pass code. 1.0 will hence
+ // match the default behaviour when not using passed in values.
cpi->twopass.active_wq_factor =
(double)cfg->active_wq_factor.num / (double)cfg->active_wq_factor.den;
- cpi->twopass.base_err_per_mb =
- (double)cfg->base_err_per_mb.num / (double)cfg->base_err_per_mb.den;
+ cpi->twopass.err_per_mb =
+ (double)cfg->err_per_mb_factor.num / (double)cfg->err_per_mb_factor.den;
cpi->twopass.sr_default_decay_limit =
(double)cfg->sr_default_decay_limit.num /
(double)cfg->sr_default_decay_limit.den;
cpi->twopass.sr_diff_factor =
(double)cfg->sr_diff_factor.num / (double)cfg->sr_diff_factor.den;
- cpi->twopass.kf_err_per_mb =
- (double)cfg->kf_err_per_mb.num / (double)cfg->kf_err_per_mb.den;
- cpi->twopass.kf_frame_min_boost =
- (double)cfg->kf_frame_min_boost.num / (double)cfg->kf_frame_min_boost.den;
+ cpi->twopass.kf_err_per_mb = (double)cfg->kf_err_per_mb_factor.num /
+ (double)cfg->kf_err_per_mb_factor.den;
+ cpi->twopass.kf_frame_min_boost = (double)cfg->kf_frame_min_boost_factor.num /
+ (double)cfg->kf_frame_min_boost_factor.den;
cpi->twopass.kf_frame_max_boost_first =
- (double)cfg->kf_frame_max_boost_first.num /
- (double)cfg->kf_frame_max_boost_first.den;
+ (double)cfg->kf_frame_max_boost_first_factor.num /
+ (double)cfg->kf_frame_max_boost_first_factor.den;
cpi->twopass.kf_frame_max_boost_subs =
- (double)cfg->kf_frame_max_boost_subs.num /
- (double)cfg->kf_frame_max_boost_subs.den;
- cpi->twopass.kf_max_total_boost = (int)((double)cfg->kf_max_total_boost.num /
- (double)cfg->kf_max_total_boost.den);
- cpi->twopass.gf_max_total_boost = (int)((double)cfg->gf_max_total_boost.num /
- (double)cfg->gf_max_total_boost.den);
- cpi->twopass.gf_frame_max_boost =
- (double)cfg->gf_frame_max_boost.num / (double)cfg->gf_frame_max_boost.den;
+ (double)cfg->kf_frame_max_boost_subs_factor.num /
+ (double)cfg->kf_frame_max_boost_subs_factor.den;
+ cpi->twopass.kf_max_total_boost = (double)cfg->kf_max_total_boost_factor.num /
+ (double)cfg->kf_max_total_boost_factor.den;
+ cpi->twopass.gf_max_total_boost = (double)cfg->gf_max_total_boost_factor.num /
+ (double)cfg->gf_max_total_boost_factor.den;
+ cpi->twopass.gf_frame_max_boost = (double)cfg->gf_frame_max_boost_factor.num /
+ (double)cfg->gf_frame_max_boost_factor.den;
cpi->twopass.zm_factor =
(double)cfg->zm_factor.num / (double)cfg->zm_factor.den;
cpi->rd_ctrl.rd_mult_inter_qp_fac = (double)cfg->rd_mult_inter_qp_fac.num /
@@ -1956,18 +1960,18 @@ static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = {
{ 0 }, // layer_taget_bitrate
0, // temporal_layering_mode
0, // use_vizier_rc_params
- { 0, 1 }, // active_wq_factor
- { 0, 1 }, // base_err_per_mb
- { 0, 1 }, // sr_default_decay_limit
- { 0, 1 }, // sr_diff_factor
- { 0, 1 }, // kf_err_per_mb
- { 0, 1 }, // kf_frame_min_boost
- { 0, 1 }, // kf_frame_max_boost_first
- { 0, 1 }, // kf_frame_max_boost_subs
- { 0, 1 }, // kf_max_total_boost
- { 0, 1 }, // gf_max_total_boost
- { 0, 1 }, // gf_frame_max_boost
- { 0, 1 }, // zm_factor
+ { 1, 1 }, // active_wq_factor
+ { 1, 1 }, // err_per_mb_factor
+ { 1, 1 }, // sr_default_decay_limit
+ { 1, 1 }, // sr_diff_factor
+ { 1, 1 }, // kf_err_per_mb_factor
+ { 1, 1 }, // kf_frame_min_boost_factor
+ { 1, 1 }, // kf_frame_max_boost_first_factor
+ { 1, 1 }, // kf_frame_max_boost_subs_factor
+ { 1, 1 }, // kf_max_total_boost_factor
+ { 1, 1 }, // gf_max_total_boost_factor
+ { 1, 1 }, // gf_frame_max_boost_factor
+ { 1, 1 }, // zm_factor
{ 1, 1 }, // rd_mult_inter_qp_fac
{ 1, 1 }, // rd_mult_arf_qp_fac
{ 1, 1 }, // rd_mult_key_qp_fac