summaryrefslogtreecommitdiff
path: root/vp8/encoder/rdopt.c
diff options
context:
space:
mode:
authorYunqing Wang <yunqingwang@google.com>2011-01-10 16:16:59 -0500
committerYunqing Wang <yunqingwang@google.com>2011-01-10 16:16:59 -0500
commit3675b2291cac15e6bc5a9bde9a0da7e00f919aaa (patch)
treeaafafbf940af2701bf1bc715afe0dea8c5c0c596 /vp8/encoder/rdopt.c
parentcf7c4732e5be5c881a49f778ba011ea5d656f66e (diff)
downloadlibvpx-3675b2291cac15e6bc5a9bde9a0da7e00f919aaa.tar
libvpx-3675b2291cac15e6bc5a9bde9a0da7e00f919aaa.tar.gz
libvpx-3675b2291cac15e6bc5a9bde9a0da7e00f919aaa.tar.bz2
libvpx-3675b2291cac15e6bc5a9bde9a0da7e00f919aaa.zip
Fix bug in motion search
The maximum possible MV in 1/8 pel units is (1<<11), which could cause mvcost out of its range that is 1023. Change maximum possible MV in 1/8 pel units to (1<<11)-8 will fix this problem. Change-Id: I5788ed1de773f66658c14f225fb4ab5b1679b74b
Diffstat (limited to 'vp8/encoder/rdopt.c')
-rw-r--r--vp8/encoder/rdopt.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index d694d39fb..366b8759a 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -1325,10 +1325,10 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x,
if (bsi.segment_rd < best_rd)
{
- int col_min = (best_ref_mv->col - MAX_POSSIBLE_MV) >>3;
- int col_max = (best_ref_mv->col + MAX_POSSIBLE_MV) >>3;
- int row_min = (best_ref_mv->row - MAX_POSSIBLE_MV) >>3;
- int row_max = (best_ref_mv->row + MAX_POSSIBLE_MV) >>3;
+ int col_min = (best_ref_mv->col - MAX_FULL_PEL_VAL) >>3;
+ int col_max = (best_ref_mv->col + MAX_FULL_PEL_VAL) >>3;
+ int row_min = (best_ref_mv->row - MAX_FULL_PEL_VAL) >>3;
+ int row_max = (best_ref_mv->row + MAX_FULL_PEL_VAL) >>3;
int tmp_col_min = x->mv_col_min;
int tmp_col_max = x->mv_col_max;
@@ -1927,14 +1927,14 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
x->e_mbd.mode_info_context->mbmi.ref_frame, cpi->common.ref_frame_sign_bias, &sr, &near_sadidx[0]);
/* adjust mvp to make sure it is within MV range */
- if(mvp.row > best_ref_mv.row + MAX_POSSIBLE_MV)
- mvp.row = best_ref_mv.row + MAX_POSSIBLE_MV;
- else if(mvp.row < best_ref_mv.row - MAX_POSSIBLE_MV)
- mvp.row = best_ref_mv.row - MAX_POSSIBLE_MV;
- if(mvp.col > best_ref_mv.col + MAX_POSSIBLE_MV)
- mvp.col = best_ref_mv.col + MAX_POSSIBLE_MV;
- else if(mvp.col < best_ref_mv.col - MAX_POSSIBLE_MV)
- mvp.col = best_ref_mv.col - MAX_POSSIBLE_MV;
+ if(mvp.row > best_ref_mv.row + MAX_FULL_PEL_VAL)
+ mvp.row = best_ref_mv.row + MAX_FULL_PEL_VAL;
+ else if(mvp.row < best_ref_mv.row - MAX_FULL_PEL_VAL)
+ mvp.row = best_ref_mv.row - MAX_FULL_PEL_VAL;
+ if(mvp.col > best_ref_mv.col + MAX_FULL_PEL_VAL)
+ mvp.col = best_ref_mv.col + MAX_FULL_PEL_VAL;
+ else if(mvp.col < best_ref_mv.col - MAX_FULL_PEL_VAL)
+ mvp.col = best_ref_mv.col - MAX_FULL_PEL_VAL;
}
// Check to see if the testing frequency for this mode is at its max
@@ -2066,10 +2066,10 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
int further_steps;
int n;
- int col_min = (best_ref_mv.col - MAX_POSSIBLE_MV) >>3;
- int col_max = (best_ref_mv.col + MAX_POSSIBLE_MV) >>3;
- int row_min = (best_ref_mv.row - MAX_POSSIBLE_MV) >>3;
- int row_max = (best_ref_mv.row + MAX_POSSIBLE_MV) >>3;
+ int col_min = (best_ref_mv.col - MAX_FULL_PEL_VAL) >>3;
+ int col_max = (best_ref_mv.col + MAX_FULL_PEL_VAL) >>3;
+ int row_min = (best_ref_mv.row - MAX_FULL_PEL_VAL) >>3;
+ int row_max = (best_ref_mv.row + MAX_FULL_PEL_VAL) >>3;
int tmp_col_min = x->mv_col_min;
int tmp_col_max = x->mv_col_max;