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 };
