rtc: Adjust gf length for speed >= 9

This CL continued the work in
https://aomedia-review.googlesource.com/c/aom/+/147006
At real time speed 9 and 10, due to the deep optimizations, using
avg_frame_low_motion to represent high or low motion wasn't accurate
anymore. To compensate for that, we lowered the gf length at these
speeds.

Overall performance got slightly better (see below), and coding
performance of jimredvga_25fps.y4m was improved by 3.67% - 3.96%.
          avg_psnr:  ovr_psnr:  ssim:  encoder speed:
speed 9:
rtc:       -0.065     -0.059    -0.009   -0.067
speed 10:
rtc:       -0.104     -0.084    -0.074   -0.036

STATS_CHANGED

Change-Id: I561ad8914efd8a0c5231c40871d32dca6c7ad5fe
diff --git a/av1/encoder/aq_cyclicrefresh.c b/av1/encoder/aq_cyclicrefresh.c
index 0a955b8..cc97802 100644
--- a/av1/encoder/aq_cyclicrefresh.c
+++ b/av1/encoder/aq_cyclicrefresh.c
@@ -293,9 +293,12 @@
   // Set minimum gf_interval for GF update to a multiple of the refresh period,
   // with some max limit. Depending on past encoding stats, GF flag may be
   // reset and update may not occur until next baseline_gf_interval.
+  const int gf_length_mult[2] = { 8, 4 };
   if (cr->percent_refresh > 0)
     p_rc->baseline_gf_interval =
-        AOMMIN(8 * (100 / cr->percent_refresh), MAX_GF_INTERVAL_RT);
+        AOMMIN(gf_length_mult[cpi->sf.rt_sf.gf_length_lvl] *
+                   (100 / cr->percent_refresh),
+               MAX_GF_INTERVAL_RT);
   else
     p_rc->baseline_gf_interval = FIXED_GF_INTERVAL_RT;
   if (rc->avg_frame_low_motion && rc->avg_frame_low_motion < 40)
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 4b2f8e7..dc6c2ae 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1215,6 +1215,7 @@
       sf->rt_sf.use_nonrd_altref_frame = 1;
     }
     if (speed >= 9) {
+      sf->rt_sf.gf_length_lvl = 1;
       sf->rt_sf.skip_cdef_sb = 1;
     }
   }
@@ -1842,6 +1843,7 @@
   rt_sf->force_large_partition_blocks_intra = 0;
   rt_sf->skip_tx_no_split_var_based_partition = 0;
   rt_sf->skip_newmv_mode_based_on_sse = 0;
+  rt_sf->gf_length_lvl = 0;
 }
 
 void av1_set_speed_features_framesize_dependent(AV1_COMP *cpi, int speed) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 77a2d01..41a56a6 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1309,6 +1309,10 @@
   // Intermediate termination of newMV mode evaluation based on so far best mode
   // sse
   int skip_newmv_mode_based_on_sse;
+
+  // Define gf length multiplier.
+  // Level 0: use large multiplier, level 1: use medium multiplier.
+  int gf_length_lvl;
 } REAL_TIME_SPEED_FEATURES;
 
 /*!\endcond */