*/
/**
- * @file ac3.h
+ * @file libavcodec/ac3.h
* Common code between the AC-3 and E-AC-3 decoders.
*/
#include "libavutil/lfg.h"
#include "ac3.h"
-#include "bitstream.h"
+#include "get_bits.h"
#include "dsputil.h"
/* override ac3.h to include coupling channel */
#define AC3_MAX_COEFS 256
#define AC3_BLOCK_SIZE 256
#define MAX_BLOCKS 6
-#define SPX_MAX_BANDS 17
-
-#define INT24_MIN -8388608
-#define INT24_MAX 8388607
-#define M_SQRT_POW2_15 181
typedef struct {
AVCodecContext *avctx; ///< parent context
int sample_rate; ///< sample frequency, in Hz
int num_blocks; ///< number of audio blocks
int channel_mode; ///< channel mode (acmod)
+ int channel_layout; ///< channel layout
int lfe_on; ///< lfe channel in use
int channel_map; ///< custom channel map
int center_mix_level; ///< Center mix level index
int channel_in_cpl[AC3_MAX_CHANNELS]; ///< channel in coupling (chincpl)
int phase_flags_in_use; ///< phase flags in use (phsflginu)
int phase_flags[18]; ///< phase flags (phsflg)
- int num_cpl_subbands; ///< number of coupling sub bands (ncplsubnd)
int num_cpl_bands; ///< number of coupling bands (ncplbnd)
- uint8_t cpl_band_struct[18]; ///< coupling band structure (cplbndstrc)
+ uint8_t cpl_band_sizes[18]; ///< number of coeffs in each coupling band
int firstchincpl; ///< first channel in coupling
int first_cpl_coords[AC3_MAX_CHANNELS]; ///< first coupling coordinates states (firstcplcos)
int cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates (cplco)
///@}
-///@defgroup spx spectral extension
-///@{
- int spx_in_use[MAX_BLOCKS]; ///< spectral extension in use (spxinu)
- int channel_in_spx[AC3_MAX_CHANNELS]; ///< channel in spectral extension (chinspx)
- int spx_atten_code[AC3_MAX_CHANNELS]; ///< spx attenuation code (spxattencod)
- int spx_coords_exist[AC3_MAX_CHANNELS]; ///< indicates if a channel has spx coords (spxcoe)
- int spx_start_subband; ///< spx beginning frequency band (spxbegf)
- int spx_start_freq; ///< spx start frequency bin
- int spx_end_freq; ///< spx end frequency bin
- int spx_copy_start_freq; ///< spx starting frequency for copying (copystartmant)
- int num_spx_subbands; ///< number of spectral extension subbands
- int num_spx_bands; ///< number of spectral extension bands (nspxbnds)
- uint8_t spx_band_struct[SPX_MAX_BANDS]; ///< spectral extension band structure (spxbndstrc)
- int spx_band_sizes[SPX_MAX_BANDS]; ///< number of bins in each band (spxbndsztab)
- int first_spx_coords[AC3_MAX_CHANNELS]; ///< first spx coordinates states (firstspxcos)
- int spx_noise_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spx noise blending factor (nblendfact)
- int spx_signal_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spx signal blending factor (sblendfact)
- int spx_coords[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spectral extension coordinates (spxco)
-///@}
-
///@defgroup aht adaptive hybrid transform
int channel_uses_aht[AC3_MAX_CHANNELS]; ///< channel AHT in use (chahtinu)
int pre_mantissa[AC3_MAX_CHANNELS][AC3_MAX_COEFS][MAX_BLOCKS]; ///< pre-IDCT mantissas
///@defgroup imdct IMDCT
int block_switch[AC3_MAX_CHANNELS]; ///< block switch flags (blksw)
- MDCTContext imdct_512; ///< for 512 sample IMDCT
- MDCTContext imdct_256; ///< for 256 sample IMDCT
+ FFTContext imdct_512; ///< for 512 sample IMDCT
+ FFTContext imdct_256; ///< for 256 sample IMDCT
///@}
///@defgroup opt optimization
float mul_bias; ///< scaling for float_to_int16 conversion
///@}
- DECLARE_ALIGNED_16(int, fixed_coeffs[AC3_MAX_CHANNELS][AC3_MAX_COEFS]); ///> fixed-point transform coefficients
-
///@defgroup arrays aligned arrays
- DECLARE_ALIGNED_16(float, transform_coeffs[AC3_MAX_CHANNELS][AC3_MAX_COEFS]); ///< transform coefficients
- DECLARE_ALIGNED_16(float, delay[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]); ///< delay - added to the next block
- DECLARE_ALIGNED_16(float, window[AC3_BLOCK_SIZE]); ///< window coefficients
- DECLARE_ALIGNED_16(float, tmp_output[AC3_BLOCK_SIZE]); ///< temporary storage for output before windowing
- DECLARE_ALIGNED_16(float, output[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]); ///< output after imdct transform and windowing
+ DECLARE_ALIGNED_16(int, fixed_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///> fixed-point transform coefficients
+ DECLARE_ALIGNED_16(float, transform_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< transform coefficients
+ DECLARE_ALIGNED_16(float, delay)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< delay - added to the next block
+ DECLARE_ALIGNED_16(float, window)[AC3_BLOCK_SIZE]; ///< window coefficients
+ DECLARE_ALIGNED_16(float, tmp_output)[AC3_BLOCK_SIZE]; ///< temporary storage for output before windowing
+ DECLARE_ALIGNED_16(float, output)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< output after imdct transform and windowing
///@}
} AC3DecodeContext;
*/
void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
-void ff_eac3_apply_spectral_extension(AC3DecodeContext *s);
-
#endif /* AVCODEC_AC3DEC_H */