From 68d79146ea791783ac7d89dcdbef8c11a93d2b12 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Tue, 9 Sep 2014 15:32:40 -0700 Subject: [PATCH] Fix a bug in vp9_rd_pick_inter_mode_sb This commit fixes a bug related to skipping intra mode checking, by using a separate variable to store the best prediction error from inter mode. It avoids unintentionally overwriting intra mode rate-distortion cost, and hence affecting other speed features. Change-Id: I99e12993339c84c8b4f597996b372012e5858fae --- vp9/encoder/vp9_rdopt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index 8b17324..9096677 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -2575,6 +2575,7 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x, vp9_prob comp_mode_p; int64_t best_intra_rd = INT64_MAX; int64_t best_inter_rd = INT64_MAX; + unsigned int best_pred_sse = UINT_MAX; PREDICTION_MODE best_intra_mode = DC_PRED; MV_REFERENCE_FRAME best_inter_ref_frame = LAST_FRAME; int rate_uv_intra[TX_SIZES], rate_uv_tokenonly[TX_SIZES]; @@ -2804,7 +2805,7 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x, if (ref_frame == INTRA_FRAME) { if (cpi->sf.adaptive_mode_search) - if ((x->source_variance << num_pels_log2_lookup[bsize]) > best_intra_rd) + if ((x->source_variance << num_pels_log2_lookup[bsize]) > best_pred_sse) continue; if (!(intra_y_mode_mask & (1 << this_mode))) @@ -2983,7 +2984,7 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x, mbmi->mv[0].as_int = 0; max_plane = 1; } else { - best_intra_rd = x->pred_sse[ref_frame]; + best_pred_sse = x->pred_sse[ref_frame]; } *returnrate = rate2; -- 2.7.4