From cce7020f2ce5bb8e4d493705d83c0dfa1f678309 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Fri, 13 Mar 2015 09:53:15 -0700 Subject: [PATCH] Use sdx4df to do 1-step refinement Change-Id: Ie0c3ef3ae3aedf049b1a296de607730b79c12672 --- vp9/encoder/vp9_mcomp.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/vp9/encoder/vp9_mcomp.c b/vp9/encoder/vp9_mcomp.c index eb01bb2..0d833ff 100644 --- a/vp9/encoder/vp9_mcomp.c +++ b/vp9/encoder/vp9_mcomp.c @@ -1803,7 +1803,7 @@ unsigned int vp9_int_pro_motion_estimation(const VP9_COMP *cpi, MACROBLOCK *x, const int ref_stride = xd->plane[0].pre[0].stride; uint8_t const *ref_buf, *src_buf; MV *tmp_mv = &xd->mi[0].src_mi->mbmi.mv[0].as_mv; - int best_sad, tmp_sad, this_sad[5]; + unsigned int best_sad, tmp_sad, this_sad[4]; MV this_mv; #if CONFIG_VP9_HIGHBITDEPTH @@ -1842,16 +1842,23 @@ unsigned int vp9_int_pro_motion_estimation(const VP9_COMP *cpi, MACROBLOCK *x, tmp_mv->col = vector_match(hbuf, src_hbuf, b_width_log2_lookup[bsize]); tmp_mv->row = vector_match(vbuf, src_vbuf, b_height_log2_lookup[bsize]); - best_sad = INT_MAX; this_mv = *tmp_mv; src_buf = x->plane[0].src.buf; - for (idx = 0; idx < 5; ++idx) { - ref_buf = xd->plane[0].pre[0].buf + - (search_pos[idx].row + this_mv.row) * ref_stride + - (search_pos[idx].col + this_mv.col); + ref_buf = xd->plane[0].pre[0].buf + this_mv.row * ref_stride + this_mv.col; + best_sad = cpi->fn_ptr[bsize].sdf(src_buf, src_stride, ref_buf, ref_stride); + + { + const uint8_t * const pos[4] = { + ref_buf - ref_stride, + ref_buf - 1, + ref_buf + 1, + ref_buf + ref_stride, + }; + + cpi->fn_ptr[bsize].sdx4df(src_buf, src_stride, pos, ref_stride, this_sad); + } - this_sad[idx] = cpi->fn_ptr[bsize].sdf(src_buf, src_stride, - ref_buf, ref_stride); + for (idx = 0; idx < 4; ++idx) { if (this_sad[idx] < best_sad) { best_sad = this_sad[idx]; tmp_mv->row = search_pos[idx].row + this_mv.row; @@ -1859,12 +1866,12 @@ unsigned int vp9_int_pro_motion_estimation(const VP9_COMP *cpi, MACROBLOCK *x, } } - if (this_sad[0] < this_sad[4]) + if (this_sad[0] < this_sad[3]) this_mv.row -= 1; else this_mv.row += 1; - if (this_sad[1] < this_sad[3]) + if (this_sad[1] < this_sad[2]) this_mv.col -= 1; else this_mv.col += 1; -- 2.7.4