Misc. fixes/changes in compound search If the two loop compound search is subsequently turned on for speed 0, there will be a -0.13% to -0.15% BDRATE gain, but the speed gain will be lost. Change-Id: I8bd80458c04a754c776370676bdf14fb6d8e7ad2
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 5b39ab4..78d2dd1 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -9840,9 +9840,12 @@ comp_rate[COMPOUND_AVERAGE] == INT_MAX && comp_rate[COMPOUND_DISTWTD] == INT_MAX; for (cur_type = COMPOUND_AVERAGE; cur_type < COMPOUND_TYPES; cur_type++) { - if (((1 << cur_type) & mode_search_mask) == 0) continue; - if (cur_type >= COMPOUND_WEDGE && !masked_compound_used) break; + if (((1 << cur_type) & mode_search_mask) == 0) { + if (cur_type == COMPOUND_AVERAGE) restore_dst_buf(xd, *tmp_dst, 1); + continue; + } if (!is_interinter_compound_used(cur_type, bsize)) continue; + if (cur_type >= COMPOUND_WEDGE && !masked_compound_used) break; if (cur_type == COMPOUND_DISTWTD && !try_distwtd_comp) continue; if (cur_type == COMPOUND_AVERAGE && try_average_and_distwtd_comp) continue; @@ -10016,7 +10019,7 @@ *rd = best_rd_cur; comp_best_model_rd = comp_model_rd_cur; best_compound_data = mbmi->interinter_comp; - if (masked_compound_used && cur_type != COMPOUND_TYPES - 1) { + if (masked_compound_used && cur_type >= COMPOUND_WEDGE) { memcpy(buffers->tmp_best_mask_buf, xd->seg_mask, mask_len); } best_compmode_interinter_cost = rs2; @@ -10151,8 +10154,7 @@ if (do_two_loop_comp_search) { // TODO(debargha): Change this to try alternate ways of splitting // modes while doing two pass compound_mode search. - mode_search_mask[0] = (1 << COMPOUND_AVERAGE) | (1 << COMPOUND_WEDGE) | - (1 << COMPOUND_DIFFWTD); + mode_search_mask[0] = (1 << COMPOUND_AVERAGE); } else { mode_search_mask[0] = (1 << COMPOUND_AVERAGE) | (1 << COMPOUND_DISTWTD) | (1 << COMPOUND_WEDGE) | (1 << COMPOUND_DIFFWTD);