ref: 27106e507be4bd25686afd780d7c3c2e2467de38
parent: 47808645a8572dc799795aab45a6be7ee78a84fc
author: Jerome Jiang <jianj@google.com>
date: Wed Aug 15 13:15:45 EDT 2018
svc: Force the quantizer to be same as that in encoder config. Change-Id: I0377ca2ebf63792d7a27de4b8e7e08b38659ecde
--- a/vp9/encoder/vp9_svc_layercontext.c
+++ b/vp9/encoder/vp9_svc_layercontext.c
@@ -108,6 +108,8 @@
lrc->ni_frames = 0;
lrc->decimation_count = 0;
lrc->decimation_factor = 0;
+ lrc->worst_quality = oxcf->worst_allowed_q;
+ lrc->best_quality = oxcf->best_allowed_q;
for (i = 0; i < RATE_FACTOR_LEVELS; ++i) {
lrc->rate_correction_factors[i] = 1.0;
@@ -816,7 +818,8 @@
// Setting the worst/best_quality via the encoder control: SET_SVC_PARAMETERS,
// only for non-BYPASS mode for now.
- if (svc->temporal_layering_mode != VP9E_TEMPORAL_LAYERING_MODE_BYPASS) {
+ if (svc->temporal_layering_mode != VP9E_TEMPORAL_LAYERING_MODE_BYPASS ||
+ svc->use_set_ref_frame_config) {
RATE_CONTROL *const lrc = &lc->rc;
lrc->worst_quality = vp9_quantizer_to_qindex(lc->max_q);
lrc->best_quality = vp9_quantizer_to_qindex(lc->min_q);
--- a/vpx/src/svc_encodeframe.c
+++ b/vpx/src/svc_encodeframe.c
@@ -497,6 +497,17 @@
enc_cfg->rc_buf_sz = 1000;
}
+ for (tl = 0; tl < svc_ctx->temporal_layers; ++tl) {
+ for (sl = 0; sl < svc_ctx->spatial_layers; ++sl) {
+ i = sl * svc_ctx->temporal_layers + tl;
+ if (enc_cfg->rc_end_usage == VPX_CBR &&
+ enc_cfg->g_pass == VPX_RC_ONE_PASS) {
+ si->svc_params.max_quantizers[i] = enc_cfg->rc_max_quantizer;
+ si->svc_params.min_quantizers[i] = enc_cfg->rc_min_quantizer;
+ }
+ }
+ }
+
if (enc_cfg->g_error_resilient == 0 && si->use_multiple_frame_contexts == 0)
enc_cfg->g_error_resilient = 1;