// Log 2 conversion lookup tables for block width and height
const int b_width_log2_lookup[BLOCK_SIZES] =
- {0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4};
+ {0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 4, 5, 5
+#endif
+ };
const int b_height_log2_lookup[BLOCK_SIZES] =
- {0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4};
+ {0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 5, 4, 5
+#endif
+};
const int num_4x4_blocks_wide_lookup[BLOCK_SIZES] =
- {1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16};
+ {1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 16, 32, 32
+#endif
+};
const int num_4x4_blocks_high_lookup[BLOCK_SIZES] =
- {1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16};
+ {1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 32, 16, 32
+#endif
+};
// Log 2 conversion lookup tables for modeinfo width and height
const int mi_width_log2_lookup[BLOCK_SIZES] =
- {0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3};
+ {0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 3, 4, 4
+#endif
+};
const int num_8x8_blocks_wide_lookup[BLOCK_SIZES] =
- {1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8};
+ {1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 8, 16, 16
+#endif
+};
const int num_8x8_blocks_high_lookup[BLOCK_SIZES] =
- {1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8};
+ {1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 16, 8, 16
+#endif
+};
// MIN(3, MIN(b_width_log2(bsize), b_height_log2(bsize)))
const int size_group_lookup[BLOCK_SIZES] =
- {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3};
+ {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 3, 3, 3
+#endif
+};
const int num_pels_log2_lookup[BLOCK_SIZES] =
- {4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12};
+ {4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ 13, 13, 14
+#endif
+};
const PARTITION_TYPE partition_lookup[][BLOCK_SIZES] = {
{ // 4X4
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
- PARTITION_INVALID
+ PARTITION_INVALID,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 64x128,128x64,128x128
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#endif
}, { // 8X8
// 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
PARTITION_SPLIT, PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE,
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
- PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 64x128,128x64,128x128
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#endif
}, { // 16X16
// 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE, PARTITION_INVALID,
PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
- PARTITION_INVALID, PARTITION_INVALID
+ PARTITION_INVALID, PARTITION_INVALID,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 64x128,128x64,128x128
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#endif
}, { // 32X32
// 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_VERT,
PARTITION_HORZ, PARTITION_NONE, PARTITION_INVALID,
- PARTITION_INVALID, PARTITION_INVALID
+ PARTITION_INVALID, PARTITION_INVALID,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 64x128,128x64,128x128
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#endif
}, { // 64X64
// 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_VERT, PARTITION_HORZ,
- PARTITION_NONE
+ PARTITION_NONE,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 64x128,128x64,128x128
+ PARTITION_INVALID, PARTITION_INVALID, PARTITION_INVALID,
+#endif
+ },
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ { // 128x128
+ // 4X4, 4X8,8X4,8X8,8X16,16X8,16X16,16X32,32X16,32X32,32X64,64X32,64X64
+ // 64x128,128x64,128x128
+ PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
+ PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
+ PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT, PARTITION_SPLIT,
+ PARTITION_SPLIT, PARTITION_VERT, PARTITION_HORZ, PARTITION_NONE
}
+#endif
};
#if CONFIG_EXT_PARTITION
BLOCK_16X16, BLOCK_16X32, BLOCK_32X16,
BLOCK_32X32, BLOCK_32X64, BLOCK_64X32,
BLOCK_64X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_64X128, BLOCK_128X64, BLOCK_128X128,
+#endif
}, { // PARTITION_HORZ
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_64X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
+#endif
}, { // PARTITION_VERT
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X32, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
+#endif
}, { // PARTITION_SPLIT
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
+#endif
}, { // PARTITION_HORZ_A
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_64X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
+#endif
}, { // PARTITION_HORZ_B
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_64X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
+#endif
}, { // PARTITION_VERT_A
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X32, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
+#endif
}, { // PARTITION_VERT_B
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X32, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
+#endif
}
};
#else
BLOCK_16X16, BLOCK_16X32, BLOCK_32X16,
BLOCK_32X32, BLOCK_32X64, BLOCK_64X32,
BLOCK_64X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_64X128, BLOCK_128X64, BLOCK_128X128,
+#endif
}, { // PARTITION_HORZ
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_64X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X64,
+#endif
}, { // PARTITION_VERT
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X32, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X128,
+#endif
}, { // PARTITION_SPLIT
BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_4X4, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_8X8, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_16X16, BLOCK_INVALID, BLOCK_INVALID,
BLOCK_32X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,
+#endif
}
};
-#endif
+#endif // CONFIG_EXT_PARTITION
const TX_SIZE max_txsize_lookup[BLOCK_SIZES] = {
TX_4X4, TX_4X4, TX_4X4,
TX_32X32, TX_32X32, TX_32X32,
#if CONFIG_TX64X64
TX_64X64,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ TX_64X64, TX_64X64, TX_64X64,
+#endif
#else
TX_32X32,
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ TX_32X32, TX_32X32, TX_32X32,
#endif
+#endif // CONFIG_TX64X64
};
const BLOCK_SIZE txsize_to_bsize[TX_SIZES] = {
{{BLOCK_32X64, BLOCK_32X32}, {BLOCK_INVALID, BLOCK_16X32}},
{{BLOCK_64X32, BLOCK_INVALID}, {BLOCK_32X32, BLOCK_32X16}},
{{BLOCK_64X64, BLOCK_64X32}, {BLOCK_32X64, BLOCK_32X32}},
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ {{BLOCK_64X128, BLOCK_64X64}, {BLOCK_INVALID, BLOCK_32X64}},
+ {{BLOCK_128X64, BLOCK_INVALID}, {BLOCK_64X64, BLOCK_64X32}},
+ {{BLOCK_128X128, BLOCK_128X64}, {BLOCK_64X128, BLOCK_64X64}},
+#endif // CONFIG_EXT_CODING_UNIT_SIZE
};
// Generates 4 bit field in which each bit set to 1 represents
PARTITION_CONTEXT above;
PARTITION_CONTEXT left;
} partition_context_lookup[BLOCK_SIZES]= {
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ {31, 31}, // 4X4 - {0b11111, 0b11111}
+ {31, 30}, // 4X8 - {0b11111, 0b11110}
+ {30, 31}, // 8X4 - {0b11110, 0b11111}
+ {30, 30}, // 8X8 - {0b11110, 0b11110}
+ {30, 28}, // 8X16 - {0b11110, 0b11100}
+ {28, 30}, // 16X8 - {0b11100, 0b11110}
+ {28, 28}, // 16X16 - {0b11100, 0b11100}
+ {28, 24}, // 16X32 - {0b11100, 0b11000}
+ {24, 28}, // 32X16 - {0b11000, 0b11100}
+ {24, 24}, // 32X32 - {0b11000, 0b11000}
+ {24, 16}, // 32X64 - {0b11000, 0b10000}
+ {16, 24}, // 64X32 - {0b10000, 0b11000}
+ {16, 16}, // 64X64 - {0b10000, 0b10000}
+ {16, 0}, // 64X128- {0b10000, 0b00000}
+ {0, 16}, // 128X64- {0b00000, 0b10000}
+ {0, 0 }, // 128X128-{0b00000, 0b00000}
+#else
{15, 15}, // 4X4 - {0b1111, 0b1111}
{15, 14}, // 4X8 - {0b1111, 0b1110}
{14, 15}, // 8X4 - {0b1110, 0b1111}
{8, 0 }, // 32X64 - {0b1000, 0b0000}
{0, 8 }, // 64X32 - {0b0000, 0b1000}
{0, 0 }, // 64X64 - {0b0000, 0b0000}
+#endif
};
#if CONFIG_SUPERTX
{ 68, 11, 27, 128, 128, 128, 128 }, // a split, l not split
{ 57, 15, 9, 128, 128, 128, 128 }, // l split, a not split
{ 12, 3, 3, 128, 128, 128, 128 }, // a/l both split
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 128x128 -> 64x64
+ { 174, 35, 49, 128, 128, 128, 128 }, // a/l both not split
+ { 68, 11, 27, 128, 128, 128, 128 }, // a split, l not split
+ { 57, 15, 9, 128, 128, 128, 128 }, // l split, a not split
+ { 12, 3, 3, 128, 128, 128, 128 }, // a/l both split
+#endif
};
static const vp9_prob default_partition_probs[PARTITION_CONTEXTS]
{ 72, 16, 44, 128, 128, 128, 128 }, // a split, l not split
{ 58, 32, 12, 128, 128, 128, 128 }, // l split, a not split
{ 10, 7, 6, 128, 128, 128, 128 }, // a/l both split
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 128x128 -> 64x64lit
+ { 222, 34, 30, 128, 128, 128, 128 }, // a/l both not split
+ { 72, 16, 44, 128, 128, 128, 128 }, // a split, l not split
+ { 58, 32, 12, 128, 128, 128, 128 }, // l split, a not split
+ { 10, 7, 6, 128, 128, 128, 128 }, // a/l both split
+#endif
};
#else
const vp9_prob vp9_kf_partition_probs[PARTITION_CONTEXTS]
{ 68, 11, 27 }, // a split, l not split
{ 57, 15, 9 }, // l split, a not split
{ 12, 3, 3 }, // a/l both split
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 128x128 -> 64x64
+ { 174, 35, 49 }, // a/l both not split
+ { 68, 11, 27 }, // a split, l not split
+ { 57, 15, 9 }, // l split, a not split
+ { 12, 3, 3 }, // a/l both split
+#endif
};
static const vp9_prob default_partition_probs[PARTITION_CONTEXTS]
{ 72, 16, 44 }, // a split, l not split
{ 58, 32, 12 }, // l split, a not split
{ 10, 7, 6 }, // a/l both split
-};
+#if CONFIG_EXT_CODING_UNIT_SIZE
+ // 128x128 -> 64x64
+ { 222, 34, 30 }, // a/l both not split
+ { 72, 16, 44 }, // a split, l not split
+ { 58, 32, 12 }, // l split, a not split
+ { 10, 7, 6 }, // a/l both split
#endif
+};
+#endif // CONFIG_EXT_PARTITION
static const vp9_prob default_inter_mode_probs[INTER_MODE_CONTEXTS]
[INTER_MODES - 1] = {