OSDN Git Service

aacdec: Use a LUT to generate CCE scale.
authorAlex Converse <alex.converse@gmail.com>
Mon, 12 Jul 2010 21:35:43 +0000 (21:35 +0000)
committerAlex Converse <alex.converse@gmail.com>
Mon, 12 Jul 2010 21:35:43 +0000 (21:35 +0000)
Originally committed as revision 24224 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/aacdec.c

index 19e7783..9214c18 100644 (file)
@@ -1454,6 +1454,13 @@ static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
     return 0;
 }
 
+static const float cce_scale[] = {
+    1.09050773266525765921, //2^(1/8)
+    1.18920711500272106672, //2^(1/4)
+    M_SQRT2,
+    2,
+};
+
 /**
  * Decode coupling_channel_element; reference: table 4.8.
  *
@@ -1484,7 +1491,7 @@ static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
     coup->coupling_point += get_bits1(gb) || (coup->coupling_point >> 1);
 
     sign  = get_bits(gb, 1);
-    scale = pow(2., pow(2., (int)get_bits(gb, 2) - 3));
+    scale = cce_scale[get_bits(gb, 2)];
 
     if ((ret = decode_ics(ac, sce, gb, 0, 0)))
         return ret;