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