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.