From 4e7e79f770536bb350e5c66e26590d861bca4a38 Mon Sep 17 00:00:00 2001 From: Scott LaVarnway Date: Tue, 1 Feb 2011 10:05:35 -0500 Subject: [PATCH] Removed intra_modes from vp8cx_encode_intra_macro_block Restructured function in order to eliminate the prediction modes save/restore. Code cleanup also. Change-Id: I816e3b910de64d0f0f0ddc2398805c63263191e8 --- vp8/encoder/encodeframe.c | 66 +++++++++++---------------------------- 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c index ee9578b61..4c23a5f09 100644 --- a/vp8/encoder/encodeframe.c +++ b/vp8/encoder/encodeframe.c @@ -1147,64 +1147,37 @@ static void sum_intra_stats(VP8_COMP *cpi, MACROBLOCK *x) int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) { int Error4x4, Error16x16, error_uv; - B_PREDICTION_MODE intra_bmodes[16]; int rate4x4, rate16x16, rateuv; int dist4x4, dist16x16, distuv; int rate = 0; int rate4x4_tokenonly = 0; int rate16x16_tokenonly = 0; int rateuv_tokenonly = 0; - int i; x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME; #if !(CONFIG_REALTIME_ONLY) - if (cpi->sf.RD && cpi->compressor_speed != 2) { - Error4x4 = vp8_rd_pick_intra4x4mby_modes(cpi, x, &rate4x4, &rate4x4_tokenonly, &dist4x4); - - //save the b modes for possible later use - for (i = 0; i < 16; i++) - intra_bmodes[i] = x->e_mbd.block[i].bmi.mode; - - Error16x16 = vp8_rd_pick_intra16x16mby_mode(cpi, x, &rate16x16, &rate16x16_tokenonly, &dist16x16); - error_uv = vp8_rd_pick_intra_mbuv_mode(cpi, x, &rateuv, &rateuv_tokenonly, &distuv); - - vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x); rate += rateuv; - if (Error4x4 < Error16x16) - { - rate += rate4x4; - x->e_mbd.mode_info_context->mbmi.mode = B_PRED; - - // get back the intra block modes - for (i = 0; i < 16; i++) - x->e_mbd.block[i].bmi.mode = intra_bmodes[i]; - - vp8_encode_intra4x4mby(IF_RTCD(&cpi->rtcd), x); - } - else - { - vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x); - rate += rate16x16; - } + Error16x16 = vp8_rd_pick_intra16x16mby_mode(cpi, x, &rate16x16, &rate16x16_tokenonly, &dist16x16); - sum_intra_stats(cpi, x); + Error4x4 = vp8_rd_pick_intra4x4mby_modes(cpi, x, &rate4x4, &rate4x4_tokenonly, &dist4x4); - vp8_tokenize_mb(cpi, &x->e_mbd, t); + rate += (Error4x4 < Error16x16) ? rate4x4 : rate16x16; } else #endif { - int rate2, best_distortion; MB_PREDICTION_MODE mode, best_mode = DC_PRED; int this_rd; Error16x16 = INT_MAX; + vp8_pick_intra_mbuv_mode(x); + for (mode = DC_PRED; mode <= TM_PRED; mode ++) { int distortion2; @@ -1222,6 +1195,7 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) best_distortion = distortion2; } } + x->e_mbd.mode_info_context->mbmi.mode = best_mode; vp8_pick_intra4x4mby_modes(IF_RTCD(&cpi->rtcd), x, &rate2, &best_distortion); @@ -1229,23 +1203,21 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t) Error4x4 = INT_MAX; else Error4x4 = RD_ESTIMATE(x->rdmult, x->rddiv, rate2, best_distortion); + } - if (Error4x4 < Error16x16) - { - x->e_mbd.mode_info_context->mbmi.mode = B_PRED; - vp8_encode_intra4x4mby(IF_RTCD(&cpi->rtcd), x); - } - else - { - x->e_mbd.mode_info_context->mbmi.mode = best_mode; - vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x); - } - - vp8_pick_intra_mbuv_mode(x); - vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x); - sum_intra_stats(cpi, x); - vp8_tokenize_mb(cpi, &x->e_mbd, t); + if (Error4x4 < Error16x16) + { + x->e_mbd.mode_info_context->mbmi.mode = B_PRED; + vp8_encode_intra4x4mby(IF_RTCD(&cpi->rtcd), x); } + else + { + vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x); + } + + vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x); + sum_intra_stats(cpi, x); + vp8_tokenize_mb(cpi, &x->e_mbd, t); return rate; } -- 2.40.0