changeset 10401:b44eae1b1971 libavcodec

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.
author reimar
date Thu, 15 Oct 2009 06:59:23 +0000
parents 866dffa620d1
children 06bdadf410a9
files mpegaudiodec.c
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mpegaudiodec.c	Wed Oct 14 21:41:24 2009 +0000
+++ b/mpegaudiodec.c	Thu Oct 15 06:59:23 2009 +0000
@@ -408,9 +408,10 @@
 
         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 @@
             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);