@ -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 */