| Index: source/libvpx/vp9/encoder/vp9_rdopt.c
|
| diff --git a/source/libvpx/vp9/encoder/vp9_rdopt.c b/source/libvpx/vp9/encoder/vp9_rdopt.c
|
| index 09512df18949fdea6ef21106feccbd17f06bc442..f0c00610967662291fca917a50ceeb548ed07927 100644
|
| --- a/source/libvpx/vp9/encoder/vp9_rdopt.c
|
| +++ b/source/libvpx/vp9/encoder/vp9_rdopt.c
|
| @@ -1540,6 +1540,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| int mi_row, int mi_col,
|
| int_mv single_newmv[MAX_REF_FRAMES],
|
| int *rate_mv) {
|
| + const VP9_COMMON *const cm = &cpi->common;
|
| const int pw = 4 * num_4x4_blocks_wide_lookup[bsize];
|
| const int ph = 4 * num_4x4_blocks_high_lookup[bsize];
|
| MACROBLOCKD *xd = &x->e_mbd;
|
| @@ -1556,6 +1557,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| uint8_t *second_pred = vpx_memalign(16, pw * ph * sizeof(uint8_t));
|
| #endif // CONFIG_VP9_HIGHBITDEPTH
|
| const InterpKernel *kernel = vp9_get_interp_kernel(mbmi->interp_filter);
|
| + struct scale_factors sf;
|
|
|
| // Do joint motion search in compound mode to get more accurate mv.
|
| struct buf_2d backup_yv12[2][MAX_MB_PLANE];
|
| @@ -1591,6 +1593,17 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| frame_mv[refs[ref]].as_int = single_newmv[refs[ref]].as_int;
|
| }
|
|
|
| + // Since we have scaled the reference frames to match the size of the current
|
| + // frame we must use a unit scaling factor during mode selection.
|
| +#if CONFIG_VP9_HIGHBITDEPTH
|
| + vp9_setup_scale_factors_for_frame(&sf, cm->width, cm->height,
|
| + cm->width, cm->height,
|
| + cm->use_highbitdepth);
|
| +#else
|
| + vp9_setup_scale_factors_for_frame(&sf, cm->width, cm->height,
|
| + cm->width, cm->height);
|
| +#endif // CONFIG_VP9_HIGHBITDEPTH
|
| +
|
| // Allow joint search multiple times iteratively for each reference frame
|
| // and break out of the search loop if it couldn't find a better mv.
|
| for (ite = 0; ite < 4; ite++) {
|
| @@ -1619,8 +1632,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| ref_yv12[!id].stride,
|
| second_pred, pw,
|
| &frame_mv[refs[!id]].as_mv,
|
| - &xd->block_refs[!id]->sf,
|
| - pw, ph, 0,
|
| + &sf, pw, ph, 0,
|
| kernel, MV_PRECISION_Q3,
|
| mi_col * MI_SIZE, mi_row * MI_SIZE,
|
| xd->bd);
|
| @@ -1629,8 +1641,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| ref_yv12[!id].stride,
|
| second_pred, pw,
|
| &frame_mv[refs[!id]].as_mv,
|
| - &xd->block_refs[!id]->sf,
|
| - pw, ph, 0,
|
| + &sf, pw, ph, 0,
|
| kernel, MV_PRECISION_Q3,
|
| mi_col * MI_SIZE, mi_row * MI_SIZE);
|
| }
|
| @@ -1639,8 +1650,7 @@ static void joint_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
| ref_yv12[!id].stride,
|
| second_pred, pw,
|
| &frame_mv[refs[!id]].as_mv,
|
| - &xd->block_refs[!id]->sf,
|
| - pw, ph, 0,
|
| + &sf, pw, ph, 0,
|
| kernel, MV_PRECISION_Q3,
|
| mi_col * MI_SIZE, mi_row * MI_SIZE);
|
| #endif // CONFIG_VP9_HIGHBITDEPTH
|
|
|