Fix VMAF quality regression in tune=vmaf modes

by assigning the correct qindex to rc->active_best_quality.

Before this CL:
tune=vmaf_without_preprocessing
              VMAF        VMAF_NEG
midres       -3.121        -2.795
hdres        -3.059        -2.925
lowres_bd10  -3.316        -2.966
midres_bd10  -2.405        -2.211

After this CL:
              VMAF        VMAF_NEG
midres       -4.268        -3.988
hdres        -4.073        -3.982
lowres_bd10  -4.194        -3.949
midres_bd10  -3.123        -2.974

Change-Id: I9bc0df3e87a50dc94342736ea92c0732469a07c6
diff --git a/aom_dsp/vmaf.h b/aom_dsp/vmaf.h
index 02e59ed..246e9b6 100644
--- a/aom_dsp/vmaf.h
+++ b/aom_dsp/vmaf.h
@@ -34,6 +34,9 @@
   // Stores the filter strength of the last frame.
   double last_frame_unsharp_amount;
 
+  // Stores the origial qindex before scaling.
+  int original_qindex;
+
 #if CONFIG_USE_VMAF_RC
   // VMAF model used in VMAF caculations.
   VmafModel *vmaf_model;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 9bdab9d..8284b96 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1040,6 +1040,7 @@
                     aom_calloc(num_rows * num_cols,
                                sizeof(*cpi->vmaf_info.rdmult_scaling_factors)));
     cpi->vmaf_info.last_frame_unsharp_amount = 0.0;
+    cpi->vmaf_info.original_qindex = -1;
   }
 #endif
 
@@ -2404,16 +2405,12 @@
     if (oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITH_PREPROCESSING ||
         oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITHOUT_PREPROCESSING ||
         oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_MAX_GAIN) {
-      av1_set_quantizer(cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel,
-                        av1_get_vmaf_base_qindex(cpi, q),
-                        q_cfg->enable_chroma_deltaq);
-    } else {
-#endif
-      av1_set_quantizer(cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel, q,
-                        q_cfg->enable_chroma_deltaq);
-#if CONFIG_TUNE_VMAF
+      cpi->vmaf_info.original_qindex = q;
+      q = av1_get_vmaf_base_qindex(cpi, q);
     }
 #endif
+    av1_set_quantizer(cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel, q,
+                      q_cfg->enable_chroma_deltaq);
     av1_set_speed_features_qindex_dependent(cpi, oxcf->speed);
 
     if (q_cfg->deltaq_mode != NO_DELTA_Q)
@@ -2509,6 +2506,13 @@
       rc->projected_frame_size = (int)(*size) << 3;
     }
 
+#if CONFIG_TUNE_VMAF
+    if (oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITH_PREPROCESSING ||
+        oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITHOUT_PREPROCESSING ||
+        oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_MAX_GAIN) {
+      q = cpi->vmaf_info.original_qindex;
+    }
+#endif
     if (allow_recode) {
       // Update q and decide whether to do a recode loop
       recode_loop_update_q(cpi, &loop, &q, &q_low, &q_high, top_index,
diff --git a/av1/encoder/encoder_utils.c b/av1/encoder/encoder_utils.c
index 4dade09..159e37f 100644
--- a/av1/encoder/encoder_utils.c
+++ b/av1/encoder/encoder_utils.c
@@ -968,22 +968,9 @@
   // content tools, with a high q and fixed partition.
   for (int pass = 0; pass < 2; ++pass) {
     set_encoding_params_for_screen_content(cpi, pass);
-#if CONFIG_TUNE_VMAF
-    if (oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITH_PREPROCESSING ||
-        oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_WITHOUT_PREPROCESSING ||
-        oxcf->tune_cfg.tuning == AOM_TUNE_VMAF_MAX_GAIN) {
-      av1_set_quantizer(
-          cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel,
-          av1_get_vmaf_base_qindex(cpi, q_for_screen_content_quick_run),
-          q_cfg->enable_chroma_deltaq);
-    } else {
-#endif
-      av1_set_quantizer(cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel,
-                        q_for_screen_content_quick_run,
-                        q_cfg->enable_chroma_deltaq);
-#if CONFIG_TUNE_VMAF
-    }
-#endif
+    av1_set_quantizer(cm, q_cfg->qm_minlevel, q_cfg->qm_maxlevel,
+                      q_for_screen_content_quick_run,
+                      q_cfg->enable_chroma_deltaq);
     av1_set_speed_features_qindex_dependent(cpi, oxcf->speed);
     if (q_cfg->deltaq_mode != NO_DELTA_Q)
       av1_init_quantizer(&cpi->enc_quant_dequant_params, &cm->quant_params,
diff --git a/av1/encoder/pass2_strategy.c b/av1/encoder/pass2_strategy.c
index a504d48..12d0b41 100644
--- a/av1/encoder/pass2_strategy.c
+++ b/av1/encoder/pass2_strategy.c
@@ -3045,6 +3045,15 @@
     int i;
     for (i = pyramid_level; i <= MAX_ARF_LAYERS; ++i) {
       rc->active_best_quality[i] = cpi->common.quant_params.base_qindex;
+#if CONFIG_TUNE_VMAF
+      if (cpi->vmaf_info.original_qindex != -1 &&
+          (cpi->oxcf.tune_cfg.tuning == AOM_TUNE_VMAF_WITH_PREPROCESSING ||
+           cpi->oxcf.tune_cfg.tuning == AOM_TUNE_VMAF_WITHOUT_PREPROCESSING ||
+           cpi->oxcf.tune_cfg.tuning == AOM_TUNE_VMAF_MAX_GAIN)) {
+        rc->active_best_quality[i] = cpi->vmaf_info.original_qindex;
+      }
+#endif
+
       // if (pyramid_level >= 2) {
       //   rc->active_best_quality[pyramid_level] =
       //     AOMMAX(rc->active_best_quality[pyramid_level],