ref: 4e7e79f770536bb350e5c66e26590d861bca4a38
parent: 9e7fec216e37e6efe364428d9cba2f7b70f8ef3a
author: Scott LaVarnway <slavarnway@google.com>
date: Tue Feb 1 05:05:35 EST 2011
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
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -1147,7 +1147,6 @@
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;
@@ -1154,57 +1153,31 @@
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;
+ Error16x16 = vp8_rd_pick_intra16x16mby_mode(cpi, x, &rate16x16, &rate16x16_tokenonly, &dist16x16);
- // get back the intra block modes
- for (i = 0; i < 16; i++)
- x->e_mbd.block[i].bmi.mode = intra_bmodes[i];
+ Error4x4 = vp8_rd_pick_intra4x4mby_modes(cpi, x, &rate4x4, &rate4x4_tokenonly, &dist4x4);
- vp8_encode_intra4x4mby(IF_RTCD(&cpi->rtcd), x);
- }
- else
- {
- vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x);
- rate += rate16x16;
- }
-
- sum_intra_stats(cpi, x);
-
- 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 @@
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 @@
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;
}