Adjust full-pixel clamping and motion vector limit calculation Do mvp clamping in full-pixel precision instead of 1/8-pixel precision to avoid error caused by right shifting operation. Also, further fixed the motion vector limit calculation in change: b7480454706a6b15bf091e659cd6227ab373c1a6 Change-Id: Ied88a4f7ddfb0476eb9f7afc6ceeddbf209fffd7
diff --git a/vp8/encoder/firstpass.c b/vp8/encoder/firstpass.c index 4fc6a8a..881481b 100644 --- a/vp8/encoder/firstpass.c +++ b/vp8/encoder/firstpass.c
@@ -431,6 +431,7 @@ int num00; int_mv tmp_mv; + int_mv ref_mv_full; int tmp_err; int step_param = 3; //3; // Dont search over full range for first pass @@ -447,7 +448,9 @@ // Initial step/diamond search centred on best mv tmp_mv.as_int = 0; - tmp_err = cpi->diamond_search_sad(x, b, d, ref_mv, &tmp_mv, step_param, + ref_mv_full.as_mv.col = ref_mv->as_mv.col>>3; + ref_mv_full.as_mv.row = ref_mv->as_mv.row>>3; + tmp_err = cpi->diamond_search_sad(x, b, d, &ref_mv_full, &tmp_mv, step_param, x->sadperbit16, &num00, &v_fn_ptr, x->mvcost, ref_mv); if ( tmp_err < INT_MAX-new_mv_mode_penalty ) @@ -472,7 +475,7 @@ num00--; else { - tmp_err = cpi->diamond_search_sad(x, b, d, ref_mv, &tmp_mv, + tmp_err = cpi->diamond_search_sad(x, b, d, &ref_mv_full, &tmp_mv, step_param + n, x->sadperbit16, &num00, &v_fn_ptr, x->mvcost, ref_mv);