summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2009-10-15 06:59:23 +0000
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2009-10-15 06:59:23 +0000
commit686884da9d686d7498e246fe0e7146767b21aa42 (patch)
tree7bd658855db7d397733e746a30545234c342d3ad /libavcodec
parent16aec74761c2a0e6d782135083e570b8358593e1 (diff)
Use cbrtf and exp2f instead of pow to calculate tables for MPEG audio decoding.
This hopefully is fast enough so that it is reasonable to use the same formula directly instead of the table for CONFIG_SMALL. Originally committed as revision 20233 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mpegaudiodec.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
index dd986bd859..e531fd37d8 100644
--- a/libavcodec/mpegaudiodec.c
+++ b/libavcodec/mpegaudiodec.c
@@ -408,9 +408,10 @@ static av_cold int decode_init(AVCodecContext * avctx)
int_pow_init();
for(i=1;i<TABLE_4_3_SIZE;i++) {
+ double value = i/4;
double f, fm;
int e, m;
- f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25);
+ f = value * cbrtf(value) * exp2f((i&3)*0.25);
fm = frexp(f, &e);
m = (uint32_t)(fm*(1LL<<31) + 0.5);
e+= FRAC_BITS - 31 + 5 - 100;
@@ -420,8 +421,9 @@ static av_cold int decode_init(AVCodecContext * avctx)
table_4_3_exp[i] = -e;
}
for(i=0; i<512*16; i++){
+ double value = i & 15;
int exponent= (i>>4);
- double f= pow(i&15, 4.0 / 3.0) * pow(2, (exponent-400)*0.25 + FRAC_BITS + 5);
+ double f= value * cbrtf(value) * exp2f((exponent-400)*0.25 + FRAC_BITS + 5);
expval_table[exponent][i&15]= llrint(f);
if((i&15)==1)
exp_table[exponent]= llrint(f);