shithub: libvpx

Download patch

ref: 6fb8953c190430bbc324b57efa0297f6a612d7c7
parent: d01357bbad6fb495f16c763add16dcc351a6f8b3
author: Paul Wilkins <paulwilkins@google.com>
date: Mon Nov 5 07:32:49 EST 2012

Restrict ref mv search range.

Experiment to test speed trade off of reducing the
extent of the ref mv search.

Reducing the maximum number of tested candidates to 9 had
minimal net effect on quality in any of the tests sets.

Reduction to 7 has a small negative impact (worst was STD-HD
at about -0.2%).

This change is in response to the apparently high number of
decode cycles reported in regard to mv-ref selection.

Change-Id: I0e92e92e324337689358495a1ec9ccdeb23dc774

--- a/vp9/common/blockd.h
+++ b/vp9/common/blockd.h
@@ -44,7 +44,7 @@
 /* Segment Feature Masks */
 #define SEGMENT_DELTADATA   0
 #define SEGMENT_ABSDATA     1
-#define MAX_MV_REFS 19
+#define MAX_MV_REFS 9
 
 typedef struct {
   int r, c;
--- a/vp9/common/mvref_common.c
+++ b/vp9/common/mvref_common.c
@@ -290,7 +290,7 @@
 
   // Populate a list with candidate reference vectors from the
   // spatial neighbours.
-  for (i = 2; i < MVREF_NEIGHBOURS; ++i) {
+  for (i = 2; (i < MVREF_NEIGHBOURS) && (index < (MAX_MV_REFS - 2)); ++i) {
     if (((mv_ref_search[i][0] << 7) >= xd->mb_to_left_edge) &&
         ((mv_ref_search[i][1] << 7) >= xd->mb_to_top_edge)) {
 
@@ -321,6 +321,11 @@
         }
       }
     }
+  }
+
+  // Make sure we are able to add 0,0
+  if (index > (MAX_MV_REFS - 1)) {
+    index = (MAX_MV_REFS - 1);
   }
 
   // 0,0 is always a valid reference.