Restrict ref mv search range.
authorPaul Wilkins <paulwilkins@google.com>
Mon, 5 Nov 2012 12:32:49 +0000 (12:32 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Mon, 12 Nov 2012 11:31:12 +0000 (11:31 +0000)
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

vp9/common/blockd.h
vp9/common/mvref_common.c

index 8623354..300c01f 100644 (file)
@@ -44,7 +44,7 @@ void vpx_log(const char *format, ...);
 /* 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;
index d6faa13..67f2fb0 100644 (file)
@@ -290,7 +290,7 @@ void vp9_find_mv_refs(
 
   // 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)) {
 
@@ -323,6 +323,11 @@ void vp9_find_mv_refs(
     }
   }
 
+  // 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.
   for (i = 0; i < index; ++i)
     if (candidate_mvs[i].as_int == 0)