aacenc: Move Q^3/4 calculation to it's own table
authorNathan Caldwell <saintdev@gmail.com>
Fri, 6 Jan 2012 21:24:37 +0000 (14:24 -0700)
committerAlex Converse <alex.converse@gmail.com>
Mon, 23 Jan 2012 19:40:46 +0000 (11:40 -0800)
This should be moved to tablegen at some point.

Signed-off-by: Alex Converse <alex.converse@gmail.com>
libavcodec/aaccoder.c
libavcodec/aacenc.c
libavcodec/aacenc.h

index ec78acc..72be2a2 100644 (file)
@@ -110,14 +110,15 @@ static av_always_inline float quantize_and_encode_band_cost_template(
                                 int *bits, int BT_ZERO, int BT_UNSIGNED,
                                 int BT_PAIR, int BT_ESC)
 {
-    const float IQ = ff_aac_pow2sf_tab[POW_SF2_ZERO + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
-    const float  Q = ff_aac_pow2sf_tab[POW_SF2_ZERO - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
+    const int q_idx = POW_SF2_ZERO - scale_idx + SCALE_ONE_POS - SCALE_DIV_512;
+    const float Q   = ff_aac_pow2sf_tab [q_idx];
+    const float Q34 = ff_aac_pow34sf_tab[q_idx];
+    const float IQ  = ff_aac_pow2sf_tab [POW_SF2_ZERO + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
     const float CLIPPED_ESCAPE = 165140.0f*IQ;
     int i, j;
     float cost = 0;
     const int dim = BT_PAIR ? 2 : 4;
     int resbits = 0;
-    const float  Q34 = sqrtf(Q * sqrtf(Q));
     const int range  = aac_cb_range[cb];
     const int maxval = aac_cb_maxval[cb];
     int off;
index 3bd04bf..8356ca8 100644 (file)
@@ -52,6 +52,8 @@
         return AVERROR(EINVAL); \
     }
 
+float ff_aac_pow34sf_tab[428];
+
 static const uint8_t swb_size_1024_96[] = {
     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8,
     12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
@@ -691,6 +693,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
 
     ff_aac_tableinit();
 
+    for (i = 0; i < 428; i++)
+        ff_aac_pow34sf_tab[i] = sqrt(ff_aac_pow2sf_tab[i] * sqrt(ff_aac_pow2sf_tab[i]));
+
     return 0;
 fail:
     aac_encode_end(avctx);
index 1f5e650..79d542f 100644 (file)
@@ -74,4 +74,6 @@ typedef struct AACEncContext {
     DECLARE_ALIGNED(32, float, scoefs)[1024];    ///< scaled coefficients
 } AACEncContext;
 
+extern float ff_aac_pow34sf_tab[428];
+
 #endif /* AVCODEC_AACENC_H */