rtc: Smooth increase of partition thresholds

For speed 9, where force_large_partition_blocks
is used: make the increase of partition thresholds
increase lineraly across the Q threshold. This is
to avoid sudden big change in thresholds when Q changes
by +/-1 at thresholds

avg. bdrate gain ~0.6 on rtc set, all clips have some small gain.
Some speed change is expected depending on the bitrate/content
(i.e., depending on whether the typical Q was below/above the
threshold).

Change-Id: I29c0ecc843e53419f9254c934a84d1021e6a0aa8
diff --git a/av1/encoder/var_based_part.c b/av1/encoder/var_based_part.c
index 0f78d7e..106b071 100644
--- a/av1/encoder/var_based_part.c
+++ b/av1/encoder/var_based_part.c
@@ -436,6 +436,15 @@
       thresholds[2] = (5 * threshold_base) >> 1;
     }
     if (cpi->sf.rt_sf.force_large_partition_blocks) {
+      double weight;
+      const int win = 20;
+      if (current_qindex < QINDEX_LARGE_BLOCK_THR - win)
+        weight = 1.0;
+      else if (current_qindex > QINDEX_LARGE_BLOCK_THR + win)
+        weight = 0.0;
+      else
+        weight =
+            1.0 - (current_qindex - QINDEX_LARGE_BLOCK_THR + win) / (2 * win);
       if (cm->width * cm->height <= 352 * 288) {
         thresholds[1] <<= 2;
         thresholds[2] <<= 5;
@@ -450,13 +459,17 @@
         thresholds[0] = (3 * thresholds[0]) >> 1;
         thresholds[3] = INT32_MAX;
         if (current_qindex > QINDEX_LARGE_BLOCK_THR) {
-          thresholds[1] <<= 1;
-          thresholds[2] <<= 1;
+          thresholds[1] = (int)((1 - weight) * (thresholds[1] << 1) +
+                                weight * thresholds[1]);
+          thresholds[2] = (int)((1 - weight) * (thresholds[2] << 1) +
+                                weight * thresholds[2]);
         }
       } else if (current_qindex > QINDEX_LARGE_BLOCK_THR && segment_id == 0 &&
                  (source_sad != kHighSad || cpi->rc.avg_source_sad > 50000)) {
-        thresholds[1] <<= 2;
-        thresholds[2] <<= 5;
+        thresholds[1] =
+            (int)((1 - weight) * (thresholds[1] << 2) + weight * thresholds[1]);
+        thresholds[2] =
+            (int)((1 - weight) * (thresholds[2] << 5) + weight * thresholds[2]);
         thresholds[3] = INT32_MAX;
       }
     }