Disable OBMC + compound Disable OBMC mode if the current block uses compound prediction. Results if we only disable this combination for small block sizes are also listed. Loss of gain (lowres/midres/AWCYHL) no compound : 0.230%/0.105%/0.15% no compound <= 8x8: 0.043%/-0.016%/0% no compound <= 16x16: 0.153%/0.029%/0.05% Change-Id: I94c9d704172dd02e53f3b2004a8032a4f1265057
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index 5cf0f83..3f40724 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -1082,6 +1082,14 @@ return (bsize >= BLOCK_8X8); } +static INLINE int is_motion_variation_allowed_compound( + const MB_MODE_INFO *mbmi) { + if (!has_second_ref(mbmi)) + return 1; + else + return 0; +} + #if CONFIG_MOTION_VAR // input: log2 of length, 0(4), 1(8), ... static const int max_neighbor_obmc[6] = { 0, 1, 2, 3, 4, 4 }; @@ -1104,10 +1112,11 @@ #endif // CONFIG_GLOBAL_MOTION && SEPARATE_GLOBAL_MOTION #if CONFIG_EXT_INTER if (is_motion_variation_allowed_bsize(mbmi->sb_type) && - is_inter_mode(mbmi->mode) && mbmi->ref_frame[1] != INTRA_FRAME) { + is_inter_mode(mbmi->mode) && mbmi->ref_frame[1] != INTRA_FRAME && + is_motion_variation_allowed_compound(mbmi)) { #else if (is_motion_variation_allowed_bsize(mbmi->sb_type) && - is_inter_mode(mbmi->mode)) { + is_inter_mode(mbmi->mode) && is_motion_variation_allowed_compound(mbmi)) { #endif // CONFIG_EXT_INTER #if CONFIG_MOTION_VAR if (!check_num_overlappable_neighbors(mbmi)) return SIMPLE_TRANSLATION;