*/
/**
- * @file libavcodec/aac.h
+ * @file
* AAC definitions and structures
* @author Oded Shimon ( ods15 ods15 dyndns org )
* @author Maxim Gavrilov ( maxim.gavrilov gmail com )
#include "avcodec.h"
#include "dsputil.h"
+#include "fft.h"
#include "mpeg4audio.h"
+#include "sbr.h"
#include <stdint.h>
-#define AAC_INIT_VLC_STATIC(num, size) \
- INIT_VLC_STATIC(&vlc_spectral[num], 6, ff_aac_spectral_sizes[num], \
- ff_aac_spectral_bits[num], sizeof( ff_aac_spectral_bits[num][0]), sizeof( ff_aac_spectral_bits[num][0]), \
- ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), sizeof(ff_aac_spectral_codes[num][0]), \
- size);
-
#define MAX_CHANNELS 64
#define MAX_ELEM_ID 16
AFTER_IMDCT = 3,
};
+/**
+ * Output configuration status
+ */
+enum OCStatus {
+ OC_NONE, //< Output unconfigured
+ OC_TRIAL_PCE, //< Output configuration under trial specified by an inband PCE
+ OC_TRIAL_FRAME, //< Output configuration under trial specified by a frame header
+ OC_GLOBAL_HDR, //< Output configuration set in a global header but not yet locked
+ OC_LOCKED, //< Output configuration locked in place
+};
+
/**
* Predictor State
*/
float sf[120]; ///< scalefactors
int sf_idx[128]; ///< scalefactor indices (used by encoder)
uint8_t zeroes[128]; ///< band is not coded (used by encoder)
- DECLARE_ALIGNED_16(float, coeffs[1024]); ///< coefficients for IMDCT
- DECLARE_ALIGNED_16(float, saved[1024]); ///< overlap
- DECLARE_ALIGNED_16(float, ret[1024]); ///< PCM output
+ DECLARE_ALIGNED(16, float, coeffs)[1024]; ///< coefficients for IMDCT
+ DECLARE_ALIGNED(16, float, saved)[1024]; ///< overlap
+ DECLARE_ALIGNED(16, float, ret)[2048]; ///< PCM output
PredictorState predictor_state[MAX_PREDICTORS];
} SingleChannelElement;
SingleChannelElement ch[2];
// CCE specific
ChannelCoupling coup;
+ SpectralBandReplication sbr;
} ChannelElement;
/**
* main AAC context
*/
typedef struct {
- AVCodecContext * avccontext;
+ AVCodecContext *avctx;
MPEG4AudioConfig m4ac;
enum ChannelPosition che_pos[4][MAX_ELEM_ID]; /**< channel element channel mapping with the
* first index as the first 4 raw data block types
*/
- ChannelElement * che[4][MAX_ELEM_ID];
- ChannelElement * tag_che_map[4][MAX_ELEM_ID];
+ ChannelElement *che[4][MAX_ELEM_ID];
+ ChannelElement *tag_che_map[4][MAX_ELEM_ID];
int tags_mapped;
/** @} */
* @defgroup temporary aligned temporary buffers (We do not want to have these on the stack.)
* @{
*/
- DECLARE_ALIGNED_16(float, buf_mdct[1024]);
+ DECLARE_ALIGNED(16, float, buf_mdct)[1024];
/** @} */
/**
int sf_offset; ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16
/** @} */
- DECLARE_ALIGNED(16, float, temp[128]);
+ DECLARE_ALIGNED(16, float, temp)[128];
- int output_configured;
+ enum OCStatus output_configured;
} AACContext;
#endif /* AVCODEC_AAC_H */