Specialize split_only_threshold for lowres on speed 1-2

Performance on Speed 1:
 AVG_PSNR | OVR_PSNR |  SSIM   | AVG_SPDUP | OVR_SPDUP |
  -0.001% |  -0.004% | +0.025% |  +1.551%  |  +1.405%  |

STATS_CHANGED

Change-Id: I20f86677db06447fe4991255130cd5aac7ec5bcc
diff --git a/av1/encoder/partition_model_weights.h b/av1/encoder/partition_model_weights.h
index 873c7c3..ac2890c 100644
--- a/av1/encoder/partition_model_weights.h
+++ b/av1/encoder/partition_model_weights.h
@@ -2702,27 +2702,34 @@
 #undef NUM_LOGITS_16
 
 // Slower higher quality split model
-static const float av1_simple_motion_search_split_thresh_128 =
-    5.839480f;  // p = 0.997098
-static const float av1_simple_motion_search_split_thresh_64 =
-    1.877167f;  // p = 0.867285
-static const float av1_simple_motion_search_split_thresh_32 =
-    3.073499f;  // p = 0.955783
-static const float av1_simple_motion_search_split_thresh_16 =
-    1.405601f;  // p = 0.803071
-static const float av1_simple_motion_search_split_thresh_8 =
-    2.555636f;  // p = 0.927951
+// Threshold from BLOCK_128X128 to BLOCK_8X88
+static const float av1_simple_motion_search_split_midres_thresh[5] = {
+  5.839480f,  // p = 0.997098
+  1.877167f,  // p = 0.867285
+  3.073499f,  // p = 0.955783
+  1.405601f,  // p = 0.803071
+  2.555636f,  // p = 0.927951
+};
 
-static const float av1_simple_motion_search_no_split_thresh_128 =
-    -3.38168078f;  // p = 0.032872917
-static const float av1_simple_motion_search_no_split_thresh_64 =
-    -4.08610739f;  // p = 0.14393017
-static const float av1_simple_motion_search_no_split_thresh_32 =
-    -1.7830237f;  // p = 0.15270848
-static const float av1_simple_motion_search_no_split_thresh_16 =
-    -10.0f;  // p = 0
-static const float av1_simple_motion_search_no_split_thresh_8 =
-    -10.0f;  // p = 0
+static const float av1_simple_motion_search_split_midres_no_thresh[5] = {
+  -3.38168078f,  // p = 0.032872917
+  -4.08610739f,  // p = 0.14393017
+  -1.7830237f,   // p = 0.15270848
+  -100.0f,       // p = 0
+  -100.0f,       // p = 0
+};
+
+static const float av1_simple_motion_search_split_lowres_thresh[5] = {
+  1.40402595879f,  // 0.8028197
+  4.72845183649f,  // 0.99123732
+  1.86517797783f,  // 0.86589934
+  1.58715223005f,  // 0.83021506
+  7.22695596987f,  // 0.9992738
+};
+
+static const float av1_simple_motion_search_split_lowres_no_thresh[5] = {
+  -100.0f, -100.0f, -100.0f, -100.0f, -100.0f,
+};
 
 static const float av1_simple_motion_search_split_mean_128[17] = {
   14.119120f, 14.087010f, 12.016185f, 11.966075f, 12.042454f, 11.994805f,
@@ -2784,6 +2791,20 @@
   0.759407f, 0.759684f, 0.089830f, 0.742797f, 0.730632f,
 };
 
+static const float *const av1_simple_motion_search_split_mean[5] = {
+  av1_simple_motion_search_split_mean_128,
+  av1_simple_motion_search_split_mean_64,
+  av1_simple_motion_search_split_mean_32,
+  av1_simple_motion_search_split_mean_16,
+  av1_simple_motion_search_split_mean_8,
+};
+
+static const float *const av1_simple_motion_search_split_std[5] = {
+  av1_simple_motion_search_split_std_128, av1_simple_motion_search_split_std_64,
+  av1_simple_motion_search_split_std_32,  av1_simple_motion_search_split_std_16,
+  av1_simple_motion_search_split_std_8,
+};
+
 #define NUM_HIDDEN_LAYERS_128 1
 #define NUM_FEATURES_128 17
 #define NUM_LAYER_0_UNITS_128 20
@@ -3366,6 +3387,14 @@
 #undef NUM_LAYER_0_UNITS_8
 #undef NUM_LOGITS_8
 
+static const NN_CONFIG *const av1_simple_motion_search_split_nn_config[5] = {
+  &av1_simple_motion_search_split_nn_config_128,
+  &av1_simple_motion_search_split_nn_config_64,
+  &av1_simple_motion_search_split_nn_config_32,
+  &av1_simple_motion_search_split_nn_config_16,
+  &av1_simple_motion_search_split_nn_config_8,
+};
+
 // Model based on simple_motion_search
 
 // Thresholds for doing a single type of partition
