diff options
author | Yunqing Wang <yunqingwang@google.com> | 2011-04-18 15:48:34 -0400 |
---|---|---|
committer | Yunqing Wang <yunqingwang@google.com> | 2011-04-18 16:12:28 -0400 |
commit | b8f0b599853e02993ac6894d06511c695ca4bf3a (patch) | |
tree | 8ea5b0ac8492212a229f4e4ecf07f4b52e022597 /vp8/encoder/pickinter.c | |
parent | 1312a7a2e2ce740325ea3dde1a149d07e896ee42 (diff) | |
download | libvpx-b8f0b599853e02993ac6894d06511c695ca4bf3a.tar libvpx-b8f0b599853e02993ac6894d06511c695ca4bf3a.tar.gz libvpx-b8f0b599853e02993ac6894d06511c695ca4bf3a.tar.bz2 libvpx-b8f0b599853e02993ac6894d06511c695ca4bf3a.zip |
Use sub-pixel search's SSE in mode selection
Passed SSE from sub-pixel search back to pick_inter_mode
function, which is compared with the encode_breakout to
see if we could skip evaluating the remaining modes.
Change-Id: I4a86442834f0d1b880a19e21ea52d17d505f941d
Diffstat (limited to 'vp8/encoder/pickinter.c')
-rw-r--r-- | vp8/encoder/pickinter.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index 66b975bf6..a547f7792 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 *distortion) +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, unsigned int *sse) { (void) b; (void) d; @@ -59,6 +59,7 @@ int vp8_skip_fractional_mv_step(MACROBLOCK *mb, BLOCK *b, BLOCKD *d, MV *bestmv, (void) vfp; (void) mvcost; (void) distortion; + (void) sse; bestmv->row <<= 3; bestmv->col <<= 3; return 0; @@ -443,7 +444,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int re int bestsme; //int all_rds[MAX_MODES]; // Experimental debug code. int best_mode_index = 0; - int sse = INT_MAX; + unsigned int sse = INT_MAX; MV mvp; int near_sadidx[8] = {0, 1, 2, 3, 4, 5, 6, 7}; @@ -791,7 +792,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, &distortion2); + 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, &sse); mode_mv[NEWMV].row = d->bmi.mv.as_mv.row; mode_mv[NEWMV].col = d->bmi.mv.as_mv.col; @@ -822,7 +823,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int re x->e_mbd.block[0].bmi.mv.as_int = x->e_mbd.mode_info_context->mbmi.mv.as_int; if((this_mode != NEWMV) || !(have_subp_search)) - distortion2 = get_inter_mbpred_error(x, &cpi->fn_ptr[BLOCK_16X16], (unsigned int *)(&sse)); + distortion2 = get_inter_mbpred_error(x, &cpi->fn_ptr[BLOCK_16X16], &sse); this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2); |