| Index: source/libvpx/vp9/encoder/vp9_pickmode.c
|
| diff --git a/source/libvpx/vp9/encoder/vp9_pickmode.c b/source/libvpx/vp9/encoder/vp9_pickmode.c
|
| index 7c1a930626e7b5acb1539b1cb5fde0436b14e67f..6dfb9eedde14e15b3bff64b5a32625fdfcb67156 100644
|
| --- a/source/libvpx/vp9/encoder/vp9_pickmode.c
|
| +++ b/source/libvpx/vp9/encoder/vp9_pickmode.c
|
| @@ -681,6 +681,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
| int reuse_inter_pred = cpi->sf.reuse_inter_pred_sby && ctx->pred_pixel_ready;
|
| int ref_frame_skip_mask = 0;
|
| int idx;
|
| + int best_pred_sad = INT_MAX;
|
|
|
| if (reuse_inter_pred) {
|
| int i;
|
| @@ -723,12 +724,14 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
| #if CONFIG_VP9_TEMPORAL_DENOISING
|
| vp9_denoiser_reset_frame_stats(ctx);
|
| #endif
|
| +
|
| if (cpi->rc.frames_since_golden == 0) {
|
| - ref_frame_skip_mask |= (1 << GOLDEN_FRAME);
|
| + cpi->ref_frame_flags &= (~VP9_GOLD_FLAG);
|
| usable_ref_frame = LAST_FRAME;
|
| } else {
|
| usable_ref_frame = GOLDEN_FRAME;
|
| }
|
| +
|
| for (ref_frame = LAST_FRAME; ref_frame <= usable_ref_frame; ++ref_frame) {
|
| const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
|
|
|
| @@ -809,8 +812,11 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
| continue;
|
|
|
| tmp_sad = vp9_int_pro_motion_estimation(cpi, x, bsize);
|
| +
|
| if (tmp_sad > x->pred_mv_sad[LAST_FRAME])
|
| continue;
|
| + if (tmp_sad + (num_pels_log2_lookup[bsize] << 4) > best_pred_sad)
|
| + continue;
|
|
|
| frame_mv[NEWMV][ref_frame].as_int = mbmi->mv[0].as_int;
|
| rate_mv = vp9_mv_bit_cost(&frame_mv[NEWMV][ref_frame].as_mv,
|
| @@ -835,6 +841,17 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
| }
|
| }
|
|
|
| + if (this_mode == NEWMV && ref_frame == LAST_FRAME &&
|
| + frame_mv[NEWMV][LAST_FRAME].as_int != INVALID_MV) {
|
| + const int pre_stride = xd->plane[0].pre[0].stride;
|
| + const uint8_t * const pre_buf = xd->plane[0].pre[0].buf +
|
| + (frame_mv[NEWMV][LAST_FRAME].as_mv.row >> 3) * pre_stride +
|
| + (frame_mv[NEWMV][LAST_FRAME].as_mv.col >> 3);
|
| + best_pred_sad = cpi->fn_ptr[bsize].sdf(x->plane[0].src.buf,
|
| + x->plane[0].src.stride,
|
| + pre_buf, pre_stride);
|
| + }
|
| +
|
| if (this_mode != NEARESTMV &&
|
| frame_mv[this_mode][ref_frame].as_int ==
|
| frame_mv[NEARESTMV][ref_frame].as_int)
|
|
|