summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vp9/common/vp9_entropymv.h4
-rw-r--r--vp9/decoder/vp9_decodemv.c14
2 files changed, 17 insertions, 1 deletions
diff --git a/vp9/common/vp9_entropymv.h b/vp9/common/vp9_entropymv.h
index 5018c2013..3b782ab0a 100644
--- a/vp9/common/vp9_entropymv.h
+++ b/vp9/common/vp9_entropymv.h
@@ -73,6 +73,10 @@ extern struct vp9_token vp9_mv_class_encodings[MV_CLASSES];
#define MV_MAX ((1 << MV_MAX_BITS) - 1)
#define MV_VALS ((MV_MAX << 1) + 1)
+#define MV_IN_USE_BITS 14
+#define MV_UPP ((1 << MV_IN_USE_BITS) - 1)
+#define MV_LOW (-(1 << MV_IN_USE_BITS))
+
extern const vp9_tree_index vp9_mv_class0_tree[2 * CLASS0_SIZE - 2];
extern struct vp9_token vp9_mv_class0_encodings[CLASS0_SIZE];
diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c
index c697d665d..18e6ea0ef 100644
--- a/vp9/decoder/vp9_decodemv.c
+++ b/vp9/decoder/vp9_decodemv.c
@@ -522,8 +522,14 @@ static void read_inter_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
assert(!"Invalid inter mode value");
}
mi->bmi[j].as_mv[0].as_int = block[0].as_int;
- if (is_compound)
+ assert(block[0].as_mv.row < MV_UPP && block[0].as_mv.row > MV_LOW);
+ assert(block[0].as_mv.col < MV_UPP && block[0].as_mv.col > MV_LOW);
+
+ if (is_compound) {
mi->bmi[j].as_mv[1].as_int = block[1].as_int;
+ assert(block[1].as_mv.row < MV_UPP && block[1].as_mv.row > MV_LOW);
+ assert(block[1].as_mv.col < MV_UPP && block[1].as_mv.col > MV_LOW);
+ }
if (num_4x4_h == 2)
mi->bmi[j + 2] = mi->bmi[j];
@@ -564,6 +570,12 @@ static void read_inter_block_mode_info(VP9D_COMP *pbi, MODE_INFO *mi,
default:
assert(!"Invalid inter mode value");
}
+ assert(mv0->as_mv.row < MV_UPP && mv0->as_mv.row > MV_LOW);
+ assert(mv0->as_mv.col < MV_UPP && mv0->as_mv.col > MV_LOW);
+ if (is_compound) {
+ assert(mv1->as_mv.row < MV_UPP && mv1->as_mv.row > MV_LOW);
+ assert(mv1->as_mv.col < MV_UPP && mv1->as_mv.col > MV_LOW);
+ }
}
}