summaryrefslogtreecommitdiff
path: root/vp8
diff options
context:
space:
mode:
authorScott LaVarnway <slavarnway@google.com>2011-02-01 10:05:35 -0500
committerScott LaVarnway <slavarnway@google.com>2011-02-01 10:05:35 -0500
commit4e7e79f770536bb350e5c66e26590d861bca4a38 (patch)
tree25e6d44166ffb87156922a15cb1a66093420c288 /vp8
parent9e7fec216e37e6efe364428d9cba2f7b70f8ef3a (diff)
downloadlibvpx-4e7e79f770536bb350e5c66e26590d861bca4a38.tar
libvpx-4e7e79f770536bb350e5c66e26590d861bca4a38.tar.gz
libvpx-4e7e79f770536bb350e5c66e26590d861bca4a38.tar.bz2
libvpx-4e7e79f770536bb350e5c66e26590d861bca4a38.zip
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
Diffstat (limited to 'vp8')
-rw-r--r--vp8/encoder/encodeframe.c66
1 files 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;
}