mirror of https://git.ffmpeg.org/ffmpeg.git
Optimize decoding high freqs.
this is 10-20cpu cycles faster on duron (whole is about 50-60 cpu cylses) I wonder why gcc isnt doing this on its own ... Originally committed as revision 23097 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
fd9451c68f
commit
0c0d88aed5
|
@ -1535,14 +1535,22 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
|
||||||
g->sb_hybrid[s_index+3]= 0;
|
g->sb_hybrid[s_index+3]= 0;
|
||||||
while(code){
|
while(code){
|
||||||
static const int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
|
static const int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
|
||||||
INTFLOAT v;
|
int v;
|
||||||
int pos= s_index+idxtab[code];
|
int pos= s_index+idxtab[code];
|
||||||
code ^= 8>>idxtab[code];
|
code ^= 8>>idxtab[code];
|
||||||
v = RENAME(exp_table)[ exponents[pos] ];
|
/* Following is a optimized code for
|
||||||
// v = RENAME(exp_table)[ (exponents[pos]&3) ] >> FFMIN(0 - (exponents[pos]>>2), 31);
|
INTFLOAT v = RENAME(exp_table)[ exponents[pos] ];
|
||||||
if(get_bits1(&s->gb)) //FIXME try to flip the sign bit in int32_t, same above
|
if(get_bits1(&s->gb))
|
||||||
v = -v;
|
v = -v;
|
||||||
g->sb_hybrid[pos] = v;
|
g->sb_hybrid[pos] = v;
|
||||||
|
*/
|
||||||
|
#if CONFIG_FLOAT
|
||||||
|
v = AV_RN32A(RENAME(exp_table)+exponents[pos]) ^ (get_bits1(&s->gb)<<31);
|
||||||
|
AV_WN32A(g->sb_hybrid+pos, v);
|
||||||
|
#else
|
||||||
|
v= -get_bits1(&s->gb);
|
||||||
|
g->sb_hybrid[pos] = (RENAME(exp_table)[ exponents[pos] ] ^ v) - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
s_index+=4;
|
s_index+=4;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue