Remove interp filter for non-translation global mv

BDRATE results:
lowres: -0.880% (up from -0.844%)

Change-Id: I017c0beddcc687148fed33c1e9963e05f1eaf6ea
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 9dce985..3340906 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1148,6 +1148,9 @@
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
+#if CONFIG_GLOBAL_MOTION
+  if (is_nontrans_global_motion(xd)) return;
+#endif  // CONFIG_GLOBAL_MOTION
   if (cm->interp_filter == SWITCHABLE) {
 #if CONFIG_DUAL_FILTER
     int dir;
@@ -1518,7 +1521,7 @@
       }
     }
 
-#if !CONFIG_DUAL_FILTER && !CONFIG_WARPED_MOTION
+#if !CONFIG_DUAL_FILTER && !CONFIG_WARPED_MOTION && !CONFIG_GLOBAL_MOTION
     write_mb_interp_filter(cpi, xd, w);
 #endif  // !CONFIG_DUAL_FILTER && !CONFIG_WARPED_MOTION
 
@@ -1715,7 +1718,7 @@
 #if CONFIG_WARPED_MOTION
     if (mbmi->motion_mode != WARPED_CAUSAL)
 #endif  // CONFIG_WARPED_MOTION
-#if CONFIG_DUAL_FILTER || CONFIG_WARPED_MOTION
+#if CONFIG_DUAL_FILTER || CONFIG_WARPED_MOTION || CONFIG_GLOBAL_MOTION
       write_mb_interp_filter(cpi, xd, w);
 #endif  // CONFIG_DUAL_FILTE || CONFIG_WARPED_MOTION
   }
diff --git a/av1/encoder/corner_detect.c b/av1/encoder/corner_detect.c
index f08ff59..e4c59dd 100644
--- a/av1/encoder/corner_detect.c
+++ b/av1/encoder/corner_detect.c
@@ -20,7 +20,7 @@
 #include "av1/encoder/corner_detect.h"
 
 // Fast_9 wrapper
