Commit 6f1ec38c authored by Mans Rullgard's avatar Mans Rullgard

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: 's avatarMans Rullgard <mans@mansr.com>
parent 9ebcf769
...@@ -112,8 +112,6 @@ typedef struct MPADecodeContext { ...@@ -112,8 +112,6 @@ typedef struct MPADecodeContext {
#include "mpegaudiodata.h" #include "mpegaudiodata.h"
#include "mpegaudiodectab.h" #include "mpegaudiodectab.h"
static void RENAME(compute_antialias)(MPADecodeContext *s, GranuleDef *g);
/* vlc structure for decoding layer 3 huffman tables */ /* vlc structure for decoding layer 3 huffman tables */
static VLC huff_vlc[16]; static VLC huff_vlc[16];
static VLC_TYPE huff_vlc_tables[ static VLC_TYPE huff_vlc_tables[
...@@ -135,8 +133,7 @@ static uint16_t band_index_long[9][23]; ...@@ -135,8 +133,7 @@ static uint16_t band_index_long[9][23];
/* intensity stereo coef table */ /* intensity stereo coef table */
static INTFLOAT is_table[2][16]; static INTFLOAT is_table[2][16];
static INTFLOAT is_table_lsf[2][2][16]; static INTFLOAT is_table_lsf[2][2][16];
static int32_t csa_table[8][4]; static INTFLOAT csa_table[8][4];
static float csa_table_float[8][4];
static INTFLOAT mdct_win[8][36]; static INTFLOAT mdct_win[8][36];
static int16_t division_tab3[1<<6 ]; static int16_t division_tab3[1<<6 ];
...@@ -441,14 +438,17 @@ static av_cold int decode_init(AVCodecContext * avctx) ...@@ -441,14 +438,17 @@ static av_cold int decode_init(AVCodecContext * avctx)
ci = ci_table[i]; ci = ci_table[i];
cs = 1.0 / sqrt(1.0 + ci * ci); cs = 1.0 / sqrt(1.0 + ci * ci);
ca = cs * ci; ca = cs * ci;
#if !CONFIG_FLOAT
csa_table[i][0] = FIXHR(cs/4); csa_table[i][0] = FIXHR(cs/4);
csa_table[i][1] = FIXHR(ca/4); csa_table[i][1] = FIXHR(ca/4);
csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4); csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4); csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4);
csa_table_float[i][0] = cs; #else
csa_table_float[i][1] = ca; csa_table[i][0] = cs;
csa_table_float[i][2] = ca + cs; csa_table[i][1] = ca;
csa_table_float[i][3] = ca - cs; csa_table[i][2] = ca + cs;
csa_table[i][3] = ca - cs;
#endif
} }
/* compute mdct windows */ /* compute mdct windows */
...@@ -1335,10 +1335,26 @@ static void compute_stereo(MPADecodeContext *s, ...@@ -1335,10 +1335,26 @@ static void compute_stereo(MPADecodeContext *s,
} }
} }
#if !CONFIG_FLOAT #if CONFIG_FLOAT
static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g) #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; int n, i;
/* we antialias only "long" bands */ /* we antialias only "long" bands */
...@@ -1353,28 +1369,18 @@ static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g) ...@@ -1353,28 +1369,18 @@ static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g)
ptr = g->sb_hybrid + 18; ptr = g->sb_hybrid + 18;
for(i = n;i > 0;i--) { for(i = n;i > 0;i--) {
int tmp0, tmp1, tmp2; AA(0);
csa = &csa_table[0][0]; AA(1);
#define INT_AA(j) \ AA(2);
tmp0 = ptr[-1-j];\ AA(3);
tmp1 = ptr[ j];\ AA(4);
tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\ AA(5);
ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));\ AA(6);
ptr[ j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j])); AA(7);
INT_AA(0)
INT_AA(1)
INT_AA(2)
INT_AA(3)
INT_AA(4)
INT_AA(5)
INT_AA(6)
INT_AA(7)
ptr += 18; ptr += 18;
} }
} }
#endif
static void compute_imdct(MPADecodeContext *s, static void compute_imdct(MPADecodeContext *s,
GranuleDef *g, GranuleDef *g,
...@@ -1703,7 +1709,7 @@ static int mp_decode_layer3(MPADecodeContext *s) ...@@ -1703,7 +1709,7 @@ static int mp_decode_layer3(MPADecodeContext *s)
g = &s->granules[ch][gr]; g = &s->granules[ch][gr];
reorder_block(s, g); 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]); compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
} }
} /* gr */ } /* gr */
......
...@@ -22,45 +22,6 @@ ...@@ -22,45 +22,6 @@
#define CONFIG_FLOAT 1 #define CONFIG_FLOAT 1
#include "mpegaudiodec.c" #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 #if CONFIG_MP1FLOAT_DECODER
AVCodec ff_mp1float_decoder = AVCodec ff_mp1float_decoder =
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment