Add 32x128/128x32 block sizes

Change-Id: Ieb28f40d85e4db4af33648c32c406dd2931ceb89
diff --git a/aom_dsp/aom_dsp_rtcd_defs.pl b/aom_dsp/aom_dsp_rtcd_defs.pl
index ff44bbc..52af0d1 100755
--- a/aom_dsp/aom_dsp_rtcd_defs.pl
+++ b/aom_dsp/aom_dsp_rtcd_defs.pl
@@ -47,6 +47,10 @@
   push @block_sizes, [32, 8];
   push @block_sizes, [16, 64];
   push @block_sizes, [64, 16];
+  if (aom_config("CONFIG_EXT_PARTITION") eq "yes") {
+      push @block_sizes, [32, 128];
+      push @block_sizes, [128, 32];
+  }
 }
 
 @tx_dims = (2, 4, 8, 16, 32);
@@ -820,14 +824,18 @@
     foreach (@block_sizes) {
       ($w, $h) = @$_;
       add_proto qw/unsigned int/, "aom_obmc_sad${w}x${h}", "const uint8_t *pre, int pre_stride, const int32_t *wsrc, const int32_t *mask";
-      specialize "aom_obmc_sad${w}x${h}", qw/sse4_1/;
+      if (! (($w == 128 && $h == 32) || ($w == 32 && $h == 128))) {
+         specialize "aom_obmc_sad${w}x${h}", qw/sse4_1/;
+      }
     }
 
     if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
       foreach (@block_sizes) {
         ($w, $h) = @$_;
         add_proto qw/unsigned int/, "aom_highbd_obmc_sad${w}x${h}", "const uint8_t *pre, int pre_stride, const int32_t *wsrc, const int32_t *mask";
-        specialize "aom_highbd_obmc_sad${w}x${h}", qw/sse4_1/;
+        if (! (($w == 128 && $h == 32) || ($w == 32 && $h == 128))) {
+          specialize "aom_highbd_obmc_sad${w}x${h}", qw/sse4_1/;
+        }
       }
     }
   }
diff --git a/aom_dsp/sad.c b/aom_dsp/sad.c
index 6adb69c..9654746 100644
--- a/aom_dsp/sad.c
+++ b/aom_dsp/sad.c
@@ -167,11 +167,15 @@
 sadMxNx4D(16, 64)
 sadMxN(64, 16)
 sadMxNx4D(64, 16)
+sadMxN(32, 128)
+sadMxNx4D(32, 128)
+sadMxN(128, 32)
+sadMxNx4D(128, 32)
 #endif
 /* clang-format on */
 
 #if CONFIG_HIGHBITDEPTH
-                        static INLINE
+                            static INLINE
     unsigned int highbd_sad(const uint8_t *a8, int a_stride, const uint8_t *b8,
                             int b_stride, int width, int height) {
   int y, x;
@@ -336,12 +340,16 @@
 highbd_sadMxNx4D(16, 64)
 highbd_sadMxN(64, 16)
 highbd_sadMxNx4D(64, 16)
+highbd_sadMxN(32, 128)
+highbd_sadMxNx4D(32, 128)
+highbd_sadMxN(128, 32)
+highbd_sadMxNx4D(128, 32)
 #endif
 /* clang-format on */
 #endif  // CONFIG_HIGHBITDEPTH
 
 #if CONFIG_AV1 && CONFIG_EXT_INTER
-                                    static INLINE
+                                                static INLINE
     unsigned int masked_sad(const uint8_t *src, int src_stride,
                             const uint8_t *a, int a_stride, const uint8_t *b,
                             int b_stride, const uint8_t *m, int m_stride,
@@ -405,11 +413,13 @@
 MASKSADMxN(32, 8)
 MASKSADMxN(16, 64)
 MASKSADMxN(64, 16)
+MASKSADMxN(32, 128)
+MASKSADMxN(128, 32)
 #endif
 /* clang-format on */
 
 #if CONFIG_HIGHBITDEPTH
-                            static INLINE
+                                static INLINE
     unsigned int highbd_masked_sad(const uint8_t *src8, int src_stride,
                                    const uint8_t *a8, int a_stride,
                                    const uint8_t *b8, int b_stride,
@@ -476,6 +486,8 @@
 HIGHBD_MASKSADMXN(32, 8)
 HIGHBD_MASKSADMXN(16, 64)
 HIGHBD_MASKSADMXN(64, 16)
+HIGHBD_MASKSADMXN(32, 128)
+HIGHBD_MASKSADMXN(128, 32)
 #endif
 #endif  // CONFIG_HIGHBITDEPTH
 #endif  // CONFIG_AV1 && CONFIG_EXT_INTER
@@ -536,11 +548,13 @@
 OBMCSADMxN(32, 8)
 OBMCSADMxN(16, 64)
 OBMCSADMxN(64, 16)
+OBMCSADMxN(32, 128)
+OBMCSADMxN(128, 32)
 #endif
 /* clang-format on */
 
 #if CONFIG_HIGHBITDEPTH
-                            static INLINE
+                                static INLINE
     unsigned int highbd_obmc_sad(const uint8_t *pre8, int pre_stride,
                                  const int32_t *wsrc, const int32_t *mask,
                                  int width, int height) {
@@ -594,6 +608,8 @@
 HIGHBD_OBMCSADMXN(32, 8)
 HIGHBD_OBMCSADMXN(16, 64)
 HIGHBD_OBMCSADMXN(64, 16)
+HIGHBD_OBMCSADMXN(32, 128)
+HIGHBD_OBMCSADMXN(128, 32)
 #endif
 /* clang-format on */
 #endif  // CONFIG_HIGHBITDEPTH
diff --git a/aom_dsp/variance.c b/aom_dsp/variance.c
index 56f6d1f..18dea65 100644
--- a/aom_dsp/variance.c
+++ b/aom_dsp/variance.c
@@ -258,7 +258,11 @@
 VARIANCES(32, 8)
 VARIANCES(16, 64)
 VARIANCES(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+VARIANCES(32, 128)
+VARIANCES(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_AV1 && CONFIG_EXT_PARTITION_TYPES
 
 GET_VAR(16, 16)
 GET_VAR(8, 8)
@@ -665,7 +669,11 @@
 HIGHBD_VARIANCES(32, 8)
 HIGHBD_VARIANCES(16, 64)
 HIGHBD_VARIANCES(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+HIGHBD_VARIANCES(32, 128)
+HIGHBD_VARIANCES(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_AV1 && CONFIG_EXT_PARTITION_TYPES
 
 HIGHBD_GET_VAR(8)
 HIGHBD_GET_VAR(16)
@@ -854,7 +862,11 @@
 MASK_SUBPIX_VAR(32, 8)
 MASK_SUBPIX_VAR(16, 64)
 MASK_SUBPIX_VAR(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+MASK_SUBPIX_VAR(32, 128)
+MASK_SUBPIX_VAR(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 #if CONFIG_HIGHBITDEPTH
 void aom_highbd_comp_mask_pred_c(uint16_t *comp_pred, const uint8_t *pred8,
@@ -993,7 +1005,11 @@
 HIGHBD_MASK_SUBPIX_VAR(32, 8)
 HIGHBD_MASK_SUBPIX_VAR(16, 64)
 HIGHBD_MASK_SUBPIX_VAR(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+HIGHBD_MASK_SUBPIX_VAR(32, 128)
+HIGHBD_MASK_SUBPIX_VAR(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_HIGHBITDEPTH
 #endif  // CONFIG_AV1 && CONFIG_EXT_INTER
 
@@ -1106,7 +1122,13 @@
 OBMC_SUBPIX_VAR(16, 64)
 OBMC_VAR(64, 16)
 OBMC_SUBPIX_VAR(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+OBMC_VAR(32, 128)
+OBMC_SUBPIX_VAR(32, 128)
+OBMC_VAR(128, 32)
+OBMC_SUBPIX_VAR(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 #if CONFIG_HIGHBITDEPTH
 static INLINE void highbd_obmc_variance64(const uint8_t *pre8, int pre_stride,
@@ -1303,6 +1325,12 @@
 HIGHBD_OBMC_SUBPIX_VAR(16, 64)
 HIGHBD_OBMC_VAR(64, 16)
 HIGHBD_OBMC_SUBPIX_VAR(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+HIGHBD_OBMC_VAR(32, 128)
+HIGHBD_OBMC_SUBPIX_VAR(32, 128)
+HIGHBD_OBMC_VAR(128, 32)
+HIGHBD_OBMC_SUBPIX_VAR(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_HIGHBITDEPTH
 #endif  // CONFIG_AV1 && CONFIG_MOTION_VAR
diff --git a/aom_dsp/x86/highbd_subtract_sse2.c b/aom_dsp/x86/highbd_subtract_sse2.c
index e9050cc..befd812 100644
--- a/aom_dsp/x86/highbd_subtract_sse2.c
+++ b/aom_dsp/x86/highbd_subtract_sse2.c
@@ -215,6 +215,10 @@
 SUBTRACT_FUN(32x8) { STACK_H(16, subtract_16x8); }
 SUBTRACT_FUN(16x64) { STACK_V(32, subtract_16x32); }
 SUBTRACT_FUN(64x16) { STACK_H(32, subtract_32x16); }
+#if CONFIG_EXT_PARTITION
+SUBTRACT_FUN(32x128) { STACK_V(64, subtract_32x64); }
+SUBTRACT_FUN(128x32) { STACK_H(64, subtract_64x32); }
+#endif
 
 static SubtractWxHFuncType getSubtractFunc(int rows, int cols) {
   if (rows == 4) {
@@ -240,6 +244,9 @@
     if (cols == 16) return subtract_16x32;
     if (cols == 32) return subtract_32x32;
     if (cols == 64) return subtract_64x32;
+#if CONFIG_EXT_PARTITION
+    if (cols == 128) return subtract_128x32;
+#endif  // CONFIG_EXT_PARTITION
   }
   if (rows == 64) {
     if (cols == 16) return subtract_16x64;
@@ -251,6 +258,7 @@
   }
 #if CONFIG_EXT_PARTITION
   if (rows == 128) {
+    if (cols == 32) return subtract_32x128;
     if (cols == 64) return subtract_64x128;
     if (cols == 128) return subtract_128x128;
   }
diff --git a/aom_dsp/x86/masked_sad_intrin_ssse3.c b/aom_dsp/x86/masked_sad_intrin_ssse3.c
index 0af61d0..2536f91 100644
--- a/aom_dsp/x86/masked_sad_intrin_ssse3.c
+++ b/aom_dsp/x86/masked_sad_intrin_ssse3.c
@@ -100,7 +100,11 @@
 MASKSADMXN_SSSE3(32, 8)
 MASKSADMXN_SSSE3(16, 64)
 MASKSADMXN_SSSE3(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+MASKSADMXN_SSSE3(32, 128)
+MASKSADMXN_SSSE3(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 static INLINE unsigned int masked_sad_ssse3(const uint8_t *src_ptr,
                                             int src_stride,
@@ -298,7 +302,11 @@
 HIGHBD_MASKSADMXN_SSSE3(32, 8)
 HIGHBD_MASKSADMXN_SSSE3(16, 64)
 HIGHBD_MASKSADMXN_SSSE3(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+HIGHBD_MASKSADMXN_SSSE3(32, 128)
+HIGHBD_MASKSADMXN_SSSE3(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 static INLINE unsigned int highbd_masked_sad_ssse3(
     const uint8_t *src8, int src_stride, const uint8_t *a8, int a_stride,
diff --git a/aom_dsp/x86/masked_variance_intrin_ssse3.c b/aom_dsp/x86/masked_variance_intrin_ssse3.c
index 853a872..d9118e7 100644
--- a/aom_dsp/x86/masked_variance_intrin_ssse3.c
+++ b/aom_dsp/x86/masked_variance_intrin_ssse3.c
@@ -133,7 +133,11 @@
 MASK_SUBPIX_VAR_SSSE3(32, 8)
 MASK_SUBPIX_VAR_SSSE3(64, 16)
 MASK_SUBPIX_VAR_SSSE3(16, 64)
-#endif
+#if CONFIG_EXT_PARTITION
+MASK_SUBPIX_VAR_SSSE3(128, 32)
+MASK_SUBPIX_VAR_SSSE3(32, 128)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 static INLINE __m128i filter_block(const __m128i a, const __m128i b,
                                    const __m128i filter) {
@@ -716,6 +720,10 @@
 HIGHBD_MASK_SUBPIX_VAR_SSSE3(32, 8)
 HIGHBD_MASK_SUBPIX_VAR_SSSE3(16, 64)
 HIGHBD_MASK_SUBPIX_VAR_SSSE3(64, 16)
+#if CONFIG_EXT_PARTITION
+HIGHBD_MASK_SUBPIX_VAR_SSSE3(32, 128)
+HIGHBD_MASK_SUBPIX_VAR_SSSE3(128, 32)
+#endif
 #endif
 
 static INLINE __m128i highbd_filter_block(const __m128i a, const __m128i b,
diff --git a/aom_dsp/x86/obmc_variance_sse4.c b/aom_dsp/x86/obmc_variance_sse4.c
index 15bdbfa..392616a 100644
--- a/aom_dsp/x86/obmc_variance_sse4.c
+++ b/aom_dsp/x86/obmc_variance_sse4.c
@@ -153,7 +153,11 @@
 OBMCVARWXH(32, 8)
 OBMCVARWXH(16, 64)
 OBMCVARWXH(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+OBMCVARWXH(32, 128)
+OBMCVARWXH(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 ////////////////////////////////////////////////////////////////////////////////
 // High bit-depth
@@ -368,5 +372,9 @@
 HBD_OBMCVARWXH(32, 8)
 HBD_OBMCVARWXH(16, 64)
 HBD_OBMCVARWXH(64, 16)
-#endif
+#if CONFIG_EXT_PARTITION
+HBD_OBMCVARWXH(32, 128)
+HBD_OBMCVARWXH(128, 32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_HIGHBITDEPTH
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index f605504..a41d0ee 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -2751,7 +2751,11 @@
       8 - 1,    // BLOCK_8X32,
       32 - 1,   // BLOCK_32X8,
       16 - 1,   // BLOCK_16X64,
-      64 - 1    // BLOCK_64X16
+      64 - 1,   // BLOCK_64X16
+#if CONFIG_EXT_PARTITION
+      32 - 1,   // BLOCK_32X128
+      128 - 1,  // BLOCK_128X32
+#endif          // CONFIG_EXT_PARTITION
   },
   // mask for horizontal edges filtering
   {
@@ -2783,7 +2787,11 @@
       32 - 1,   // BLOCK_8X32,
       8 - 1,    // BLOCK_32X8,
       64 - 1,   // BLOCK_16X64,
-      16 - 1    // BLOCK_64X16
+      16 - 1,   // BLOCK_64X16
+#if CONFIG_EXT_PARTITION
+      128 - 1,  // BLOCK_32X128
+      32 - 1,   // BLOCK_128X32
+#endif          // CONFIG_EXT_PARTITION
   },
 };
 
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 9de3757..896ead5 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -1087,6 +1087,10 @@
     0,  // BLOCK_32X8
     0,  // BLOCK_16X64
     0,  // BLOCK_64X16
+#if CONFIG_EXT_PARTITION
+    0,  // BLOCK_32X128
+    0,  // BLOCK_128X32
+#endif  // CONFIG_EXT_PARTITION
   };
 
   return LUT[bsize];
@@ -1132,6 +1136,10 @@
     0,  // BLOCK_32X8
     0,  // BLOCK_16X64
     0,  // BLOCK_64X16
+#if CONFIG_EXT_PARTITION
+    0,  // BLOCK_32X128
+    0,  // BLOCK_128X32
+#endif  // CONFIG_EXT_PARTITION
   };
 
   return LUT_QTTX[bsize];
diff --git a/av1/common/common_data.h b/av1/common/common_data.h
index d532735..bee642b 100644
--- a/av1/common/common_data.h
+++ b/av1/common/common_data.h
@@ -29,41 +29,93 @@
 // Log 2 conversion lookup tables for block width and height
 static const uint8_t b_width_log2_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  0, 0, 0,
+  0, 0,
+  0,
 #endif
-  0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, IF_EXT_PARTITION(4, 5, 5) 0,
-  2, 1, 3, 2, 4
+  0, 0,
+  1, 1,
+  1, 2,
+  2, 2,
+  3, 3,
+  3, 4,
+  4, IF_EXT_PARTITION(4, 5, 5) 0,
+  2, 1,
+  3, 2,
+  4, IF_EXT_PARTITION(3, 5)
 };
 static const uint8_t b_height_log2_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  0, 0, 0,
+  0, 0,
+  0,
 #endif
-  0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, IF_EXT_PARTITION(5, 4, 5) 2,
-  0, 3, 1, 4, 2
+  0, 1,
+  0, 1,
+  2, 1,
+  2, 3,
+  2, 3,
+  4, 3,
+  4, IF_EXT_PARTITION(5, 4, 5) 2,
+  0, 3,
+  1, 4,
+  2, IF_EXT_PARTITION(5, 3)
 };
 // Log 2 conversion lookup tables for modeinfo width and height
 static const uint8_t mi_width_log2_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CB4X4
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  0, 0, 0,
+  0, 0,
+  0,
 #endif
-  0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, IF_EXT_PARTITION(4, 5, 5) 0,
-  2, 1, 3, 2, 4
+  0, 0,
+  1, 1,
+  1, 2,
+  2, 2,
+  3, 3,
+  3, 4,
+  4, IF_EXT_PARTITION(4, 5, 5) 0,
+  2, 1,
+  3, 2,
+  4, IF_EXT_PARTITION(3, 5)
 #else  // CONFIG_CB4X4
-  0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, IF_EXT_PARTITION(3, 4, 4) 0,
-  1, 0, 2, 1, 3
+  0, 0,
+  0, 0,
+  0, 1,
+  1, 1,
+  2, 2,
+  2, 3,
+  3, IF_EXT_PARTITION(3, 4, 4) 0,
+  1, 0,
+  2, 1,
+  3, IF_EXT_PARTITION(2, 4)
 #endif
 };
 static const uint8_t mi_height_log2_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CB4X4
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  0, 0, 0,
+  0, 0,
+  0,
 #endif
-  0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, IF_EXT_PARTITION(5, 4, 5) 2,
-  0, 3, 1, 4, 2
+  0, 1,
+  0, 1,
+  2, 1,
+  2, 3,
+  2, 3,
+  4, 3,
+  4, IF_EXT_PARTITION(5, 4, 5) 2,
+  0, 3,
+  1, 4,
+  2, IF_EXT_PARTITION(5, 3)
 #else  // CONFIG_CB4X4
-  0, 0, 0, 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, IF_EXT_PARTITION(4, 3, 4) 1,
-  0, 2, 0, 3, 1
+  0, 0,
+  0, 0,
+  1, 0,
+  1, 2,
+  1, 2,
+  3, 2,
+  3, IF_EXT_PARTITION(4, 3, 4) 1,
+  0, 2,
+  0, 3,
+  1, IF_EXT_PARTITION(2, 4)
 #endif
 };
 
@@ -74,10 +126,10 @@
   1, 1, 1,
 #endif
   1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16,
-  IF_EXT_PARTITION(16, 32, 32)  1, 4, 2, 8, 4, 16
+  IF_EXT_PARTITION(16, 32, 32)  1, 4, 2, 8, 4, 16, IF_EXT_PARTITION(8, 32)
 #else  // CONFIG_CB4X4
   1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, IF_EXT_PARTITION(8, 16, 16) 1, 2, 1, 4,
-  2, 8
+  2, 8, IF_EXT_PARTITION(4, 16)
 #endif
 };
 static const uint8_t mi_size_high[BLOCK_SIZES_ALL] = {
@@ -86,10 +138,10 @@
   1, 1, 1,
 #endif
   1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16,
-  IF_EXT_PARTITION(32, 16, 32)  4, 1, 8, 2, 16, 4
+  IF_EXT_PARTITION(32, 16, 32)  4, 1, 8, 2, 16, 4, IF_EXT_PARTITION(32, 8)
 #else  // CONFIG_CB4X4
   1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, IF_EXT_PARTITION(16, 8, 16) 2, 1, 4, 1,
-  8, 2
+  8, 2, IF_EXT_PARTITION(16, 4)
 #endif
 };
 /* clang-format on */
@@ -97,80 +149,168 @@
 // Width/height lookup tables in units of various block sizes
 static const uint8_t block_size_wide[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  2,  2,  4,
+  2,  2,
+  4,
 #endif
-  4,  4,  8,  8,  8,  16, 16,
-  16, 32, 32, 32, 64, 64, IF_EXT_PARTITION(64, 128, 128) 4,
-  16, 8,  32, 16, 64
+  4,  4,
+  8,  8,
+  8,  16,
+  16, 16,
+  32, 32,
+  32, 64,
+  64, IF_EXT_PARTITION(64, 128, 128) 4,
+  16, 8,
+  32, 16,
+  64, IF_EXT_PARTITION(32, 128)
 };
 
 static const uint8_t block_size_high[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  2,  4,  2,
+  2,  4,
+  2,
 #endif
-  4,  8,  4,  8,  16, 8,  16,
-  32, 16, 32, 64, 32, 64, IF_EXT_PARTITION(128, 64, 128) 16,
-  4,  32, 8,  64, 16
+  4,  8,
+  4,  8,
+  16, 8,
+  16, 32,
+  16, 32,
+  64, 32,
+  64, IF_EXT_PARTITION(128, 64, 128) 16,
+  4,  32,
+  8,  64,
+  16, IF_EXT_PARTITION(128, 32)
 };
 
 static const uint8_t num_4x4_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1,  1,
+  1,
 #endif
-  1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16, IF_EXT_PARTITION(16, 32, 32) 1,
-  4, 2, 8, 4, 16
+  1,  1,
+  2,  2,
+  2,  4,
+  4,  4,
+  8,  8,
+  8,  16,
+  16, IF_EXT_PARTITION(16, 32, 32) 1,
+  4,  2,
+  8,  4,
+  16, IF_EXT_PARTITION(8, 32)
 };
 static const uint8_t num_4x4_blocks_high_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1,  1,
+  1,
 #endif
-  1, 2, 1, 2,  4, 2, 4, 8, 4, 8, 16, 8, 16, IF_EXT_PARTITION(32, 16, 32) 4,
-  1, 8, 2, 16, 4
+  1,  2,
+  1,  2,
+  4,  2,
+  4,  8,
+  4,  8,
+  16, 8,
+  16, IF_EXT_PARTITION(32, 16, 32) 4,
+  1,  8,
+  2,  16,
+  4,  IF_EXT_PARTITION(32, 8)
 };
 static const uint8_t num_8x8_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1, 1,
+  1,
 #endif
-  1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, IF_EXT_PARTITION(8, 16, 16) 1,
-  2, 1, 4, 2, 8
+  1, 1,
+  1, 1,
+  1, 2,
+  2, 2,
+  4, 4,
+  4, 8,
+  8, IF_EXT_PARTITION(8, 16, 16) 1,
+  2, 1,
+  4, 2,
+  8, IF_EXT_PARTITION(4, 16)
 };
 static const uint8_t num_8x8_blocks_high_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1, 1,
+  1,
 #endif
-  1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, IF_EXT_PARTITION(16, 8, 16) 2,
-  1, 4, 1, 8, 2
+  1, 1,
+  1, 1,
+  2, 1,
+  2, 4,
+  2, 4,
+  8, 4,
+  8, IF_EXT_PARTITION(16, 8, 16) 2,
+  1, 4,
+  1, 8,
+  2, IF_EXT_PARTITION(16, 4)
 };
 static const uint8_t num_16x16_blocks_wide_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1, 1,
+  1,
 #endif
-  1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 4, 4, IF_EXT_PARTITION(4, 8, 8) 1,
-  1, 1, 2, 2, 4
+  1, 1,
+  1, 1,
+  1, 1,
+  1, 1,
+  2, 2,
+  2, 4,
+  4, IF_EXT_PARTITION(4, 8, 8) 1,
+  1, 1,
+  2, 2,
+  4, IF_EXT_PARTITION(2, 8)
 };
 static const uint8_t num_16x16_blocks_high_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  1, 1, 1,
+  1, 1,
+  1,
 #endif
-  1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 4, 2, 4, IF_EXT_PARTITION(8, 4, 8) 1,
-  1, 2, 1, 4, 2
+  1, 1,
+  1, 1,
+  1, 1,
+  1, 2,
+  1, 2,
+  4, 2,
+  4, IF_EXT_PARTITION(8, 4, 8) 1,
+  1, 2,
+  1, 4,
+  2, IF_EXT_PARTITION(8, 2)
 };
 
 // AOMMIN(3, AOMMIN(b_width_log2(bsize), b_height_log2(bsize)))
 static const uint8_t size_group_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  0, 0, 0,
+  0, 0,
+  0,
 #endif
-  0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, IF_EXT_PARTITION(3, 3, 3) 0,
-  0, 1, 1, 2, 2
+  0, 0,
+  0, 1,
+  1, 1,
+  2, 2,
+  2, 3,
+  3, 3,
+  3, IF_EXT_PARTITION(3, 3, 3) 0,
+  0, 1,
+  1, 2,
+  2, IF_EXT_PARTITION(3, 3)
 };
 
 static const uint8_t num_pels_log2_lookup[BLOCK_SIZES_ALL] = {
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
-  2, 3, 3,
+  2,  3,
+  3,
 #endif
-  4, 5, 5, 6,  7, 7, 8, 9, 9, 10, 11, 11, 12, IF_EXT_PARTITION(13, 13, 14) 6,
-  6, 8, 8, 10, 10
+  4,  5,
+  5,  6,
+  7,  7,
+  8,  9,
+  9,  10,
+  11, 11,
+  12, IF_EXT_PARTITION(13, 13, 14) 6,
+  6,  8,
+  8,  10,
+  10, IF_EXT_PARTITION(12, 12)
 };
 
 /* clang-format off */
@@ -203,6 +343,10 @@
     BLOCK_4X16,    BLOCK_16X4,    BLOCK_8X32,
     // 32X8,       16X64,         64X16
     BLOCK_32X8,    BLOCK_16X64,   BLOCK_64X16,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_32X128,  BLOCK_128X32
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_HORZ
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -229,6 +373,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_VERT
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -255,6 +403,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_SPLIT
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -278,6 +430,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
 #if CONFIG_EXT_PARTITION_TYPES
   }, {  // PARTITION_HORZ_A
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
@@ -302,6 +458,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_HORZ_B
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -325,6 +485,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_VERT_A
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -348,6 +512,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_VERT_B
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
     // 2X2,        2X4,           4X2,
@@ -371,6 +539,10 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_HORZ_4
 #if CONFIG_CB4X4
     // 2X2,        2X4,           4X2,
@@ -391,12 +563,16 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X16,
 #if CONFIG_EXT_PARTITION
     // 64x128,     128x64,        128x128
-    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+    BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X32,
 #endif  // CONFIG_EXT_PARTITION
     // 4X16,       16X4,          8X32
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
   }, {  // PARTITION_VERT_4
 #if CONFIG_CB4X4
     // 2X2,        2X4,           4X2,
@@ -417,12 +593,16 @@
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X64,
 #if CONFIG_EXT_PARTITION
     // 64x128,     128x64,        128x128
-    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+    BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X128,
 #endif  // CONFIG_EXT_PARTITION
     // 4X16,       16X4,          8X32
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
     // 32X8,       16X64,         64X16
     BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
+    // 32x128,     128x32
+    BLOCK_INVALID, BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
 #endif  // CONFIG_EXT_PARTITION_TYPES
   }
 };
@@ -462,7 +642,11 @@
   // 4x16,   16x4,     8x32
   TX_4X4,    TX_4X4,   TX_8X8,
   // 32x8,   16x64     64x16
-  TX_8X8,    TX_16X16, TX_16X16
+  TX_8X8,    TX_16X16, TX_16X16,
+#if CONFIG_EXT_PARTITION
+  // 32x128  128x32
+  TX_32X32,  TX_32X32
+#endif  // CONFIG_EXT_PARTITION
 };
 
 #if CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
@@ -509,8 +693,12 @@
   // 32x8
   TX_16X8,
 #endif
-  // 16x64     64x16
-  TX_16X32, TX_32X16
+  // 16x64,  64x16
+  TX_16X32,  TX_32X16,
+#if CONFIG_EXT_PARTITION
+  // 32x128  128x32
+  TX_32X32,  TX_32X32
+#endif  // CONFIG_EXT_PARTITION
 };
 
 #if CONFIG_RECT_TX_EXT
@@ -536,7 +724,11 @@
   // 4x16,    16x4,       8x32
   TX_4X16,    TX_16X4,    TX_8X32,
   // 32x8     16x64       64x16
-  TX_32X8,    TX_INVALID, TX_INVALID
+  TX_32X8,    TX_INVALID, TX_INVALID,
+#if CONFIG_EXT_PARTITION
+  // 32x128   128x32
+  TX_INVALID, TX_INVALID
+#endif  // CONFIG_EXT_PARTITION
 };
 #endif
 #else
@@ -605,7 +797,11 @@
   // 4x16,            16x4,               8x32
   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,
   // 32x8,            16x64,              64x16
-  TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8
+  TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8,
+#if CONFIG_EXT_PARTITION
+  // 32x128,          128x32
+  TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8
+#endif  // CONFIG_EXT_PARTITION
 };
 #else
 // Same as "max_txsize_lookup[bsize] - TX_8X8", invalid for bsize < 8X8
@@ -643,6 +839,10 @@
   TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,    TX_8X8 - TX_8X8,
   // 32x8             16x64,              64x16
   TX_8X8 - TX_8X8,    TX_16X16 - TX_8X8,  TX_16X16 - TX_8X8
+#if CONFIG_EXT_PARTITION
+  // 32x128,          128x32
+  TX_32X32 - TX_8X8,  TX_32X32 - TX_8X8
+#endif  // CONFIG_EXT_PARTITION
 };
 #endif  // CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
 
@@ -951,6 +1151,10 @@
   { { BLOCK_32X8, BLOCK_INVALID }, { BLOCK_16X8, BLOCK_16X4 } },
   { { BLOCK_16X64, BLOCK_16X32 }, { BLOCK_INVALID, BLOCK_8X32 } },
   { { BLOCK_64X16, BLOCK_INVALID }, { BLOCK_32X16, BLOCK_32X8 } },
+#if CONFIG_EXT_PARTITION
+  { { BLOCK_32X128, BLOCK_32X64 }, { BLOCK_INVALID, BLOCK_16X64 } },
+  { { BLOCK_128X32, BLOCK_INVALID }, { BLOCK_64X32, BLOCK_64X16 } },
+#endif  // CONFIG_EXT_PARTITION
 };
 
 static const TX_SIZE uv_txsize_lookup[BLOCK_SIZES_ALL][TX_SIZES_ALL][2][2] = {
@@ -1608,6 +1812,54 @@
       { { TX_8X16, TX_8X8 }, { TX_8X16, TX_8X8 } },
       { { TX_32X8, TX_32X8 }, { TX_32X8, TX_32X8 } },
   },
+#if CONFIG_EXT_PARTITION
+  {
+// BLOCK_32X128
+#if CONFIG_CHROMA_2X2
+      { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
+#endif
+      { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
+      { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
+      { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
+      { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
+#if CONFIG_TX64X64
+      { { TX_32X32, TX_32X32 }, { TX_16X16, TX_16X16 } },
+#endif
+      { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
+      { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
+      { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
+      { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
+      { { TX_16X32, TX_16X32 }, { TX_16X32, TX_16X32 } },
+      { { TX_32X16, TX_32X16 }, { TX_16X16, TX_16X16 } },
+      { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
+      { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
+      { { TX_8X32, TX_8X32 }, { TX_8X32, TX_8X32 } },
+      { { TX_32X8, TX_32X8 }, { TX_16X8, TX_16X8 } },
+  },
+  {
+// BLOCK_128X32
+#if CONFIG_CHROMA_2X2
+      { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
+#endif
+      { { TX_4X4, TX_4X4 }, { TX_4X4, TX_4X4 } },
+      { { TX_8X8, TX_8X8 }, { TX_8X8, TX_8X8 } },
+      { { TX_16X16, TX_16X16 }, { TX_16X16, TX_16X16 } },
+      { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
+#if CONFIG_TX64X64
+      { { TX_32X32, TX_16X16 }, { TX_32X32, TX_16X16 } },
+#endif
+      { { TX_4X8, TX_4X8 }, { TX_4X8, TX_4X8 } },
+      { { TX_8X4, TX_8X4 }, { TX_8X4, TX_8X4 } },
+      { { TX_8X16, TX_8X16 }, { TX_8X16, TX_8X16 } },
+      { { TX_16X8, TX_16X8 }, { TX_16X8, TX_16X8 } },
+      { { TX_16X32, TX_16X16 }, { TX_16X32, TX_16X16 } },
+      { { TX_32X16, TX_32X16 }, { TX_32X16, TX_32X16 } },
+      { { TX_4X16, TX_4X16 }, { TX_4X16, TX_4X16 } },
+      { { TX_16X4, TX_16X4 }, { TX_16X4, TX_16X4 } },
+      { { TX_8X32, TX_8X16 }, { TX_8X32, TX_8X16 } },
+      { { TX_32X8, TX_32X8 }, { TX_32X8, TX_32X8 } },
+  },
+#endif
 };
 
 // Generates 4 bit field in which each bit set to 1 represents
@@ -1641,12 +1893,14 @@
   { 0, 16 },   // 128X64- {0b00000, 0b10000}
   { 0, 0 },    // 128X128-{0b00000, 0b00000}
 
-  { 31, 28 },  // 4X16 - {0b11111, 0b11100}
-  { 28, 31 },  // 16X4 - {0b11100, 0b11111}
-  { 30, 24 },  // 8X32 - {0b11110, 0b11000}
-  { 24, 30 },  // 32X8 - {0b11000, 0b11110}
-  { 28, 16 },  // 16X64- {0b11100, 0b10000}
-  { 16, 28 },  // 64X16- {0b10000, 0b11100}
+  { 31, 28 },  // 4X16  - {0b11111, 0b11100}
+  { 28, 31 },  // 16X4  - {0b11100, 0b11111}
+  { 30, 24 },  // 8X32  - {0b11110, 0b11000}
+  { 24, 30 },  // 32X8  - {0b11000, 0b11110}
+  { 28, 16 },  // 16X64 - {0b11100, 0b10000}
+  { 16, 28 },  // 64X16 - {0b10000, 0b11100}
+  { 24, 0 },   // 32X128- {0b11000, 0b00000}
+  { 0, 24 },   // 128X32- {0b00000, 0b11000}
 #else
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
   { 15, 15 },  // 2X2   - {0b1111, 0b1111}
@@ -1729,7 +1983,10 @@
 #endif  // CONFIG_EXT_PARTITION
   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
+  ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID,
+#if CONFIG_EXT_PARTITION
   ADAPT_OVERLAP_BLOCK_INVALID, ADAPT_OVERLAP_BLOCK_INVALID
+#endif  // CONFIG_EXT_PARTITION
 };
 
 static const BLOCK_SIZE bsize_2_sqr_bsize[BLOCK_SIZES] = {
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 7a8b8d0..550ef54 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -969,8 +969,11 @@
 #if CONFIG_EXT_PARTITION
       { 255, 1 },   { 255, 1 },   { 255, 1 },
 #endif  // CONFIG_EXT_PARTITION
-      { 208, 128 }, { 208, 128 }, { 208, 128 }, { 208, 128 }, { 208, 128 },
-      { 208, 128 },
+      { 208, 128 }, { 208, 128 }, { 208, 128 }, { 208, 128 }, { 208, 1 },
+      { 208, 1 },
+#if CONFIG_EXT_PARTITION
+      { 208, 1 },   { 208, 1 }
+#endif  // CONFIG_EXT_PARTITION
     };
 #elif !CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
 static const aom_prob
@@ -983,7 +986,10 @@
 #if CONFIG_EXT_PARTITION
       { 255 }, { 255 }, { 255 },
 #endif  // CONFIG_EXT_PARTITION
-      { 208 }, { 208 }, { 208 }, { 208 }, { 208 }, { 208 },
+      { 208 }, { 208 }, { 208 }, { 208 }, { 255 }, { 255 },
+#if CONFIG_EXT_PARTITION
+      { 255 }, { 255 }
+#endif  // CONFIG_EXT_PARTITION
     };
 #elif CONFIG_COMPOUND_SEGMENT && !CONFIG_WEDGE
 static const aom_prob
@@ -997,6 +1003,9 @@
       { 255 }, { 255 }, { 255 },
 #endif  // CONFIG_EXT_PARTITION
       { 208 }, { 208 }, { 208 }, { 208 }, { 208 }, { 208 },
+#if CONFIG_EXT_PARTITION
+      { 208 }, { 208 }
+#endif  // CONFIG_EXT_PARTITION
     };
 #else
 static const aom_prob default_compound_type_probs[BLOCK_SIZES_ALL]
@@ -1033,8 +1042,12 @@
       { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
       { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
       { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(26648), AOM_ICDF(32768), 0 },  // 208, 1
+      { AOM_ICDF(26624), AOM_ICDF(26648), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(26624), AOM_ICDF(26648), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(26648), AOM_ICDF(32768), 0 },
+#endif
     };
 #elif !CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
 static const aom_cdf_prob
@@ -1068,6 +1081,10 @@
       { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
     };
 #elif CONFIG_COMPOUND_SEGMENT && !CONFIG_WEDGE
 static const aom_cdf_prob
@@ -1095,12 +1112,16 @@
       { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
 #endif  // CONFIG_EXT_PARTITION
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(32640), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },  // 208
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(26624), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
     };
 #endif  // CONFIG_COMPOUND_SEGMENT && CONFIG_WEDGE
 
@@ -1138,9 +1159,12 @@
 #endif
   128, 128, 128, 194, 213, 217, 222, 224, 226, 220, 128, 128, 128,
 #if CONFIG_EXT_PARTITION
-  208, 208, 208,
+  255, 255, 255,
 #endif  // CONFIG_EXT_PARTITION
-  208, 208, 208, 208, 208, 208,
+  208, 208, 208, 208, 255, 255,
+#if CONFIG_EXT_PARTITION
+  255, 255
+#endif  // CONFIG_EXT_PARTITION
 };
 
 #if CONFIG_NEW_MULTISYMBOL
@@ -1165,16 +1189,20 @@
       { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(128 * 128), AOM_ICDF(32768), 0 },
 #if CONFIG_EXT_PARTITION
-      { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
 #endif  // CONFIG_EXT_PARTITION
       { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
-      { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
     };
 #endif  // CONFIG_NEW_MULTISYMBOL
 
@@ -1271,6 +1299,11 @@
       { 255, 200 },
       { 255, 200 },
       { 255, 200 },
+#if CONFIG_EXT_PARTITION
+      { 252, 255 },
+      { 252, 200 },
+      { 252, 200 },
+#endif  // CONFIG_EXT_PARTITION
     };
 static const aom_cdf_prob
     default_motion_mode_cdf[BLOCK_SIZES_ALL][CDF_SIZE(MOTION_MODES)] = {
@@ -1305,6 +1338,10 @@
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 }
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
+#endif
     };
 #else  // CONFIG_NCOBMC_ADAPT_WEIGHT
 const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)] = {
@@ -1322,6 +1359,9 @@
       { 252 }, { 252 }, { 252 },
 #endif  // CONFIG_EXT_PARTITION
       { 208 }, { 208 }, { 208 }, { 208 }, { 208 }, { 208 },
+#if CONFIG_EXT_PARTITION
+      { 208 }, { 208 }
+#endif  // CONFIG_EXT_PARTITION
     };
 
 static const aom_cdf_prob
@@ -1355,6 +1395,10 @@
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
     };
 #endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
 #elif !CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
@@ -1374,6 +1418,9 @@
       { 252 }, { 252 }, { 252 },
 #endif  // CONFIG_EXT_PARTITION
       { 208 }, { 208 }, { 208 }, { 208 }, { 208 }, { 208 },
+#if CONFIG_EXT_PARTITION
+      { 252 }, { 252 }
+#endif  // CONFIG_EXT_PARTITION
     };
 
 static const aom_cdf_prob
@@ -1407,6 +1454,10 @@
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
       { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(255 * 128), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
     };
 
 #elif CONFIG_MOTION_VAR && CONFIG_WARPED_MOTION
@@ -1534,6 +1585,9 @@
 #endif  // CONFIG_EXT_PARTITION
       { 208, 200 }, { 208, 200 }, { 208, 200 }, { 208, 200 }, { 208, 200 },
       { 208, 200 },
+#if CONFIG_EXT_PARTITION
+      { 252, 200 }, { 252, 200 }
+#endif  // CONFIG_EXT_PARTITION
     };
 static const aom_cdf_prob
     default_motion_mode_cdf[BLOCK_SIZES_ALL][CDF_SIZE(MOTION_MODES)] = {
@@ -1566,6 +1620,10 @@
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
       { AOM_ICDF(32640), AOM_ICDF(32740), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+      { AOM_ICDF(32256), AOM_ICDF(32656), AOM_ICDF(32768), 0 },
+      { AOM_ICDF(32256), AOM_ICDF(32656), AOM_ICDF(32768), 0 },
+#endif
     };
 #endif  // CONFIG_NCOBMC_ADAPT_WEIGHT
 // Probability for the case that only 1 additional motion mode is allowed
@@ -1578,6 +1636,9 @@
   252, 252, 252,
 #endif  // CONFIG_EXT_PARTITION
   208, 208, 208, 208, 208, 208,
+#if CONFIG_EXT_PARTITION
+  252, 252
+#endif  // CONFIG_EXT_PARTITION
 };
 
 #if CONFIG_NEW_MULTISYMBOL || CONFIG_NCOBMC_ADAPT_WEIGHT
@@ -1611,6 +1672,10 @@
   { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
   { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
   { AOM_ICDF(208 * 128), AOM_ICDF(32768), 0 },
+#if CONFIG_EXT_PARTITION
+  { AOM_ICDF(252 * 128), AOM_ICDF(32768), 0 },
+  { AOM_ICDF(252 * 128), AOM_ICDF(32768), 0 },
+#endif  // CONFIG_EXT_PARTITION
 };
 #endif  // CONFIG_NEW_MULTISYMBOL
 #endif
@@ -3123,17 +3188,17 @@
 #if CONFIG_EXT_PARTITION
       // 128x128 -> 64x64
       { AOM_ICDF(28416), AOM_ICDF(28705), AOM_ICDF(28926), AOM_ICDF(32258),
-        AOM_ICDF(32402), AOM_ICDF(32547), AOM_ICDF(32548), AOM_ICDF(32768), 0,
-        0, 0 },
+        AOM_ICDF(32354), AOM_ICDF(32450), AOM_ICDF(32523), AOM_ICDF(32596),
+        AOM_ICDF(32693), AOM_ICDF(32768), 0 },
       { AOM_ICDF(9216), AOM_ICDF(9952), AOM_ICDF(11849), AOM_ICDF(30134),
-        AOM_ICDF(30502), AOM_ICDF(30870), AOM_ICDF(30871), AOM_ICDF(32768), 0,
-        0, 0 },
+        AOM_ICDF(30379), AOM_ICDF(30624), AOM_ICDF(31256), AOM_ICDF(31888),
+        AOM_ICDF(32134), AOM_ICDF(32768), 0 },
       { AOM_ICDF(7424), AOM_ICDF(9008), AOM_ICDF(9528), AOM_ICDF(30664),
-        AOM_ICDF(31456), AOM_ICDF(32248), AOM_ICDF(32249), AOM_ICDF(32768), 0,
-        0, 0 },
+        AOM_ICDF(31192), AOM_ICDF(31720), AOM_ICDF(31893), AOM_ICDF(32066),
+        AOM_ICDF(32594), AOM_ICDF(32768), 0 },
       { AOM_ICDF(1280), AOM_ICDF(1710), AOM_ICDF(2069), AOM_ICDF(31978),
-        AOM_ICDF(32193), AOM_ICDF(32409), AOM_ICDF(32410), AOM_ICDF(32768), 0,
-        0, 0 },
+        AOM_ICDF(32121), AOM_ICDF(32264), AOM_ICDF(32383), AOM_ICDF(32502),
+        AOM_ICDF(32647), AOM_ICDF(32768), 0 },
 #endif
     };
 #else
@@ -5065,18 +5130,6 @@
 #endif
 }
 
-#if CONFIG_EXT_PARTITION_TYPES
-int av1_num_partition_types[PARTITION_BLOCK_SIZES] = {
-  PARTITION_TYPES,      // 8x8: The 4 traditional partitions
-  EXT_PARTITION_TYPES,  // 16x16: All partitions
-  EXT_PARTITION_TYPES,  // 32x32: All partitions
-  EXT_PARTITION_TYPES,  // 64x64: All partitions
-#if CONFIG_EXT_PARTITION
-  EXT_PARTITION_TYPES - 2  // 128x128: All but 4:1 and 1:4 partitions
-#endif
-};
-#endif  // CONFIG_EXT_PARTITION_TYPES
-
 void av1_adapt_inter_frame_probs(AV1_COMMON *cm) {
   int i, j;
   FRAME_CONTEXT *fc = cm->fc;
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 5118bd3..6651008 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -606,10 +606,6 @@
     av1_switchable_restore_tree[TREE_SIZE(RESTORE_SWITCHABLE_TYPES)];
 #endif  // CONFIG_LOOP_RESTORATION
 
-#if CONFIG_EXT_PARTITION_TYPES
-extern int av1_num_partition_types[PARTITION_BLOCK_SIZES];
-#endif
-
 void av1_setup_past_independence(struct AV1Common *cm);
 
 void av1_adapt_intra_frame_probs(struct AV1Common *cm);
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 2f6ac83..40b7061 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -140,6 +140,10 @@
   BLOCK_32X8,
   BLOCK_16X64,
   BLOCK_64X16,
+#if CONFIG_EXT_PARTITION
+  BLOCK_32X128,
+  BLOCK_128X32,
+#endif  // CONFIG_EXT_PARTITION
   BLOCK_SIZES_ALL,
   BLOCK_SIZES = BLOCK_4X16,
   BLOCK_INVALID = 255,
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index ab46d52..66c2cd4 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -414,6 +414,10 @@
 #endif  // CONFIG_WEDGE
   { 0, NULL, NULL, 0, NULL },
   { 0, NULL, NULL, 0, NULL },
+#if CONFIG_EXT_PARTITION
+  { 0, NULL, NULL, 0, NULL },
+  { 0, NULL, NULL, 0, NULL },
+#endif  // CONFIG_EXT_PARTITION
 };
 
 static const uint8_t *get_wedge_mask_inplace(int wedge_index, int neg,
@@ -2948,7 +2952,7 @@
 #endif
     32, 16, 16, 16, 8, 8, 8, 4,
     4,  4,  2,  2,  2, 1, 1, 1,
-    16, 16, 8, 8, 4, 4,
+    16, 16, 8, 8, 4, 4, 2, 2
 };
 #else
 static const int ii_weights1d[MAX_SB_SIZE] = {
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index 02d11c8..b3be16b 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -157,14 +157,14 @@
   232, 233, 234, 235, 236, 237, 238, 239, 248, 249, 250, 251, 252, 253, 254,
   255,
 };
-#else
+#endif
+
 static const uint16_t orders_32x128[4] = {
   0, 1, 2, 3,
 };
 static const uint16_t orders_128x32[4] = {
   0, 1, 2, 3,
 };
-#endif
 
 #if CONFIG_CB4X4 || CONFIG_EXT_PARTITION
 static const uint16_t orders_16x8[128] = {
@@ -398,7 +398,9 @@
   // 4x16,        16x4,           8x32
   orders_4x16,    orders_16x4,    orders_8x32,
   // 32x8,        16x64,          64x16
-  orders_32x8,    orders_16x64,   orders_64x16
+  orders_32x8,    orders_16x64,   orders_64x16,
+  // 32x128,      128x32
+  orders_32x128,  orders_128x32
 };
 /* clang-format on */
 #else
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 2ba6037..d33135f 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2247,14 +2247,15 @@
 
   if (has_rows && has_cols) {
 #if CONFIG_EXT_PARTITION_TYPES
-    const int bsl =
-        mi_width_log2_lookup[bsize] - mi_width_log2_lookup[BLOCK_8X8];
-    p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf,
-                                        av1_num_partition_types[bsl], ACCT_STR);
+    const int num_partition_types =
+        (mi_width_log2_lookup[bsize] > mi_width_log2_lookup[BLOCK_8X8])
+            ? EXT_PARTITION_TYPES
+            : PARTITION_TYPES;
 #else
-    p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf, PARTITION_TYPES,
-                                        ACCT_STR);
+    const int num_partition_types = PARTITION_TYPES;
 #endif  // CONFIG_EXT_PARTITION_TYPES
+    p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf, num_partition_types,
+                                        ACCT_STR);
   } else if (!has_rows && has_cols) {
     assert(bsize > BLOCK_8X8);
     aom_cdf_prob cdf[2];
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 0b5e561..b71011d 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2853,13 +2853,14 @@
 
   if (has_rows && has_cols) {
 #if CONFIG_EXT_PARTITION_TYPES
-    const int bsl =
-        mi_width_log2_lookup[bsize] - mi_width_log2_lookup[BLOCK_8X8];
-    aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx],
-                     av1_num_partition_types[bsl]);
+    const int num_partition_types =
+        (mi_width_log2_lookup[bsize] > mi_width_log2_lookup[BLOCK_8X8])
+            ? EXT_PARTITION_TYPES
+            : PARTITION_TYPES;
 #else
-    aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx], PARTITION_TYPES);
-#endif  // CONFIG_EXT_PARTITION_TYPES
+    const int num_partition_types = PARTITION_TYPES;
+#endif
+    aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx], num_partition_types);
   } else if (!has_rows && has_cols) {
     assert(p == PARTITION_SPLIT || p == PARTITION_HORZ);
     assert(bsize > BLOCK_8X8);
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index c4afad5..ef72bf4 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -2933,7 +2933,10 @@
   BLOCK_16X16, BLOCK_16X16, BLOCK_16X16,  // 64x128, 128x64, 128x128
 #endif  // CONFIG_EXT_PARTITION
   BLOCK_4X4,   BLOCK_4X4,   BLOCK_8X8,    //   4x16,   16x4,    8x32
-  BLOCK_8X8,   BLOCK_16X16, BLOCK_16X16   //   32x8,   16x64,  64x16
+  BLOCK_8X8,   BLOCK_16X16, BLOCK_16X16,  //   32x8,  16x64,   64x16
+#if CONFIG_EXT_PARTITION
+  BLOCK_16X16, BLOCK_16X16                // 32x128, 128x32
+#endif  // CONFIG_EXT_PARTITION
 };
 
 static const BLOCK_SIZE max_partition_size[BLOCK_SIZES_ALL] = {
@@ -2949,7 +2952,10 @@
   BLOCK_LARGEST, BLOCK_LARGEST, BLOCK_LARGEST,  // 64x128, 128x64, 128x128
 #endif  // CONFIG_EXT_PARTITION
   BLOCK_16X16,   BLOCK_16X16,   BLOCK_32X32,    //   4x16,   16x4,    8x32
-  BLOCK_32X32,   BLOCK_LARGEST, BLOCK_LARGEST   //   32x8,  16x64,   64x16
+  BLOCK_32X32,   BLOCK_LARGEST, BLOCK_LARGEST,  //   32x8,  16x64,   64x16
+#if CONFIG_EXT_PARTITION
+  BLOCK_LARGEST, BLOCK_LARGEST                  // 32x128, 128x32
+#endif  // CONFIG_EXT_PARTITION
 };
 
 // Next square block size less or equal than current block size.
@@ -2966,7 +2972,10 @@
   BLOCK_64X64, BLOCK_64X64, BLOCK_128X128,  // 64x128, 128x64, 128x128
 #endif  // CONFIG_EXT_PARTITION
   BLOCK_4X4,   BLOCK_4X4,   BLOCK_8X8,      //   4x16,   16x4,    8x32
-  BLOCK_8X8,   BLOCK_16X16, BLOCK_16X16     //   32x8,  16x64,   64x16
+  BLOCK_8X8,   BLOCK_16X16, BLOCK_16X16,    //   32x8,  16x64,   64x16
+#if CONFIG_EXT_PARTITION
+  BLOCK_32X32, BLOCK_32X32                  // 32x128, 128x32
+#endif  // CONFIG_EXT_PARTITION
 };
 /* clang-format on */
 
@@ -4347,13 +4356,20 @@
     restore_context(x, &x_ctx, mi_row, mi_col, bsize);
   }
 
+#if CONFIG_EXT_PARTITION
+  const int can_partition_4 = (bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
+                               bsize == BLOCK_32X32 || bsize == BLOCK_16X16);
+#else
+  const int can_partition_4 =
+      (bsize == BLOCK_64X64 || bsize == BLOCK_32X32 || bsize == BLOCK_16X16);
+#endif  // CONFIG_EXT_PARTITION
+
   // PARTITION_HORZ_4
   // TODO(david.barker): For this and PARTITION_VERT_4,
   // * Add support for BLOCK_16X16 once we support 2x8 and 8x2 blocks for the
   //   chroma plane
   // * Add support for supertx
