Changes for chroma u8x8 obmc
(1) Add a macro DISABLE_CHROMA_U8X8_OBMC to enable(one-sided)/turn
off obmc in under 8x8 chroma blocks.
(2) When it is enabled, use the above neighbor in chroma 4x4 obmc
Change-Id: I2373e6698fd56da7f99653d77be2b7284b3e74f2
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 335d77d..9245b6c 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -1715,6 +1715,8 @@
// small blocks, only blend with neighbors from one side. If block-size of
// current plane is 4x4 or 8x4, the above neighbor (dir = 0) will be skipped. If
// it is 4x8, the left neighbor (dir = 1) will be skipped.
+#define DISABLE_CHROMA_U8X8_OBMC 0 // 0: one-sided obmc; 1: disable
+
int skip_u4x4_pred_in_obmc(BLOCK_SIZE bsize, const struct macroblockd_plane *pd,
int dir) {
assert(is_motion_variation_allowed_bsize(bsize));
@@ -1725,9 +1727,15 @@
if (bsize_plane < BLOCK_4X4) return 1;
#endif
switch (bsize_plane) {
+#if DISABLE_CHROMA_U8X8_OBMC
case BLOCK_4X4:
+ case BLOCK_8X4:
+ case BLOCK_4X8: return 1; break;
+#else
+ case BLOCK_4X4: return dir == 1; break;
case BLOCK_8X4: return dir == 0; break;
case BLOCK_4X8: return dir == 1; break;
+#endif
default: return 0;
}
}