[FFmpeg-cvslog] r20233 - trunk/libavcodec/mpegaudiodec.c

reimar subversion
Thu Oct 15 08:59:24 CEST 2009


Author: reimar
Date: Thu Oct 15 08:59:23 2009
New Revision: 20233

Log:
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.

Modified:
   trunk/libavcodec/mpegaudiodec.c

Modified: trunk/libavcodec/mpegaudiodec.c
==============================================================================
--- trunk/libavcodec/mpegaudiodec.c	Wed Oct 14 23:41:24 2009	(r20232)
+++ trunk/libavcodec/mpegaudiodec.c	Thu Oct 15 08:59:23 2009	(r20233)
@@ -408,9 +408,10 @@ static av_cold int decode_init(AVCodecCo
 
         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(AVCodecCo
             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);



More information about the ffmpeg-cvslog mailing list