-  if ((bsize == BLOCK_64X64 || bsize == BLOCK_32X32 || bsize == BLOCK_16X16) &&
-      partition_horz_allowed && !force_horz_split &&
+  if (can_partition_4 && partition_horz_allowed && !force_horz_split &&
       (do_rectangular_split || av1_active_h_edge(cpi, mi_row, mi_step))) {
     const int quarter_step = mi_size_high[bsize] / 4;
     PICK_MODE_CONTEXT *ctx_prev = ctx_none;
@@ -4390,8 +4406,7 @@
 #endif
   }
   // PARTITION_VERT_4
-  if ((bsize == BLOCK_64X64 || bsize == BLOCK_32X32 || bsize == BLOCK_16X16) &&
-      partition_vert_allowed && !force_vert_split &&
+  if (can_partition_4 && partition_vert_allowed && !force_vert_split &&
       (do_rectangular_split || av1_active_v_edge(cpi, mi_row, mi_step))) {
     const int quarter_step = mi_size_wide[bsize] / 4;
     PICK_MODE_CONTEXT *ctx_prev = ctx_none;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index d9e898a..866194c 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1368,7 +1368,15 @@
 MAKE_BFP_SAD_WRAPPER(aom_highbd_sad64x16)
 MAKE_BFP_SADAVG_WRAPPER(aom_highbd_sad64x16_avg)
 MAKE_BFP_SAD4D_WRAPPER(aom_highbd_sad64x16x4d)
-#endif
+#if CONFIG_EXT_PARTITION
+MAKE_BFP_SAD_WRAPPER(aom_highbd_sad32x128)
+MAKE_BFP_SADAVG_WRAPPER(aom_highbd_sad32x128_avg)
+MAKE_BFP_SAD4D_WRAPPER(aom_highbd_sad32x128x4d)
+MAKE_BFP_SAD_WRAPPER(aom_highbd_sad128x32)
+MAKE_BFP_SADAVG_WRAPPER(aom_highbd_sad128x32_avg)
+MAKE_BFP_SAD4D_WRAPPER(aom_highbd_sad128x32x4d)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 #if CONFIG_EXT_INTER
 #define HIGHBD_MBFP(BT, MCSDF, MCSVF) \
@@ -1426,7 +1434,11 @@
 MAKE_MBFP_COMPOUND_SAD_WRAPPER(aom_highbd_masked_sad32x8)
 MAKE_MBFP_COMPOUND_SAD_WRAPPER(aom_highbd_masked_sad16x64)
 MAKE_MBFP_COMPOUND_SAD_WRAPPER(aom_highbd_masked_sad64x16)
-#endif
+#if CONFIG_EXT_PARTITION
+MAKE_MBFP_COMPOUND_SAD_WRAPPER(aom_highbd_masked_sad32x128)
+MAKE_MBFP_COMPOUND_SAD_WRAPPER(aom_highbd_masked_sad128x32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_EXT_INTER
 
 #if CONFIG_MOTION_VAR
@@ -1478,7 +1490,11 @@
 MAKE_OBFP_SAD_WRAPPER(aom_highbd_obmc_sad32x8)
 MAKE_OBFP_SAD_WRAPPER(aom_highbd_obmc_sad16x64)
 MAKE_OBFP_SAD_WRAPPER(aom_highbd_obmc_sad64x16)
-#endif
+#if CONFIG_EXT_PARTITION
+MAKE_OBFP_SAD_WRAPPER(aom_highbd_obmc_sad32x128)
+MAKE_OBFP_SAD_WRAPPER(aom_highbd_obmc_sad128x32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_MOTION_VAR
 
 static void highbd_set_var_fns(AV1_COMP *const cpi) {
@@ -1487,6 +1503,20 @@
     switch (cm->bit_depth) {
       case AOM_BITS_8:
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_BFP(BLOCK_128X32, aom_highbd_sad128x32_bits8,
+                   aom_highbd_sad128x32_avg_bits8, aom_highbd_8_variance128x32,
+                   aom_highbd_8_sub_pixel_variance128x32,
+                   aom_highbd_8_sub_pixel_avg_variance128x32, NULL, NULL,
+                   aom_highbd_sad128x32x4d_bits8)
+
+        HIGHBD_BFP(BLOCK_32X128, aom_highbd_sad32x128_bits8,
+                   aom_highbd_sad32x128_avg_bits8, aom_highbd_8_variance32x128,
+                   aom_highbd_8_sub_pixel_variance32x128,
+                   aom_highbd_8_sub_pixel_avg_variance32x128, NULL, NULL,
+                   aom_highbd_sad32x128x4d_bits8)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_BFP(BLOCK_64X16, aom_highbd_sad64x16_bits8,
                    aom_highbd_sad64x16_avg_bits8, aom_highbd_8_variance64x16,
                    aom_highbd_8_sub_pixel_variance64x16,
@@ -1672,6 +1702,14 @@
         HIGHBD_MBFP(BLOCK_4X4, aom_highbd_masked_sad4x4_bits8,
                     aom_highbd_8_masked_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_MBFP(BLOCK_128X32, aom_highbd_masked_sad128x32_bits8,
+                    aom_highbd_8_masked_sub_pixel_variance128x32)
+
+        HIGHBD_MBFP(BLOCK_32X128, aom_highbd_masked_sad32x128_bits8,
+                    aom_highbd_8_masked_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_MBFP(BLOCK_64X16, aom_highbd_masked_sad64x16_bits8,
                     aom_highbd_8_masked_sub_pixel_variance64x16)
 
@@ -1743,6 +1781,16 @@
                     aom_highbd_obmc_variance4x4,
                     aom_highbd_obmc_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_OBFP(BLOCK_128X32, aom_highbd_obmc_sad128x32_bits8,
+                    aom_highbd_obmc_variance128x32,
+                    aom_highbd_obmc_sub_pixel_variance128x32)
+
+        HIGHBD_OBFP(BLOCK_32X128, aom_highbd_obmc_sad32x128_bits8,
+                    aom_highbd_obmc_variance32x128,
+                    aom_highbd_obmc_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_OBFP(BLOCK_64X16, aom_highbd_obmc_sad64x16_bits8,
                     aom_highbd_obmc_variance64x16,
                     aom_highbd_obmc_sub_pixel_variance64x16)
@@ -1772,6 +1820,22 @@
 
       case AOM_BITS_10:
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_BFP(BLOCK_128X32, aom_highbd_sad128x32_bits10,
+                   aom_highbd_sad128x32_avg_bits10,
+                   aom_highbd_10_variance128x32,
+                   aom_highbd_10_sub_pixel_variance128x32,
+                   aom_highbd_10_sub_pixel_avg_variance128x32, NULL, NULL,
+                   aom_highbd_sad128x32x4d_bits10)
+
+        HIGHBD_BFP(BLOCK_32X128, aom_highbd_sad32x128_bits10,
+                   aom_highbd_sad32x128_avg_bits10,
+                   aom_highbd_10_variance32x128,
+                   aom_highbd_10_sub_pixel_variance32x128,
+                   aom_highbd_10_sub_pixel_avg_variance32x128, NULL, NULL,
+                   aom_highbd_sad32x128x4d_bits10)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_BFP(BLOCK_64X16, aom_highbd_sad64x16_bits10,
                    aom_highbd_sad64x16_avg_bits10, aom_highbd_10_variance64x16,
                    aom_highbd_10_sub_pixel_variance64x16,
@@ -1961,6 +2025,14 @@
         HIGHBD_MBFP(BLOCK_4X4, aom_highbd_masked_sad4x4_bits10,
                     aom_highbd_10_masked_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_MBFP(BLOCK_128X32, aom_highbd_masked_sad128x32_bits10,
+                    aom_highbd_10_masked_sub_pixel_variance128x32)
+
+        HIGHBD_MBFP(BLOCK_32X128, aom_highbd_masked_sad32x128_bits10,
+                    aom_highbd_10_masked_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_MBFP(BLOCK_64X16, aom_highbd_masked_sad64x16_bits10,
                     aom_highbd_10_masked_sub_pixel_variance64x16)
 
@@ -2032,6 +2104,16 @@
                     aom_highbd_10_obmc_variance4x4,
                     aom_highbd_10_obmc_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_OBFP(BLOCK_128X32, aom_highbd_obmc_sad128x32_bits10,
+                    aom_highbd_10_obmc_variance128x32,
+                    aom_highbd_10_obmc_sub_pixel_variance128x32)
+
+        HIGHBD_OBFP(BLOCK_32X128, aom_highbd_obmc_sad32x128_bits10,
+                    aom_highbd_10_obmc_variance32x128,
+                    aom_highbd_10_obmc_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_OBFP(BLOCK_64X16, aom_highbd_obmc_sad64x16_bits10,
                     aom_highbd_10_obmc_variance64x16,
                     aom_highbd_10_obmc_sub_pixel_variance64x16)
@@ -2061,6 +2143,22 @@
 
       case AOM_BITS_12:
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_BFP(BLOCK_128X32, aom_highbd_sad128x32_bits12,
+                   aom_highbd_sad128x32_avg_bits12,
+                   aom_highbd_12_variance128x32,
+                   aom_highbd_12_sub_pixel_variance128x32,
+                   aom_highbd_12_sub_pixel_avg_variance128x32, NULL, NULL,
+                   aom_highbd_sad128x32x4d_bits12)
+
+        HIGHBD_BFP(BLOCK_32X128, aom_highbd_sad32x128_bits12,
+                   aom_highbd_sad32x128_avg_bits12,
+                   aom_highbd_12_variance32x128,
+                   aom_highbd_12_sub_pixel_variance32x128,
+                   aom_highbd_12_sub_pixel_avg_variance32x128, NULL, NULL,
+                   aom_highbd_sad32x128x4d_bits12)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_BFP(BLOCK_64X16, aom_highbd_sad64x16_bits12,
                    aom_highbd_sad64x16_avg_bits12, aom_highbd_12_variance64x16,
                    aom_highbd_12_sub_pixel_variance64x16,
@@ -2250,6 +2348,14 @@
         HIGHBD_MBFP(BLOCK_4X4, aom_highbd_masked_sad4x4_bits12,
                     aom_highbd_12_masked_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_MBFP(BLOCK_128X32, aom_highbd_masked_sad128x32_bits12,
+                    aom_highbd_12_masked_sub_pixel_variance128x32)
+
+        HIGHBD_MBFP(BLOCK_32X128, aom_highbd_masked_sad32x128_bits12,
+                    aom_highbd_12_masked_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_MBFP(BLOCK_64X16, aom_highbd_masked_sad64x16_bits12,
                     aom_highbd_12_masked_sub_pixel_variance64x16)
 
@@ -2322,6 +2428,16 @@
                     aom_highbd_12_obmc_variance4x4,
                     aom_highbd_12_obmc_sub_pixel_variance4x4)
 #if CONFIG_EXT_PARTITION_TYPES
+#if CONFIG_EXT_PARTITION
+        HIGHBD_OBFP(BLOCK_128X32, aom_highbd_obmc_sad128x32_bits12,
+                    aom_highbd_12_obmc_variance128x32,
+                    aom_highbd_12_obmc_sub_pixel_variance128x32)
+
+        HIGHBD_OBFP(BLOCK_32X128, aom_highbd_obmc_sad32x128_bits12,
+                    aom_highbd_12_obmc_variance32x128,
+                    aom_highbd_12_obmc_sub_pixel_variance32x128)
+#endif  // CONFIG_EXT_PARTITION
+
         HIGHBD_OBFP(BLOCK_64X16, aom_highbd_obmc_sad64x16_bits12,
                     aom_highbd_12_obmc_variance64x16,
                     aom_highbd_12_obmc_sub_pixel_variance64x16)
@@ -2768,7 +2884,17 @@
   BFP(BLOCK_64X16, aom_sad64x16, aom_sad64x16_avg, aom_variance64x16,
       aom_sub_pixel_variance64x16, aom_sub_pixel_avg_variance64x16, NULL, NULL,
       aom_sad64x16x4d)
-#endif
+
+#if CONFIG_EXT_PARTITION
+  BFP(BLOCK_32X128, aom_sad32x128, aom_sad32x128_avg, aom_variance32x128,
+      aom_sub_pixel_variance32x128, aom_sub_pixel_avg_variance32x128, NULL,
+      NULL, aom_sad32x128x4d)
+
+  BFP(BLOCK_128X32, aom_sad128x32, aom_sad128x32_avg, aom_variance128x32,
+      aom_sub_pixel_variance128x32, aom_sub_pixel_avg_variance128x32, NULL,
+      NULL, aom_sad128x32x4d)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 
 #if CONFIG_EXT_PARTITION
   BFP(BLOCK_128X128, aom_sad128x128, aom_sad128x128_avg, aom_variance128x128,
@@ -2901,7 +3027,15 @@
 
   OBFP(BLOCK_64X16, aom_obmc_sad64x16, aom_obmc_variance64x16,
        aom_obmc_sub_pixel_variance64x16)
-#endif
+
+#if CONFIG_EXT_PARTITION
+  OBFP(BLOCK_32X128, aom_obmc_sad32x128, aom_obmc_variance32x128,
+       aom_obmc_sub_pixel_variance32x128)
+
+  OBFP(BLOCK_128X32, aom_obmc_sad128x32, aom_obmc_variance128x32,
+       aom_obmc_sub_pixel_variance128x32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_MOTION_VAR
 
 #if CONFIG_EXT_INTER
@@ -2941,7 +3075,13 @@
   MBFP(BLOCK_16X64, aom_masked_sad16x64, aom_masked_sub_pixel_variance16x64)
 
   MBFP(BLOCK_64X16, aom_masked_sad64x16, aom_masked_sub_pixel_variance64x16)
-#endif
+
+#if CONFIG_EXT_PARTITION
+  MBFP(BLOCK_32X128, aom_masked_sad32x128, aom_masked_sub_pixel_variance32x128)
+
+  MBFP(BLOCK_128X32, aom_masked_sad128x32, aom_masked_sub_pixel_variance128x32)
+#endif  // CONFIG_EXT_PARTITION
+#endif  // CONFIG_EXT_PARTITION_TYPES
 #endif  // CONFIG_EXT_INTER
 
 #if CONFIG_HIGHBITDEPTH
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 3fcf10f..8524ca2 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -57,11 +57,14 @@
 #if CONFIG_CHROMA_2X2 || CONFIG_CHROMA_SUB8X8
   2,  2,  2,
 #endif
-  2,  3,  3,  4, 6,  6, 8, 12, 12, 16, 24, 24, 32,
+  2,  3,  3,  4, 6,  6,  8, 12, 12, 16, 24, 24, 32,
 #if CONFIG_EXT_PARTITION
   48, 48, 64,
 #endif  // CONFIG_EXT_PARTITION
-  4,  4,  8,  8, 16, 16
+  4,  4,  8,  8, 16, 16,
+#if CONFIG_EXT_PARTITION
+  32, 32
+#endif  // CONFIG_EXT_PARTITION
 };
 
 #if CONFIG_EXT_TX
diff --git a/examples/inspect.c b/examples/inspect.c
index 03a6440..e91f1e4 100644
--- a/examples/inspect.c
+++ b/examples/inspect.c
@@ -151,6 +151,9 @@
 #endif
   ENUM(BLOCK_4X16),   ENUM(BLOCK_16X4),   ENUM(BLOCK_8X32),
   ENUM(BLOCK_32X8),   ENUM(BLOCK_16X64),  ENUM(BLOCK_64X16),
+#if CONFIG_EXT_PARTITION
+  ENUM(BLOCK_32X128), ENUM(BLOCK_128X32),
+#endif
   LAST_ENUM
 };