#include "mpegaudiodata.h"
#include "mpegaudiodectab.h"
-static void RENAME(compute_antialias)(MPADecodeContext *s, GranuleDef *g);
-
/* vlc structure for decoding layer 3 huffman tables */
static VLC huff_vlc[16];
static VLC_TYPE huff_vlc_tables[
/* intensity stereo coef table */
static INTFLOAT is_table[2][16];
static INTFLOAT is_table_lsf[2][2][16];
-static int32_t csa_table[8][4];
-static float csa_table_float[8][4];
+static INTFLOAT csa_table[8][4];
static INTFLOAT mdct_win[8][36];
static int16_t division_tab3[1<<6 ];
ci = ci_table[i];
cs = 1.0 / sqrt(1.0 + ci * ci);
ca = cs * ci;
+#if !CONFIG_FLOAT
csa_table[i][0] = FIXHR(cs/4);
csa_table[i][1] = FIXHR(ca/4);
csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4);
- csa_table_float[i][0] = cs;
- csa_table_float[i][1] = ca;
- csa_table_float[i][2] = ca + cs;
- csa_table_float[i][3] = ca - cs;
+#else
+ csa_table[i][0] = cs;
+ csa_table[i][1] = ca;
+ csa_table[i][2] = ca + cs;
+ csa_table[i][3] = ca - cs;
+#endif
}
/* compute mdct windows */
}
}
-#if !CONFIG_FLOAT
-static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g)
+#if CONFIG_FLOAT
+#define AA(j) do { \
+ float tmp0 = ptr[-1-j]; \
+ float tmp1 = ptr[ j]; \
+ ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
+ ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
+ } while (0)
+#else
+#define AA(j) do { \
+ int tmp0 = ptr[-1-j]; \
+ int tmp1 = ptr[ j]; \
+ int tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
+ ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa_table[j][2])); \
+ ptr[ j] = 4*(tmp2 + MULH(tmp0, csa_table[j][3])); \
+ } while (0)
+#endif
+
+static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
{
- int32_t *ptr, *csa;
+ INTFLOAT *ptr;
int n, i;
/* we antialias only "long" bands */
ptr = g->sb_hybrid + 18;
for(i = n;i > 0;i--) {
- int tmp0, tmp1, tmp2;
- csa = &csa_table[0][0];
-#define INT_AA(j) \
- tmp0 = ptr[-1-j];\
- tmp1 = ptr[ j];\
- tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\
- ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));\
- ptr[ j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j]));
-
- INT_AA(0)
- INT_AA(1)
- INT_AA(2)
- INT_AA(3)
- INT_AA(4)
- INT_AA(5)
- INT_AA(6)
- INT_AA(7)
+ AA(0);
+ AA(1);
+ AA(2);
+ AA(3);
+ AA(4);
+ AA(5);
+ AA(6);
+ AA(7);
ptr += 18;
}
}
-#endif
static void compute_imdct(MPADecodeContext *s,
GranuleDef *g,
g = &s->granules[ch][gr];
reorder_block(s, g);
- RENAME(compute_antialias)(s, g);
+ compute_antialias(s, g);
compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
}
} /* gr */
#define CONFIG_FLOAT 1
#include "mpegaudiodec.c"
-static void compute_antialias_float(MPADecodeContext *s,
- GranuleDef *g)
-{
- float *ptr;
- int n, i;
-
- /* we antialias only "long" bands */
- if (g->block_type == 2) {
- if (!g->switch_point)
- return;
- /* XXX: check this for 8000Hz case */
- n = 1;
- } else {
- n = SBLIMIT - 1;
- }
-
- ptr = g->sb_hybrid + 18;
- for(i = n;i > 0;i--) {
- float tmp0, tmp1;
- float *csa = &csa_table_float[0][0];
-#define FLOAT_AA(j)\
- tmp0= ptr[-1-j];\
- tmp1= ptr[ j];\
- ptr[-1-j] = tmp0 * csa[0+4*j] - tmp1 * csa[1+4*j];\
- ptr[ j] = tmp0 * csa[1+4*j] + tmp1 * csa[0+4*j];
-
- FLOAT_AA(0)
- FLOAT_AA(1)
- FLOAT_AA(2)
- FLOAT_AA(3)
- FLOAT_AA(4)
- FLOAT_AA(5)
- FLOAT_AA(6)
- FLOAT_AA(7)
-
- ptr += 18;
- }
-}
-
#if CONFIG_MP1FLOAT_DECODER
AVCodec ff_mp1float_decoder =
{