shithub: libvpx

Download patch

ref: b2762a8853762a7f13bbf084ae1ae99992013ce2
parent: a5a5b115b104db4c950780f502f2e1cfd0d4e390
author: Jingning Han <[email protected]>
date: Thu Feb 5 12:13:25 EST 2015

Re-arrange inter mode search order in RTC coding flow

This commit makes the ZEROMV mode first in the search order to
ensure that the zero mv is always checked in the RTC coding mode.
It improves the average speed -6 compression performance by 0.3%
in both PSNR and SSIM at no visible speed change.

Change-Id: I465a7e59f4e20cd84fee3f02ced6f98036945949

--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -573,6 +573,10 @@
   *rd_cost = best_rdc;
 }
 
+static const PREDICTION_MODE inter_mode_set[INTER_MODES] = {
+    ZEROMV, NEARESTMV, NEARMV, NEWMV,
+};
+
 // TODO(jingning) placeholder for inter-frame non-RD mode decision.
 // this needs various further optimizations. to be continued..
 void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
@@ -732,10 +736,12 @@
     mbmi->ref_frame[0] = ref_frame;
     set_ref_ptrs(cm, xd, ref_frame, NONE);
 
-    for (this_mode = NEARESTMV; this_mode <= NEWMV; ++this_mode) {
+    for (i = 0; i < INTER_MODES; ++i) {
       int rate_mv = 0;
       int mode_rd_thresh;
-      int mode_index = mode_idx[ref_frame][INTER_OFFSET(this_mode)];
+      int mode_index;
+      this_mode = inter_mode_set[i];
+      mode_index = mode_idx[ref_frame][INTER_OFFSET(this_mode)];
 
       if (const_motion[ref_frame] && this_mode == NEARMV)
         continue;