From 6f1ec38ce2193d3d4cacd87edb452c6d7ba751ec Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Thu, 19 May 2011 13:36:21 +0100 Subject: mpegaudio: clean up compute_antialias() definition This merges the float and fixed-point versions of the compute_antialias function, fixes invalid array indexing, and eliminates a dead copy of csa_table. Signed-off-by: Mans Rullgard --- libavcodec/mpegaudiodec.c | 66 ++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 30 deletions(-) (limited to 'libavcodec/mpegaudiodec.c') diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index ccc93ad..b9d705b 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -112,8 +112,6 @@ typedef struct MPADecodeContext { #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[ @@ -135,8 +133,7 @@ static uint16_t band_index_long[9][23]; /* 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 ]; @@ -441,14 +438,17 @@ static av_cold int decode_init(AVCodecContext * avctx) 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 */ @@ -1335,10 +1335,26 @@ static void compute_stereo(MPADecodeContext *s, } } -#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 */ @@ -1353,28 +1369,18 @@ static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g) 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, @@ -1703,7 +1709,7 @@ static int mp_decode_layer3(MPADecodeContext *s) 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 */ -- cgit v1.1 From fdf18e33bb07d665a86b344e65043692a3de51bb Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Tue, 31 May 2011 18:38:01 +0100 Subject: mpegaudiodec: remove unusued code and variables Signed-off-by: Mans Rullgard --- libavcodec/mpegaudiodec.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) (limited to 'libavcodec/mpegaudiodec.c') diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index b9d705b..6910d1f 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -269,27 +269,6 @@ static inline int l3_unscale(int value, int exponent) return m; } -/* all integer n^(4/3) computation code */ -#define DEV_ORDER 13 - -#define POW_FRAC_BITS 24 -#define POW_FRAC_ONE (1 << POW_FRAC_BITS) -#define POW_FIX(a) ((int)((a) * POW_FRAC_ONE)) -#define POW_MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> POW_FRAC_BITS) - -static int dev_4_3_coefs[DEV_ORDER]; - -static av_cold void int_pow_init(void) -{ - int i, a; - - a = POW_FIX(1.0); - for(i=0;ipriv_data; @@ -385,7 +364,6 @@ static av_cold int decode_init(AVCodecContext * avctx) /* compute n ^ (4/3) and store it in mantissa/exp format */ - int_pow_init(); mpegaudio_tableinit(); for (i = 0; i < 4; i++) @@ -1476,7 +1454,7 @@ static void compute_imdct(MPADecodeContext *s, /* main layer3 decoding function */ static int mp_decode_layer3(MPADecodeContext *s) { - int nb_granules, main_data_begin, private_bits; + int nb_granules, main_data_begin; int gr, ch, blocksplit_flag, i, j, k, n, bits_pos; GranuleDef *g; int16_t exponents[576]; //FIXME try INTFLOAT @@ -1484,14 +1462,14 @@ static int mp_decode_layer3(MPADecodeContext *s) /* read side info */ if (s->lsf) { main_data_begin = get_bits(&s->gb, 8); - private_bits = get_bits(&s->gb, s->nb_channels); + skip_bits(&s->gb, s->nb_channels); nb_granules = 1; } else { main_data_begin = get_bits(&s->gb, 9); if (s->nb_channels == 2) - private_bits = get_bits(&s->gb, 3); + skip_bits(&s->gb, 3); else - private_bits = get_bits(&s->gb, 5); + skip_bits(&s->gb, 5); nb_granules = 2; for(ch=0;chnb_channels;ch++) { s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */ -- cgit v1.1