]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/ac3dec.h
Theora 3.4 doesn't exist; these fields were misunderstandings of the spec
[ffmpeg] / libavcodec / ac3dec.h
index 7d34837e0cb36bedf1f1a812bbc4111f8e5c1ce7..cac03953a3cfedc75b5715445f4f7f7c2f4c32f7 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * @file ac3.h
+ * @file libavcodec/ac3.h
  * Common code between the AC-3 and E-AC-3 decoders.
  */
 
@@ -29,7 +29,7 @@
 
 #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
@@ -62,6 +57,7 @@ typedef struct {
     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
@@ -85,34 +81,13 @@ typedef struct {
     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
@@ -171,8 +146,8 @@ typedef struct {
 
 ///@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
@@ -181,14 +156,13 @@ typedef struct {
     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;
 
@@ -204,6 +178,4 @@ int ff_eac3_parse_header(AC3DecodeContext *s);
  */
 void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
 
-void ff_eac3_apply_spectral_extension(AC3DecodeContext *s);
-
 #endif /* AVCODEC_AC3DEC_H */