Allow to set min_partition_size and max_partition_size

min_partition_size and max_partition_size can be set by users.
This CL enables they can also be set by speed features.

Change-Id: I37082762568ee468e05ee3555bed0d85b9f88fea
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 0b62a12..5db694f 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4107,28 +4107,8 @@
 #if CONFIG_COLLECT_COMPONENT_TIMING
         start_timing(cpi, rd_pick_partition_time);
 #endif
-        BLOCK_SIZE max_sq_size = BLOCK_128X128;
-        switch (cpi->oxcf.max_partition_size) {
-          case 4: max_sq_size = BLOCK_4X4; break;
-          case 8: max_sq_size = BLOCK_8X8; break;
-          case 16: max_sq_size = BLOCK_16X16; break;
-          case 32: max_sq_size = BLOCK_32X32; break;
-          case 64: max_sq_size = BLOCK_64X64; break;
-          case 128: max_sq_size = BLOCK_128X128; break;
-          default: assert(0); break;
-        }
-        max_sq_size = AOMMIN(max_sq_size, sb_size);
-
-        BLOCK_SIZE min_sq_size = BLOCK_4X4;
-        switch (cpi->oxcf.min_partition_size) {
-          case 4: min_sq_size = BLOCK_4X4; break;
-          case 8: min_sq_size = BLOCK_8X8; break;
-          case 16: min_sq_size = BLOCK_16X16; break;
-          case 32: min_sq_size = BLOCK_32X32; break;
-          case 64: min_sq_size = BLOCK_64X64; break;
-          case 128: min_sq_size = BLOCK_128X128; break;
-          default: assert(0); break;
-        }
+        BLOCK_SIZE max_sq_size = x->max_partition_size;
+        BLOCK_SIZE min_sq_size = x->min_partition_size;
 
         if (use_auto_max_partition(cpi, sb_size, mi_row, mi_col)) {
           float features[FEATURE_SIZE_MAX_MIN_PART_PRED] = { 0.0f };
@@ -4585,8 +4565,6 @@
   RD_COUNTS *const rdc = &cpi->td.rd_counts;
   int i;
 
-  x->min_partition_size = AOMMIN(x->min_partition_size, cm->seq_params.sb_size);
-  x->max_partition_size = AOMMIN(x->max_partition_size, cm->seq_params.sb_size);
 #if CONFIG_DIST_8X8
   x->using_dist_8x8 = cpi->oxcf.using_dist_8x8;
   x->tune_metric = cpi->oxcf.tuning;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index b643fd5..d45bc41 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -96,6 +96,18 @@
   }
 }
 
+static BLOCK_SIZE dim_to_size(int dim) {
+  switch (dim) {
+    case 4: return BLOCK_4X4;
+    case 8: return BLOCK_8X8;
+    case 16: return BLOCK_16X16;
+    case 32: return BLOCK_32X32;
+    case 64: return BLOCK_64X64;
+    case 128: return BLOCK_128X128;
+    default: assert(0); return 0;
+  }
+}
+
 static void set_good_speed_feature_framesize_dependent(
     const AV1_COMP *const cpi, SPEED_FEATURES *const sf, int speed) {
   const AV1_COMMON *const cm = &cpi->common;
@@ -873,8 +885,12 @@
     cpi->find_fractional_mv_step = av1_find_best_sub_pixel_tree_pruned_evenmore;
   }
 
-  x->min_partition_size = sf->default_min_partition_size;
-  x->max_partition_size = sf->default_max_partition_size;
+  x->min_partition_size = AOMMAX(sf->default_min_partition_size,
+                                 dim_to_size(cpi->oxcf.min_partition_size));
+  x->max_partition_size = AOMMIN(sf->default_max_partition_size,
+                                 dim_to_size(cpi->oxcf.max_partition_size));
+  x->min_partition_size = AOMMIN(x->min_partition_size, cm->seq_params.sb_size);
+  x->max_partition_size = AOMMIN(x->max_partition_size, cm->seq_params.sb_size);
 
   // This is only used in motion vector unit test.
   if (cpi->oxcf.motion_vector_unit_test == 1)
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index c449c8d..d66db76 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -410,7 +410,7 @@
   // go down at least to the specified level.
   BLOCK_SIZE rd_auto_partition_min_limit;
 
-  // Min and max partition size we enable (block_size) as per auto
+  // Min and max square partition size we enable (block_size) as per auto
   // min max, but also used by adjust partitioning, and pick_partitioning.
   BLOCK_SIZE default_min_partition_size;
   BLOCK_SIZE default_max_partition_size;