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
This commit is contained in:
parent
9e7fec216e
commit
4e7e79f770
@ -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 vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
||||||
{
|
{
|
||||||
int Error4x4, Error16x16, error_uv;
|
int Error4x4, Error16x16, error_uv;
|
||||||
B_PREDICTION_MODE intra_bmodes[16];
|
|
||||||
int rate4x4, rate16x16, rateuv;
|
int rate4x4, rate16x16, rateuv;
|
||||||
int dist4x4, dist16x16, distuv;
|
int dist4x4, dist16x16, distuv;
|
||||||
int rate = 0;
|
int rate = 0;
|
||||||
int rate4x4_tokenonly = 0;
|
int rate4x4_tokenonly = 0;
|
||||||
int rate16x16_tokenonly = 0;
|
int rate16x16_tokenonly = 0;
|
||||||
int rateuv_tokenonly = 0;
|
int rateuv_tokenonly = 0;
|
||||||
int i;
|
|
||||||
|
|
||||||
x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME;
|
x->e_mbd.mode_info_context->mbmi.ref_frame = INTRA_FRAME;
|
||||||
|
|
||||||
#if !(CONFIG_REALTIME_ONLY)
|
#if !(CONFIG_REALTIME_ONLY)
|
||||||
|
|
||||||
if (cpi->sf.RD && cpi->compressor_speed != 2)
|
if (cpi->sf.RD && cpi->compressor_speed != 2)
|
||||||
{
|
{
|
||||||
Error4x4 = vp8_rd_pick_intra4x4mby_modes(cpi, x, &rate4x4, &rate4x4_tokenonly, &dist4x4);
|
error_uv = vp8_rd_pick_intra_mbuv_mode(cpi, x, &rateuv, &rateuv_tokenonly, &distuv);
|
||||||
|
rate += rateuv;
|
||||||
//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);
|
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);
|
Error4x4 = vp8_rd_pick_intra4x4mby_modes(cpi, x, &rate4x4, &rate4x4_tokenonly, &dist4x4);
|
||||||
|
|
||||||
vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x);
|
rate += (Error4x4 < Error16x16) ? rate4x4 : rate16x16;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
sum_intra_stats(cpi, x);
|
|
||||||
|
|
||||||
vp8_tokenize_mb(cpi, &x->e_mbd, t);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
int rate2, best_distortion;
|
int rate2, best_distortion;
|
||||||
MB_PREDICTION_MODE mode, best_mode = DC_PRED;
|
MB_PREDICTION_MODE mode, best_mode = DC_PRED;
|
||||||
int this_rd;
|
int this_rd;
|
||||||
Error16x16 = INT_MAX;
|
Error16x16 = INT_MAX;
|
||||||
|
|
||||||
|
vp8_pick_intra_mbuv_mode(x);
|
||||||
|
|
||||||
for (mode = DC_PRED; mode <= TM_PRED; mode ++)
|
for (mode = DC_PRED; mode <= TM_PRED; mode ++)
|
||||||
{
|
{
|
||||||
int distortion2;
|
int distortion2;
|
||||||
@ -1222,6 +1195,7 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
|||||||
best_distortion = distortion2;
|
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);
|
vp8_pick_intra4x4mby_modes(IF_RTCD(&cpi->rtcd), x, &rate2, &best_distortion);
|
||||||
|
|
||||||
@ -1229,24 +1203,22 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
|
|||||||
Error4x4 = INT_MAX;
|
Error4x4 = INT_MAX;
|
||||||
else
|
else
|
||||||
Error4x4 = RD_ESTIMATE(x->rdmult, x->rddiv, rate2, best_distortion);
|
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;
|
return rate;
|
||||||
}
|
}
|
||||||
#ifdef SPEEDSTATS
|
#ifdef SPEEDSTATS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user