From: Daniel Kang Date: Tue, 7 Aug 2012 21:33:15 +0000 (-0700) Subject: Reorganiziation of the RD loop to make more sense. X-Git-Tag: v1.3.0~1217^2~335 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=342040a6a607924997c217c7917a31cc789b8cb6;p=platform%2Fupstream%2Flibvpx.git Reorganiziation of the RD loop to make more sense. Change-Id: Ia1e3b0ff9b70747b3725391de59f230edab767d7 --- diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 31d67a0..401367e 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -2931,6 +2931,59 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int if (!x->e_mbd.mode_info_context->mbmi.second_ref_frame) { switch (this_mode) { + case DC_PRED: + case V_PRED: + case H_PRED: + case TM_PRED: + case D45_PRED: + case D135_PRED: + case D117_PRED: + case D153_PRED: + case D27_PRED: + case D63_PRED: +#if CONFIG_TX16X16 + // FIXME: breaks lossless since 4x4 isn't allowed + x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; + // FIXME compound intra prediction + RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) + (&x->e_mbd); + macro_block_yrd_16x16(x, &rate_y, &distortion, + IF_RTCD(&cpi->rtcd)); + rate2 += rate_y; + distortion2 += distortion; + rate2 += x->mbmode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.mode]; + rate2 += uv_intra_rate_8x8; + rate_uv = uv_intra_rate_tokenonly_8x8; + distortion2 += uv_intra_distortion_8x8; + distortion_uv = uv_intra_distortion_8x8; + break; +#else + x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; + // FIXME compound intra prediction + RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) + (&x->e_mbd); + if (cpi->common.txfm_mode == ALLOW_8X8) + macro_block_yrd_8x8(x, &rate_y, &distortion, + IF_RTCD(&cpi->rtcd)); + else + macro_block_yrd(x, &rate_y, &distortion, + IF_RTCD(&cpi->rtcd)); + rate2 += rate_y; + distortion2 += distortion; + rate2 += x->mbmode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.mode]; + if (cpi->common.txfm_mode == ALLOW_8X8) { + rate2 += uv_intra_rate_8x8; + rate_uv = uv_intra_rate_tokenonly_8x8; + distortion2 += uv_intra_distortion_8x8; + distortion_uv = uv_intra_distortion_8x8; + } else { + rate2 += uv_intra_rate; + rate_uv = uv_intra_rate_tokenonly; + distortion2 += uv_intra_distortion; + distortion_uv = uv_intra_distortion; + } + break; +#endif case B_PRED: { int64_t tmp_rd; @@ -3029,59 +3082,6 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int vp8_cost_bit(get_pred_prob(cm, xd, PRED_COMP), 0); } break; - case DC_PRED: - case V_PRED: - case H_PRED: - case TM_PRED: - case D45_PRED: - case D135_PRED: - case D117_PRED: - case D153_PRED: - case D27_PRED: - case D63_PRED: -#if CONFIG_TX16X16 - // FIXME: breaks lossless since 4x4 isn't allowed - x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; - // FIXME compound intra prediction - RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) - (&x->e_mbd); - macro_block_yrd_16x16(x, &rate_y, &distortion, - IF_RTCD(&cpi->rtcd)); - rate2 += rate_y; - distortion2 += distortion; - rate2 += x->mbmode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.mode]; - rate2 += uv_intra_rate_8x8; - rate_uv = uv_intra_rate_tokenonly_8x8; - distortion2 += uv_intra_distortion_8x8; - distortion_uv = uv_intra_distortion_8x8; - break; -#else - x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; - // FIXME compound intra prediction - RECON_INVOKE(&cpi->common.rtcd.recon, build_intra_predictors_mby) - (&x->e_mbd); - if (cpi->common.txfm_mode == ALLOW_8X8) - macro_block_yrd_8x8(x, &rate_y, &distortion, - IF_RTCD(&cpi->rtcd)); - else - macro_block_yrd(x, &rate_y, &distortion, - IF_RTCD(&cpi->rtcd)); - rate2 += rate_y; - distortion2 += distortion; - rate2 += x->mbmode_cost[x->e_mbd.frame_type][x->e_mbd.mode_info_context->mbmi.mode]; - if (cpi->common.txfm_mode == ALLOW_8X8) { - rate2 += uv_intra_rate_8x8; - rate_uv = uv_intra_rate_tokenonly_8x8; - distortion2 += uv_intra_distortion_8x8; - distortion_uv = uv_intra_distortion_8x8; - } else { - rate2 += uv_intra_rate; - rate_uv = uv_intra_rate_tokenonly; - distortion2 += uv_intra_distortion; - distortion_uv = uv_intra_distortion; - } - break; -#endif case NEWMV: { int thissme, bestsme = INT_MAX;