summaryrefslogtreecommitdiff
path: root/vp8/encoder/pickinter.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp8/encoder/pickinter.c')
-rw-r--r--vp8/encoder/pickinter.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c
index 405c72dbd..3612cc3a8 100644
--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -469,8 +469,10 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
MACROBLOCKD *xd = &x->e_mbd;
MB_MODE_INFO best_mbmode;
+ int_mv best_ref_mv_sb[2];
+ int_mv mode_mv_sb[2][MB_MODE_COUNT];
int_mv best_ref_mv;
- int_mv mode_mv[MB_MODE_COUNT];
+ int_mv *mode_mv;
MB_PREDICTION_MODE this_mode;
int num00;
int mdcounts[4];
@@ -508,7 +510,9 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
&parent_mode, &parent_ref_mv, mb_row, mb_col);
#endif
- vpx_memset(mode_mv, 0, sizeof(mode_mv));
+ mode_mv = mode_mv_sb[sign_bias];
+ best_ref_mv.as_int = 0;
+ vpx_memset(mode_mv_sb, 0, sizeof(mode_mv_sb));
vpx_memset(&best_mbmode, 0, sizeof(best_mbmode));
/* Setup search priorities */
@@ -519,15 +523,16 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
*/
if (ref_frame_map[1] > 0)
{
- vp8_find_near_mvs(&x->e_mbd,
- x->e_mbd.mode_info_context,
- &mode_mv[NEARESTMV], &mode_mv[NEARMV],
- &best_ref_mv,
- mdcounts,
- ref_frame_map[1],
- cpi->common.ref_frame_sign_bias);
-
- sign_bias = cpi->common.ref_frame_sign_bias[ref_frame_map[1]];
+ sign_bias = vp8_find_near_mvs_bias(&x->e_mbd,
+ x->e_mbd.mode_info_context,
+ mode_mv_sb,
+ best_ref_mv_sb,
+ mdcounts,
+ ref_frame_map[1],
+ cpi->common.ref_frame_sign_bias);
+
+ mode_mv = mode_mv_sb[sign_bias];
+ best_ref_mv.as_int = best_ref_mv_sb[sign_bias].as_int;
}
get_predictor_pointers(cpi, plane, recon_yoffset, recon_uvoffset);
@@ -578,17 +583,11 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
x->e_mbd.pre.u_buffer = plane[this_ref_frame][1];
x->e_mbd.pre.v_buffer = plane[this_ref_frame][2];
- if (sign_bias !=
- cpi->common.ref_frame_sign_bias[x->e_mbd.mode_info_context->mbmi.ref_frame])
+ if (sign_bias != cpi->common.ref_frame_sign_bias[this_ref_frame])
{
- mode_mv[NEARESTMV].as_mv.row *= -1;
- mode_mv[NEARESTMV].as_mv.col *= -1;
- mode_mv[NEARMV].as_mv.row *= -1;
- mode_mv[NEARMV].as_mv.col *= -1;
- best_ref_mv.as_mv.row *= -1;
- best_ref_mv.as_mv.col *= -1;
- sign_bias
- = cpi->common.ref_frame_sign_bias[x->e_mbd.mode_info_context->mbmi.ref_frame];
+ sign_bias = cpi->common.ref_frame_sign_bias[this_ref_frame];
+ mode_mv = mode_mv_sb[sign_bias];
+ best_ref_mv.as_int = best_ref_mv_sb[sign_bias].as_int;
}
#if CONFIG_MULTI_RES_ENCODING
@@ -1049,10 +1048,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
if (sign_bias
!= cpi->common.ref_frame_sign_bias[xd->mode_info_context->mbmi.ref_frame])
- {
- best_ref_mv.as_mv.row *= -1;
- best_ref_mv.as_mv.col *= -1;
- }
+ best_ref_mv.as_int = best_ref_mv_sb[!sign_bias].as_int;
update_mvcount(cpi, &x->e_mbd, &best_ref_mv);
}