OSDN Git Service

mpegaudioenc: Remove broken integer-only quantization code path
authorDiego Biurrun <diego@biurrun.de>
Sat, 9 Nov 2013 13:17:16 +0000 (14:17 +0100)
committerDiego Biurrun <diego@biurrun.de>
Sun, 10 Nov 2013 15:07:22 +0000 (16:07 +0100)
libavcodec/mpegaudioenc.c
libavcodec/mpegaudiotab.h

index 739eb64..b7727ab 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "mpegaudio.h"
 #include "mpegaudiodsp.h"
+#include "mpegaudiodata.h"
+#include "mpegaudiotab.h"
 
 /* currently, cannot change these constants (need to modify
    quantization stage) */
@@ -61,12 +63,6 @@ typedef struct MpegAudioContext {
     const unsigned char *alloc_table;
 } MpegAudioContext;
 
-/* define it to use floats in quantization (I don't like floats !) */
-#define USE_FLOATS
-
-#include "mpegaudiodata.h"
-#include "mpegaudiotab.h"
-
 static av_cold int MPA_encode_init(AVCodecContext *avctx)
 {
     MpegAudioContext *s = avctx->priv_data;
@@ -152,13 +148,7 @@ static av_cold int MPA_encode_init(AVCodecContext *avctx)
         if (v <= 0)
             v = 1;
         scale_factor_table[i] = v;
-#ifdef USE_FLOATS
         scale_factor_inv_table[i] = pow(2.0, -(3 - i) / 3.0) / (float)(1 << 20);
-#else
-#define P 15
-        scale_factor_shift[i] = 21 - P - (i / 3);
-        scale_factor_mult[i] = (1 << P) * pow(2.0, (i % 3) / 3.0);
-#endif
     }
     for(i=0;i<128;i++) {
         v = i - 64;
@@ -672,30 +662,11 @@ static void encode_frame(MpegAudioContext *s,
                         qindex = s->alloc_table[j+b];
                         steps = ff_mpa_quant_steps[qindex];
                         for(m=0;m<3;m++) {
+                            float a;
                             sample = s->sb_samples[ch][k][l + m][i];
                             /* divide by scale factor */
-#ifdef USE_FLOATS
-                            {
-                                float a;
-                                a = (float)sample * scale_factor_inv_table[s->scale_factors[ch][i][k]];
-                                q[m] = (int)((a + 1.0) * steps * 0.5);
-                            }
-#else
-                            {
-                                int q1, e, shift, mult;
-                                e = s->scale_factors[ch][i][k];
-                                shift = scale_factor_shift[e];
-                                mult = scale_factor_mult[e];
-
-                                /* normalize to P bits */
-                                if (shift < 0)
-                                    q1 = sample << (-shift);
-                                else
-                                    q1 = sample >> shift;
-                                q1 = (q1 * mult) >> P;
-                                q[m] = ((q1 + (1 << P)) * steps) >> (P + 1);
-                            }
-#endif
+                            a = (float)sample * scale_factor_inv_table[s->scale_factors[ch][i][k]];
+                            q[m] = (int)((a + 1.0) * steps * 0.5);
                             if (q[m] >= steps)
                                 q[m] = steps - 1;
                             assert(q[m] >= 0 && q[m] < steps);
index 45afe9b..2addcb2 100644 (file)
@@ -82,12 +82,7 @@ static const int bitinv32[32] = {
 static int16_t filter_bank[512];
 
 static int scale_factor_table[64];
-#ifdef USE_FLOATS
 static float scale_factor_inv_table[64];
-#else
-static int8_t scale_factor_shift[64];
-static unsigned short scale_factor_mult[64];
-#endif
 static unsigned char scale_diff_table[128];
 
 /* total number of bits per allocation group */