diff options
author | Yunqing Wang <yunqingwang@google.com> | 2011-04-15 08:17:03 -0700 |
---|---|---|
committer | Code Review <code-review@webmproject.org> | 2011-04-15 08:17:03 -0700 |
commit | 1312a7a2e2ce740325ea3dde1a149d07e896ee42 (patch) | |
tree | cfc97fdf677c7745aa1000d775fad645d1d73349 /vp8/encoder/pickinter.c | |
parent | a3399291ad0350e57cdce62369cb9bf196ec1ebb (diff) | |
parent | 918fb5487ee3c3722415e176433b380d07672310 (diff) | |
download | libvpx-1312a7a2e2ce740325ea3dde1a149d07e896ee42.tar libvpx-1312a7a2e2ce740325ea3dde1a149d07e896ee42.tar.gz libvpx-1312a7a2e2ce740325ea3dde1a149d07e896ee42.tar.bz2 libvpx-1312a7a2e2ce740325ea3dde1a149d07e896ee42.zip |
Merge "Reduce unnecessary distortion computation"
Diffstat (limited to 'vp8/encoder/pickinter.c')
-rw-r--r-- | vp8/encoder/pickinter.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index 4b3c6c632..66b975bf6 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -50,7 +50,7 @@ extern int vp8_cost_mv_ref(MB_PREDICTION_MODE m, const int near_mv_ref_ct[4]); extern void vp8_set_mbmode_and_mvs(MACROBLOCK *x, MB_PREDICTION_MODE mb, MV *mv); -int vp8_skip_fractional_mv_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestmv, MV *ref_mv, int error_per_bit, const vp8_variance_fn_ptr_t *vfp, int *mvcost[2]) +int vp8_skip_fractional_mv_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestmv, MV *ref_mv, int error_per_bit, const vp8_variance_fn_ptr_t *vfp, int *mvcost[2], int *distortion) { (void) b; (void) d; @@ -58,6 +58,7 @@ int vp8_skip_fractional_mv_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestmv, (void) error_per_bit; (void) vfp; (void) mvcost; + (void) distortion; bestmv->row <<= 3; bestmv->col <<= 3; return 0; @@ -459,6 +460,8 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int re int skip_mode[4] = {0, 0, 0, 0}; + int have_subp_search = cpi->sf.half_pixel_search; /* In real-time mode, when Speed >= 15, no sub-pixel search. */ + vpx_memset(mode_mv, 0, sizeof(mode_mv)); vpx_memset(nearest_mv, 0, sizeof(nearest_mv)); vpx_memset(near_mv, 0, sizeof(near_mv)); @@ -788,7 +791,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int re } if (bestsme < INT_MAX) - cpi->find_fractional_mv_step(x, b, d, &d->bmi.mv.as_mv, &best_ref_mv, x->errorperbit, &cpi->fn_ptr[BLOCK_16X16], cpi->mb.mvcost); + cpi->find_fractional_mv_step(x, b, d, &d->bmi.mv.as_mv, &best_ref_mv, x->errorperbit, &cpi->fn_ptr[BLOCK_16X16], cpi->mb.mvcost, &distortion2); mode_mv[NEWMV].row = d->bmi.mv.as_mv.row; mode_mv[NEWMV].col = d->bmi.mv.as_mv.col; @@ -818,7 +821,8 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int re x->e_mbd.block[0].bmi.mode = this_mode; x->e_mbd.block[0].bmi.mv.as_int = x->e_mbd.mode_info_context->mbmi.mv.as_int; - distortion2 = get_inter_mbpred_error(x, &cpi->fn_ptr[BLOCK_16X16], (unsigned int *)(&sse)); + if((this_mode != NEWMV) || !(have_subp_search)) + distortion2 = get_inter_mbpred_error(x, &cpi->fn_ptr[BLOCK_16X16], (unsigned int *)(&sse)); this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2); |