]> granicus.if.org Git - libvpx/commitdiff
Merge "Reject ext-inter compound modes based on modelled RD." into nextgenv2
authorDebargha Mukherjee <debargha@google.com>
Thu, 30 Jun 2016 18:18:53 +0000 (18:18 +0000)
committerGerrit Code Review <noreply-gerritcodereview@google.com>
Thu, 30 Jun 2016 18:18:53 +0000 (18:18 +0000)
1  2 
vp10/common/blockd.h
vp10/encoder/rdopt.c

Simple merge
index 8b64936714c82df12b7e273082d7bd2c93492df4,c6f555c30a747541c1cd338cbd0e4bedeaa2bc7c..e96b2218900c20613e81503a714bd6d9569828c1
@@@ -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