-#define FAST_BARRIER 20
+#define FAST_BARRIER 18
 int fast_corner_detect(unsigned char *buf, int width, int height, int stride,
                        int *points, int max_points) {
   int num_points;
diff --git a/av1/encoder/corner_match.c b/av1/encoder/corner_match.c
index 99368ee..63225a8 100644
--- a/av1/encoder/corner_match.c
+++ b/av1/encoder/corner_match.c
@@ -22,7 +22,7 @@
 #define SEARCH_SZ 9
 #define SEARCH_SZ_BY2 ((SEARCH_SZ - 1) / 2)
 
-#define THRESHOLD_NCC 0.80
+#define THRESHOLD_NCC 0.75
 
 static double compute_variance(unsigned char *im, int stride, int x, int y,
                                double *mean) {
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index e6ce637..c6a7c8a 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -1200,7 +1200,10 @@
 #if CONFIG_WARPED_MOTION
           && mbmi->motion_mode != WARPED_CAUSAL
 #endif  // CONFIG_WARPED_MOTION
-          ) {
+#if CONFIG_GLOBAL_MOTION
+          && !is_nontrans_global_motion(xd)
+#endif  // CONFIG_GLOBAL_MOTION
+              ) {
 #if CONFIG_DUAL_FILTER
         update_filter_type_count(td->counts, xd, mbmi);
 #else
@@ -1377,6 +1380,9 @@
 #if CONFIG_DUAL_FILTER
         && av1_is_interp_needed(xd)
 #endif
+#if CONFIG_GLOBAL_MOTION
+        && !is_nontrans_global_motion(xd)
+#endif  // CONFIG_GLOBAL_MOTION
             ) {
 #if CONFIG_DUAL_FILTER
       update_filter_type_count(td->counts, xd, mbmi);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index e08baa3..25d0af1 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8893,6 +8893,7 @@
     if (!is_comp_pred && mbmi->motion_mode == SIMPLE_TRANSLATION)
       single_skippable[this_mode][refs[0]] = rd_stats->skip;
 #endif  // CONFIG_MOTION_VAR || CONFIG_WARPED_MOTION
+
 #if CONFIG_GLOBAL_MOTION
     if (this_mode == ZEROMV
 #if CONFIG_EXT_INTER
@@ -8902,6 +8903,21 @@
       rd_stats->rate += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[0]);
       if (is_comp_pred)
         rd_stats->rate += GLOBAL_MOTION_RATE(cpi, mbmi->ref_frame[1]);
+      if (is_nontrans_global_motion(xd)) {
+        rd_stats->rate -= rs;
+#if CONFIG_DUAL_FILTER
+        mbmi->interp_filter[0] = cm->interp_filter == SWITCHABLE
+                                     ? EIGHTTAP_REGULAR
+                                     : cm->interp_filter;
+        mbmi->interp_filter[1] = cm->interp_filter == SWITCHABLE
+                                     ? EIGHTTAP_REGULAR
+                                     : cm->interp_filter;
+#else
+        mbmi->interp_filter = cm->interp_filter == SWITCHABLE
+                                  ? EIGHTTAP_REGULAR
+                                  : cm->interp_filter;
+#endif  // CONFIG_DUAL_FILTER
+      }
     }
 #endif  // CONFIG_GLOBAL_MOTION
 
@@ -11046,6 +11062,30 @@
   *mbmi = best_mbmode;
   x->skip |= best_skip2;
 
+// Note: this section is needed since the mode may have been forced to
+// ZEROMV by the all-zero mode handling of ref-mv.
+#if CONFIG_GLOBAL_MOTION
+  if (mbmi->mode == ZEROMV
+#if CONFIG_EXT_INTER
+      || mbmi->mode == ZERO_ZEROMV
+#endif  // CONFIG_EXT_INTER
+      ) {
+    if (is_nontrans_global_motion(xd)) {
+#if CONFIG_DUAL_FILTER
+      mbmi->interp_filter[0] = cm->interp_filter == SWITCHABLE
+                                   ? EIGHTTAP_REGULAR
+                                   : cm->interp_filter;
+      mbmi->interp_filter[1] = cm->interp_filter == SWITCHABLE
+                                   ? EIGHTTAP_REGULAR
+                                   : cm->interp_filter;
+#else
+      mbmi->interp_filter = cm->interp_filter == SWITCHABLE ? EIGHTTAP_REGULAR
+                                                            : cm->interp_filter;
+#endif  // CONFIG_DUAL_FILTER
+    }
+  }
+#endif  // CONFIG_GLOBAL_MOTION
+
 #if CONFIG_REF_MV
   for (i = 0; i < 1 + has_second_ref(mbmi); ++i) {
     if (mbmi->mode != NEWMV)
@@ -11978,6 +12018,29 @@
     mbmi->mv[1].as_int = xd->mi[0]->bmi[3].as_mv[1].as_int;
   }
 
+// Note: this section is needed since the mode may have been forced to ZEROMV
+#if CONFIG_GLOBAL_MOTION
+  if (mbmi->mode == ZEROMV
+#if CONFIG_EXT_INTER
+      || mbmi->mode == ZERO_ZEROMV
+#endif  // CONFIG_EXT_INTER
+      ) {
+    if (is_nontrans_global_motion(xd)) {
+#if CONFIG_DUAL_FILTER
+      mbmi->interp_filter[0] = cm->interp_filter == SWITCHABLE
+                                   ? EIGHTTAP_REGULAR
+                                   : cm->interp_filter;
+      mbmi->interp_filter[1] = cm->interp_filter == SWITCHABLE
+                                   ? EIGHTTAP_REGULAR
+                                   : cm->interp_filter;
+#else
+      mbmi->interp_filter = cm->interp_filter == SWITCHABLE ? EIGHTTAP_REGULAR
+                                                            : cm->interp_filter;
+#endif  // CONFIG_DUAL_FILTER
+    }
+  }
+#endif  // CONFIG_GLOBAL_MOTION
+
   for (i = 0; i < REFERENCE_MODES; ++i) {
     if (best_pred_rd[i] == INT64_MAX)
       best_pred_diff[i] = INT_MIN;