Do the same sign flip optimization to the low freq decoder.

as with the high freq 10-20 cycles faster

Originally committed as revision 23099 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2010-05-11 21:31:54 +00:00
parent 4b070a7a61
commit 3b7117b73a
1 changed files with 13 additions and 14 deletions

View File

@ -1454,7 +1454,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
/* read huffcode and compute each couple */
for(;j>0;j--) {
int exponent, x, y;
INTFLOAT v;
int v;
int pos= get_bits_count(&s->gb);
if (pos >= end_pos){
@ -1481,37 +1481,36 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
x = y >> 5;
y = y & 0x0f;
if (x < 15){
v = RENAME(expval_table)[ exponent ][ x ];
// v = RENAME(expval_table)[ (exponent&3) ][ x ] >> FFMIN(0 - (exponent>>2), 31);
READ_FLIP_SIGN(g->sb_hybrid+s_index, RENAME(expval_table)[ exponent ]+x)
}else{
x += get_bitsz(&s->gb, linbits);
v = l3_unscale(x, exponent);
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index] = v;
}
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index] = v;
if (y < 15){
v = RENAME(expval_table)[ exponent ][ y ];
READ_FLIP_SIGN(g->sb_hybrid+s_index+1, RENAME(expval_table)[ exponent ]+y)
}else{
y += get_bitsz(&s->gb, linbits);
v = l3_unscale(y, exponent);
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index+1] = v;
}
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index+1] = v;
}else{
x = y >> 5;
y = y & 0x0f;
x += y;
if (x < 15){
v = RENAME(expval_table)[ exponent ][ x ];
READ_FLIP_SIGN(g->sb_hybrid+s_index+!!y, RENAME(expval_table)[ exponent ]+x)
}else{
x += get_bitsz(&s->gb, linbits);
v = l3_unscale(x, exponent);
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index+!!y] = v;
}
if (get_bits1(&s->gb))
v = -v;
g->sb_hybrid[s_index+!!y] = v;
g->sb_hybrid[s_index+ !y] = 0;
}
s_index+=2;