Factor out code to record the best compound mode No change in performance. BUG=aomedia:2615 Change-Id: I8dc063e25c1491268624305a2e1991fbfaa70119
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 268f08f..aa1948f 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -4187,6 +4187,40 @@ // Indicates number of winner simple translation modes to be used static unsigned int num_winner_motion_modes[3] = { 0, 10, 3 }; +static void record_best_compound(REFERENCE_MODE reference_mode, + RD_STATS *rd_stats, int comp_pred, int rdmult, + InterModeSearchState *search_state, + int compmode_cost) { + int64_t single_rd, hybrid_rd, single_rate, hybrid_rate; + + if (reference_mode == REFERENCE_MODE_SELECT) { + single_rate = rd_stats->rate - compmode_cost; + hybrid_rate = rd_stats->rate; + } else { + single_rate = rd_stats->rate; + hybrid_rate = rd_stats->rate + compmode_cost; + } + + single_rd = RDCOST(rdmult, single_rate, rd_stats->dist); + hybrid_rd = RDCOST(rdmult, hybrid_rate, rd_stats->dist); + + if (!comp_pred) { + if (single_rd < + search_state->intra_search_state.best_pred_rd[SINGLE_REFERENCE]) + search_state->intra_search_state.best_pred_rd[SINGLE_REFERENCE] = + single_rd; + } else { + if (single_rd < + search_state->intra_search_state.best_pred_rd[COMPOUND_REFERENCE]) + search_state->intra_search_state.best_pred_rd[COMPOUND_REFERENCE] = + single_rd; + } + if (hybrid_rd < + search_state->intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT]) + search_state->intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT] = + hybrid_rd; +} + void av1_rd_pick_inter_mode_sb(AV1_COMP *cpi, TileDataEnc *tile_data, MACROBLOCK *x, RD_STATS *rd_cost, const BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx, @@ -4567,34 +4601,8 @@ /* keep record of best compound/single-only prediction */ if (!disable_skip) { - int64_t single_rd, hybrid_rd, single_rate, hybrid_rate; - - if (cm->current_frame.reference_mode == REFERENCE_MODE_SELECT) { - single_rate = rd_stats.rate - compmode_cost; - hybrid_rate = rd_stats.rate; - } else { - single_rate = rd_stats.rate; - hybrid_rate = rd_stats.rate + compmode_cost; - } - - single_rd = RDCOST(x->rdmult, single_rate, rd_stats.dist); - hybrid_rd = RDCOST(x->rdmult, hybrid_rate, rd_stats.dist); - - if (!comp_pred) { - if (single_rd < - search_state.intra_search_state.best_pred_rd[SINGLE_REFERENCE]) - search_state.intra_search_state.best_pred_rd[SINGLE_REFERENCE] = - single_rd; - } else { - if (single_rd < - search_state.intra_search_state.best_pred_rd[COMPOUND_REFERENCE]) - search_state.intra_search_state.best_pred_rd[COMPOUND_REFERENCE] = - single_rd; - } - if (hybrid_rd < - search_state.intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT]) - search_state.intra_search_state.best_pred_rd[REFERENCE_MODE_SELECT] = - hybrid_rd; + record_best_compound(cm->current_frame.reference_mode, &rd_stats, + comp_pred, x->rdmult, &search_state, compmode_cost); } }