From df3e3ab6ff03cdcbcb2d4658e619f8d96538f28a Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Mon, 15 Dec 2014 14:43:07 -0800 Subject: [PATCH] Fix intra mode update process in vp9_pick_inter_mode When multiple intra modes are tested, the previous mode info update process may overwrite the selected best intra mode and make the final selection use an inter mode. This commit fixes this issue by moving the mode_info reset outside the intra mode search loop. Change-Id: I15ed4288a6b3cb0832104a5e6d5d9a25cd1a5b2b --- vp9/encoder/vp9_pickmode.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index db5650c10..e0892fe35 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -872,7 +872,6 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, const PREDICTION_MODE this_mode = intra_mode_list[i]; if (!((1 << this_mode) & cpi->sf.intra_y_mode_mask[intra_tx_size])) continue; - skip_txfm = x->skip_txfm[0]; args.mode = this_mode; args.rate = 0; args.dist = 0; @@ -893,11 +892,14 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, mbmi->ref_frame[0] = INTRA_FRAME; mbmi->uv_mode = this_mode; mbmi->mv[0].as_int = INVALID_MV; - } else { - x->skip_txfm[0] = best_mode_skip_txfm; - mbmi->tx_size = best_tx_size; } } + + // Reset mb_mode_info to the best inter mode. + if (mbmi->ref_frame[0] != INTRA_FRAME) { + x->skip_txfm[0] = best_mode_skip_txfm; + mbmi->tx_size = best_tx_size; + } } pd->dst = orig_dst; -- 2.40.0