diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 11d4749ba067f5262f9f99083fd8024f993e38a7..10162096abf18461eff2ba9e1061be202905e96e 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -2229,7 +2229,7 @@ static void reset_skip_txfm_size(VP9_COMMON *cm, TX_SIZE txfm_max) { } } -static MV_REFERENCE_FRAME get_frame_type(VP9_COMP *cpi) { +static MV_REFERENCE_FRAME get_frame_type(const VP9_COMP *cpi) { if (frame_is_intra_only(&cpi->common)) return INTRA_FRAME; else if (cpi->rc.is_src_frame_alt_ref && cpi->refresh_golden_frame) @@ -2240,30 +2240,31 @@ static MV_REFERENCE_FRAME get_frame_type(VP9_COMP *cpi) { return GOLDEN_FRAME; } -static void select_tx_mode(VP9_COMP *cpi) { +static TX_MODE select_tx_mode(const VP9_COMP *cpi) { if (cpi->oxcf.lossless) { - cpi->common.tx_mode = ONLY_4X4; + return ONLY_4X4; } else if (cpi->common.current_video_frame == 0) { - cpi->common.tx_mode = TX_MODE_SELECT; + return TX_MODE_SELECT; } else { if (cpi->sf.tx_size_search_method == USE_LARGESTALL) { - cpi->common.tx_mode = ALLOW_32X32; + return ALLOW_32X32; } else if (cpi->sf.tx_size_search_method == USE_FULL_RD) { - int frame_type = get_frame_type(cpi); - cpi->common.tx_mode = - cpi->rd_tx_select_threshes[frame_type][ALLOW_32X32] - > cpi->rd_tx_select_threshes[frame_type][TX_MODE_SELECT] ? - ALLOW_32X32 : TX_MODE_SELECT; + const int frame_type = get_frame_type(cpi); + return cpi->rd_tx_select_threshes[frame_type][ALLOW_32X32] > + cpi->rd_tx_select_threshes[frame_type][TX_MODE_SELECT] ? + ALLOW_32X32 : TX_MODE_SELECT; } else { unsigned int total = 0; int i; for (i = 0; i < TX_SIZES; ++i) total += cpi->tx_stepdown_count[i]; + if (total) { - double fraction = (double)cpi->tx_stepdown_count[0] / total; - cpi->common.tx_mode = fraction > 0.90 ? ALLOW_32X32 : TX_MODE_SELECT; - // printf("fraction = %f\n", fraction); - } // else keep unchanged + const double fraction = (double)cpi->tx_stepdown_count[0] / total; + return fraction > 0.90 ? ALLOW_32X32 : TX_MODE_SELECT; + } else { + return cpi->common.tx_mode; + } } } } @@ -2402,7 +2403,7 @@ static void encode_frame_internal(VP9_COMP *cpi) { vp9_zero(cm->counts.eob_branch); // Set frame level transform size use case - select_tx_mode(cpi); + cm->tx_mode = select_tx_mode(cpi); cpi->mb.e_mbd.lossless = cm->base_qindex == 0 && cm->y_dc_delta_q == 0 && cm->uv_dc_delta_q == 0 && cm->uv_ac_delta_q == 0; @@ -2570,7 +2571,6 @@ void vp9_encode_frame(VP9_COMP *cpi) { } cpi->mb.e_mbd.lossless = cpi->oxcf.lossless; - cm->reference_mode = reference_mode; encode_frame_internal(cpi);