Add support for 16x4 partitions
When updating default_partition_cdf, this sums the probabilities that
were divided evenly across the pairs PARTITION_HORZ_A/PARTITION_HORZ_B
and PARTITION_VERT_A/PARTITION_VERT_B. Those summed probabilities now
get distributed evenly across the triples you get by adding
PARTITION_HORZ_4 and PARTITION_VERT_4, respectively.
Rather than implement 2X8/8X2 blocks for now, ss_size_lookup returns
4X8/8X4 block sizes to use as chroma transform sizes for 4X16/16X4
blocks.
The changes in setup_pred_plane and set_skip_context are because this
is presumably the first time we've had to deal with 16x4 or 4x16
blocks. Since BLOCK_16X4 is not less than BLOCK_8X8, the existing
logic didn't work (and the "shuffle back one" logic should probably be
done for small widths and heights separately).
Change-Id: If28d8954da42d6c726f2bcce2cb5242154b0870c
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h
index 0280ce2..59f0327 100644
--- a/av1/common/reconinter.h
+++ b/av1/common/reconinter.h
@@ -493,11 +493,11 @@
const struct scale_factors *scale,
int subsampling_x, int subsampling_y) {
#if CONFIG_CHROMA_SUB8X8
- if (bsize < BLOCK_8X8) {
- // Offset the buffer pointer
- if (subsampling_y && (mi_row & 0x01)) mi_row -= 1;
- if (subsampling_x && (mi_col & 0x01)) mi_col -= 1;
- }
+ // Offset the buffer pointer
+ if (subsampling_y && (mi_row & 0x01) && (mi_size_high[bsize] == 1))
+ mi_row -= 1;
+ if (subsampling_x && (mi_col & 0x01) && (mi_size_wide[bsize] == 1))
+ mi_col -= 1;
#else
(void)bsize;
#endif