From 6d3bd966075fdb76e415095f6165d0541f4bd0d8 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Fri, 27 Sep 2013 17:22:59 -0700 Subject: [PATCH] BITSTREAM - CLARIFICATION OF MV SIZE RANGE The codec should effectively run with motion vector of range (-2048, 2047) in full pixels, for sequences of 1080p and below. Add assertions to clarify this behavior. Change-Id: Ia0cac28249f587d8f8882205228fa480263ab313 --- vp9/common/vp9_entropymv.h | 4 ++++ vp9/decoder/vp9_decodemv.c | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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); + } } } -- 2.40.0