diff --git a/av1/encoder/partition_strategy.c b/av1/encoder/partition_strategy.c
index 0a96914..695a80e 100644
--- a/av1/encoder/partition_strategy.c
+++ b/av1/encoder/partition_strategy.c
@@ -132,6 +132,17 @@
   }
 }
 
+static int convert_bsize_to_idx(BLOCK_SIZE bsize) {
+  switch (bsize) {
+    case BLOCK_128X128: return 0;
+    case BLOCK_64X64: return 1;
+    case BLOCK_32X32: return 2;
+    case BLOCK_16X16: return 3;
+    case BLOCK_8X8: return 4;
+    default: assert(0 && "Invalid bsize"); return -1;
+  }
+}
+
 void av1_simple_motion_search_based_split(
     AV1_COMP *const cpi, MACROBLOCK *x, PC_TREE *pc_tree, int mi_row,
     int mi_col, BLOCK_SIZE bsize, int *partition_none_allowed,
@@ -147,42 +158,28 @@
   }
 
   aom_clear_system_state();
-  const NN_CONFIG *nn_config = NULL;
-  const float *ml_mean = NULL, *ml_std = NULL;
-  float split_only_thresh = 10.0f, no_split_thresh = -10.0f;
-  if (bsize == BLOCK_128X128) {
-    ml_mean = av1_simple_motion_search_split_mean_128;
-    ml_std = av1_simple_motion_search_split_std_128;
-    nn_config = &av1_simple_motion_search_split_nn_config_128;
-    split_only_thresh = av1_simple_motion_search_split_thresh_128;
-    no_split_thresh = av1_simple_motion_search_no_split_thresh_128;
-  } else if (bsize == BLOCK_64X64) {
-    ml_mean = av1_simple_motion_search_split_mean_64;
-    ml_std = av1_simple_motion_search_split_std_64;
-    nn_config = &av1_simple_motion_search_split_nn_config_64;
-    split_only_thresh = av1_simple_motion_search_split_thresh_64;
-    no_split_thresh = av1_simple_motion_search_no_split_thresh_64;
-  } else if (bsize == BLOCK_32X32) {
-    ml_mean = av1_simple_motion_search_split_mean_32;
-    ml_std = av1_simple_motion_search_split_std_32;
-    nn_config = &av1_simple_motion_search_split_nn_config_32;
-    split_only_thresh = av1_simple_motion_search_split_thresh_32;
-    no_split_thresh = av1_simple_motion_search_no_split_thresh_32;
-  } else if (bsize == BLOCK_16X16) {
-    ml_mean = av1_simple_motion_search_split_mean_16;
-    ml_std = av1_simple_motion_search_split_std_16;
-    nn_config = &av1_simple_motion_search_split_nn_config_16;
-    split_only_thresh = av1_simple_motion_search_split_thresh_16;
-    no_split_thresh = av1_simple_motion_search_no_split_thresh_16;
-  } else if (bsize == BLOCK_8X8) {
-    ml_mean = av1_simple_motion_search_split_mean_8;
-    ml_std = av1_simple_motion_search_split_std_8;
-    nn_config = &av1_simple_motion_search_split_nn_config_8;
-    split_only_thresh = av1_simple_motion_search_split_thresh_8;
-    no_split_thresh = av1_simple_motion_search_no_split_thresh_8;
+
+  const AV1_COMMON *const cm = &cpi->common;
+  const int is_480p_or_larger = AOMMIN(cm->width, cm->height) >= 480;
+  const int bsize_idx = convert_bsize_to_idx(bsize);
+
+  assert(bsize_idx >= 0 && bsize_idx <= 4 &&
+         "Invalid bsize in simple_motion_search_based_split");
+
+  float split_only_thresh = 100.0f, no_split_thresh = -100.0f;
+
+  const float *ml_mean = av1_simple_motion_search_split_mean[bsize_idx];
+  const float *ml_std = av1_simple_motion_search_split_std[bsize_idx];
+  const NN_CONFIG *nn_config =
+      av1_simple_motion_search_split_nn_config[bsize_idx];
+  if (is_480p_or_larger) {
+    split_only_thresh = av1_simple_motion_search_split_midres_thresh[bsize_idx];
+    no_split_thresh =
+        av1_simple_motion_search_split_midres_no_thresh[bsize_idx];
   } else {
-    assert(0 && "Unexpected block size in simple_motion_based_split");
-    return;
+    split_only_thresh = av1_simple_motion_search_split_lowres_thresh[bsize_idx];
+    no_split_thresh =
+        av1_simple_motion_search_split_lowres_no_thresh[bsize_idx];
   }
 
   float features[FEATURE_SIZE_SMS_SPLIT] = { 0.0f };