Add an early termination check in handle_inter_mode
authorJingning Han <jingning@google.com>
Tue, 26 Aug 2014 22:53:56 +0000 (15:53 -0700)
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>
Wed, 27 Aug 2014 21:59:52 +0000 (14:59 -0700)
Check the mode and motion vector cost. If it is already above
the existing best rate-distortion cost, skip the rest check process
on this mode.

Change-Id: Ie065cebdfda2a3be3be18b8e8b43dc29aaa8c179

vp9/encoder/vp9_rdopt.c

index f7b5925..053dbbb 100644 (file)
@@ -2236,6 +2236,10 @@ static int64_t handle_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
    * if the first is known */
   *rate2 += cost_mv_ref(cpi, this_mode, mbmi->mode_context[refs[0]]);
 
+  if (RDCOST(x->rdmult, x->rddiv, *rate2, 0) > ref_best_rd &&
+      mbmi->mode != NEARESTMV)
+    return INT64_MAX;
+
   pred_exists = 0;
   // Are all MVs integer pel for Y and UV
   intpel_mv = !mv_has_subpel(&mbmi->mv[0].as_mv);