From fde1b6d7f2f25aaea88188bc2afd13b2c1361bbf Mon Sep 17 00:00:00 2001 From: Dmitry Kovalev Date: Wed, 12 Feb 2014 12:52:08 -0800 Subject: [PATCH] Using MV instead of int_mv inside vp9_full_pixel_diamond(). Change-Id: If33a5a12c4025d9b5ec863dfccea7ee70f800665 --- vp9/encoder/vp9_mcomp.c | 47 +++++++++++++++++--------------------- vp9/encoder/vp9_mcomp.h | 2 +- vp9/encoder/vp9_pickmode.c | 3 +-- vp9/encoder/vp9_rdopt.c | 4 ++-- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/vp9/encoder/vp9_mcomp.c b/vp9/encoder/vp9_mcomp.c index 62b33e4b9..f5c0e9b8a 100644 --- a/vp9/encoder/vp9_mcomp.c +++ b/vp9/encoder/vp9_mcomp.c @@ -1289,62 +1289,57 @@ int vp9_diamond_search_sadx4(const MACROBLOCK *x, int vp9_full_pixel_diamond(VP9_COMP *cpi, MACROBLOCK *x, MV *mvp_full, int step_param, - int sadpb, int further_steps, - int do_refine, + int sadpb, int further_steps, int do_refine, const vp9_variance_fn_ptr_t *fn_ptr, - const MV *ref_mv, int_mv *dst_mv) { - int_mv temp_mv; - int thissme, n, num00; - int bestsme = cpi->diamond_search_sad(x, mvp_full, &temp_mv.as_mv, - step_param, sadpb, &num00, + const MV *ref_mv, MV *dst_mv) { + MV temp_mv; + int thissme, n, num00 = 0; + int bestsme = cpi->diamond_search_sad(x, mvp_full, &temp_mv, + step_param, sadpb, &n, fn_ptr, x->nmvjointcost, x->mvcost, ref_mv); - dst_mv->as_int = temp_mv.as_int; + *dst_mv = temp_mv; - n = num00; - num00 = 0; - - /* If there won't be more n-step search, check to see if refining search is - * needed. */ + // If there won't be more n-step search, check to see if refining search is + // needed. if (n > further_steps) do_refine = 0; while (n < further_steps) { - n++; + ++n; if (num00) { num00--; } else { - thissme = cpi->diamond_search_sad(x, mvp_full, &temp_mv.as_mv, + thissme = cpi->diamond_search_sad(x, mvp_full, &temp_mv, step_param + n, sadpb, &num00, fn_ptr, x->nmvjointcost, x->mvcost, ref_mv); - /* check to see if refining search is needed. */ - if (num00 > (further_steps - n)) + // check to see if refining search is needed. + if (num00 > further_steps - n) do_refine = 0; if (thissme < bestsme) { bestsme = thissme; - dst_mv->as_int = temp_mv.as_int; + *dst_mv = temp_mv; } } } - /* final 1-away diamond refining search */ - if (do_refine == 1) { - int search_range = 8; - int_mv best_mv; - best_mv.as_int = dst_mv->as_int; - thissme = cpi->refining_search_sad(x, &best_mv.as_mv, sadpb, search_range, + // final 1-away diamond refining search + if (do_refine) { + const int search_range = 8; + MV best_mv = *dst_mv; + thissme = cpi->refining_search_sad(x, &best_mv, sadpb, search_range, fn_ptr, x->nmvjointcost, x->mvcost, ref_mv); - if (thissme < bestsme) { bestsme = thissme; - dst_mv->as_int = best_mv.as_int; + *dst_mv = best_mv; } } + return bestsme; } diff --git a/vp9/encoder/vp9_mcomp.h b/vp9/encoder/vp9_mcomp.h index e1d6abeb6..4414f3d49 100644 --- a/vp9/encoder/vp9_mcomp.h +++ b/vp9/encoder/vp9_mcomp.h @@ -46,7 +46,7 @@ int vp9_full_pixel_diamond(struct VP9_COMP *cpi, MACROBLOCK *x, MV *mvp_full, int step_param, int sadpb, int further_steps, int do_refine, const vp9_variance_fn_ptr_t *fn_ptr, - const MV *ref_mv, int_mv *dst_mv); + const MV *ref_mv, MV *dst_mv); int vp9_hex_search(const MACROBLOCK *x, MV *ref_mv, diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 6fed3d576..48948fc4a 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -99,8 +99,7 @@ static int full_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x, mvp_full.row >>= 3; vp9_full_pixel_diamond(cpi, x, &mvp_full, step_param, sadpb, further_steps, 1, - &cpi->fn_ptr[bsize], &ref_mv.as_mv, tmp_mv); - + &cpi->fn_ptr[bsize], &ref_mv.as_mv, &tmp_mv->as_mv); x->mv_col_min = tmp_col_min; x->mv_col_max = tmp_col_max; x->mv_row_min = tmp_row_min; diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index aed4de5f4..f0a861d60 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -1819,7 +1819,7 @@ static void rd_check_segment_txsize(VP9_COMP *cpi, MACROBLOCK *x, bestsme = vp9_full_pixel_diamond(cpi, x, &mvp_full, step_param, sadpb, further_steps, 0, v_fn_ptr, &bsi->ref_mv->as_mv, - new_mv); + &new_mv->as_mv); } // Should we do a full search (best quality only) @@ -2440,7 +2440,7 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, bestsme = vp9_full_pixel_diamond(cpi, x, &mvp_full, step_param, sadpb, further_steps, 1, &cpi->fn_ptr[bsize], - &ref_mv.as_mv, tmp_mv); + &ref_mv.as_mv, &tmp_mv->as_mv); } x->mv_col_min = tmp_col_min; -- 2.40.0