From: Debargha Mukherjee Date: Thu, 30 Jun 2016 18:18:53 +0000 (+0000) Subject: Merge "Reject ext-inter compound modes based on modelled RD." into nextgenv2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e5e37e310be5c5a1c2931b5fd1fb316c7a409386;p=libvpx Merge "Reject ext-inter compound modes based on modelled RD." into nextgenv2 --- e5e37e310be5c5a1c2931b5fd1fb316c7a409386 diff --cc vp10/encoder/rdopt.c index 8b6493671,c6f555c30..e96b22189 --- a/vp10/encoder/rdopt.c +++ b/vp10/encoder/rdopt.c @@@ -7665,6 -7753,89 +7666,23 @@@ static int64_t handle_inter_mode(VP10_C single_filter[this_mode][refs[0]] = mbmi->interp_filter; #endif - if (cpi->sf.adaptive_mode_search) - if (is_comp_pred) -#if CONFIG_EXT_INTER - switch (this_mode) { - case NEAREST_NEARESTMV: - if (single_skippable[NEARESTMV][refs[0]] && - single_skippable[NEARESTMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case ZERO_ZEROMV: - if (single_skippable[ZEROMV][refs[0]] && - single_skippable[ZEROMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEW_NEWMV: - if (single_skippable[NEWMV][refs[0]] && - single_skippable[NEWMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEAREST_NEWMV: - if (single_skippable[NEARESTMV][refs[0]] && - single_skippable[NEWMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEAR_NEWMV: - if (single_skippable[NEARMV][refs[0]] && - single_skippable[NEWMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEW_NEARESTMV: - if (single_skippable[NEWMV][refs[0]] && - single_skippable[NEARESTMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEW_NEARMV: - if (single_skippable[NEWMV][refs[0]] && - single_skippable[NEARMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEAREST_NEARMV: - if (single_skippable[NEARESTMV][refs[0]] && - single_skippable[NEARMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEAR_NEARMV: - if (single_skippable[NEARMV][refs[0]] && - single_skippable[NEARMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - case NEAR_NEARESTMV: - if (single_skippable[NEARMV][refs[0]] && - single_skippable[NEARESTMV][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - default: - if (single_skippable[this_mode][refs[0]] && - single_skippable[this_mode][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); - break; - } -#else - if (single_skippable[this_mode][refs[0]] && - single_skippable[this_mode][refs[1]]) - memset(skip_txfm, SKIP_TXFM_AC_DC, sizeof(skip_txfm)); -#endif // CONFIG_EXT_INTER - + #if CONFIG_EXT_INTER + if (modelled_rd != NULL) { + if (is_comp_pred) { + const int mode0 = compound_ref0_mode(this_mode); + const int mode1 = compound_ref1_mode(this_mode); + int64_t mrd = VPXMIN(modelled_rd[mode0][refs[0]], + modelled_rd[mode1][refs[1]]); + if (rd / 4 * 3 > mrd && ref_best_rd < INT64_MAX) { + restore_dst_buf(xd, orig_dst, orig_dst_stride); + return INT64_MAX; + } + } else if (!is_comp_interintra_pred) { + modelled_rd[this_mode][refs[0]] = rd; + } + } + #endif // CONFIG_EXT_INTER + if (cpi->sf.use_rd_breakout && ref_best_rd < INT64_MAX) { // if current pred_error modeled rd is substantially more than the best // so far, do not bother doing full rd