diff --git a/vp8/encoder/mcomp.c b/vp8/encoder/mcomp.c index d9923fbe99040838068cc542c1e7a63f542ae72a..33aaa2ca9350757035610a96c660335ec599df7f 100644 --- a/vp8/encoder/mcomp.c +++ b/vp8/encoder/mcomp.c @@ -779,15 +779,17 @@ int vp8_hex_search int *num00, const vp8_variance_fn_ptr_t *vfp, int *mvsadcost[2], - int *mvcost[2] + int *mvcost[2], + MV *center_mv ) { MV hex[6] = { { -1, -2}, {1, -2}, {2, 0}, {1, 2}, { -1, 2}, { -2, 0} } ; - MV neighbors[8] = { { -1, -1}, { -1, 0}, { -1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} } ; + MV neighbors[8] = { { -1, -1}, {0, -1}, {1, -1}, { -1, 0}, {1, 0}, { -1, 1}, {0, 1}, {1, 1} } ; int i, j; unsigned char *src = (*(b->base_src) + b->src); int src_stride = b->src_stride; - int rr = ref_mv->row, rc = ref_mv->col, br = rr >> 3, bc = rc >> 3, tr, tc; + int rr = center_mv->row, rc = center_mv->col; + int br = ref_mv->row >> 3, bc = ref_mv->col >> 3, tr, tc; unsigned int besterr, thiserr = 0x7fffffff; int k = -1, tk; @@ -892,7 +894,7 @@ cal_neighbors: best_mv->row = br; best_mv->col = bc; - return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + MVC(br, bc) ; + return vfp->vf(src, src_stride, PRE(br, bc), d->pre_stride, &thiserr) + vp8_mv_err_cost(best_mv, center_mv, mvcost, error_per_bit) ; } #undef MVC #undef PRE diff --git a/vp8/encoder/mcomp.h b/vp8/encoder/mcomp.h index 7600f87fc2fea1a3e2f8fbb35f85f0abe42c6f5e..83f95c6e012665eeb9dd684d3d757986f896136b 100644 --- a/vp8/encoder/mcomp.h +++ b/vp8/encoder/mcomp.h @@ -43,8 +43,8 @@ extern int vp8_hex_search int *num00, const vp8_variance_fn_ptr_t *vf, int *mvsadcost[2], - int *mvcost[2] - + int *mvcost[2], + MV *center_mv ); typedef int (fractional_mv_step_fp) diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index fc908df064d387c8f4454b8987071e56d3990a95..511631ae4675317d4272db11b7808bf755197031 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -1121,6 +1121,7 @@ void vp8_set_speed_features(VP8_COMP *cpi) #else sf->search_method = DIAMOND; #endif + sf->iterative_sub_pixel = 0; cpi->mode_check_freq[THR_V_PRED] = 4; cpi->mode_check_freq[THR_H_PRED] = 4; @@ -1172,7 +1173,6 @@ void vp8_set_speed_features(VP8_COMP *cpi) int total_skip; int min = 2000; - sf->iterative_sub_pixel = 0; if (cpi->oxcf.encode_breakout > 2000) min = cpi->oxcf.encode_breakout; diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index 287ca618e5894728ef145c54f129f600c317dbed..0bfcd38a6d525818899a5543b38b48283d3363e9 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c @@ -718,7 +718,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec if (cpi->sf.search_method == HEX) { - bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost); + bestsme = vp8_hex_search(x, b, d, &mvp, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost, &best_ref_mv); mode_mv[NEWMV].row = d->bmi.mv.as_mv.row; mode_mv[NEWMV].col = d->bmi.mv.as_mv.col; } diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 632bca4190a51ef5a2fd4c72ab6999c209915865..7080425c1aa1c30ecdfa14c9cc5110c12581e01e 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -1149,7 +1149,7 @@ void vp8_rd_check_segment(VP8_COMP *cpi, MACROBLOCK *x, BEST_SEG_INFO *bsi, if (cpi->sf.search_method == HEX) bestsme = vp8_hex_search(x, c, e, bsi->ref_mv, - &mode_mv[NEW4X4], step_param, sadpb, &num00, v_fn_ptr, x->mvsadcost, x->mvcost); + &mode_mv[NEW4X4], step_param, sadpb, &num00, v_fn_ptr, x->mvsadcost, x->mvcost, bsi->ref_mv); else { @@ -2091,7 +2091,7 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int if (cpi->sf.search_method == HEX) { - bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost); + bestsme = vp8_hex_search(x, b, d, &best_ref_mv, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost, &best_ref_mv); mode_mv[NEWMV].row = d->bmi.mv.as_mv.row; mode_mv[NEWMV].col = d->bmi.mv.as_mv.col; } diff --git a/vp8/encoder/temporal_filter.c b/vp8/encoder/temporal_filter.c index 3c6d1a4d963dc26e1553ea138e8221fdf389ebc4..e4c3db1b86ba1d787bfc3ac67cf384745868f207 100644 --- a/vp8/encoder/temporal_filter.c +++ b/vp8/encoder/temporal_filter.c @@ -204,7 +204,7 @@ static int vp8_temporal_filter_find_matching_mb_c step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], - mvsadcost, mvcost); + mvsadcost, mvcost, &best_ref_mv1); } else {