AAC decoder. More...
#include "avcodec.h"
#include "internal.h"
#include "get_bits.h"
#include "dsputil.h"
#include "fft.h"
#include "fmtconvert.h"
#include "lpc.h"
#include "kbdwin.h"
#include "sinewin.h"
#include "aac.h"
#include "aactab.h"
#include "aacdectab.h"
#include "cbrt_tablegen.h"
#include "sbr.h"
#include "aacsbr.h"
#include "mpeg4audio.h"
#include "aacadtsdec.h"
#include "libavutil/intfloat.h"
#include <assert.h>
#include <errno.h>
#include <math.h>
#include <string.h>
Go to the source code of this file.
Data Structures | |
struct | LATMContext |
Macros | |
#define | AAC_INIT_VLC_STATIC(num, size) |
#define | LOAS_SYNC_WORD 0x2b7 |
11 bits LOAS sync word More... | |
Functions | |
static ChannelElement * | get_che (AACContext *ac, int type, int elem_id) |
static int | count_channels (enum ChannelPosition che_pos[4][MAX_ELEM_ID]) |
static av_cold int | che_configure (AACContext *ac, enum ChannelPosition che_pos[4][MAX_ELEM_ID], int type, int id, int *channels) |
Check for the channel element in the current channel position configuration. More... | |
static av_cold int | output_configure (AACContext *ac, enum ChannelPosition che_pos[4][MAX_ELEM_ID], enum ChannelPosition new_che_pos[4][MAX_ELEM_ID], int channel_config, enum OCStatus oc_type) |
Configure output channel order based on the current program configuration element. More... | |
static void | decode_channel_map (enum ChannelPosition *cpe_map, enum ChannelPosition *sce_map, enum ChannelPosition type, GetBitContext *gb, int n) |
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit. More... | |
static int | decode_pce (AVCodecContext *avctx, MPEG4AudioConfig *m4ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID], GetBitContext *gb) |
Decode program configuration element; reference: table 4.2. More... | |
static av_cold int | set_default_channel_config (AVCodecContext *avctx, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID], int channel_config) |
Set up channel positions based on a default channel configuration as specified in table 1.17. More... | |
static int | decode_ga_specific_config (AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config) |
Decode GA "General Audio" specific configuration; reference: table 4.1. More... | |
static int | decode_audio_specific_config (AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int bit_size, int sync_extension) |
Decode audio specific configuration; reference: table 1.13. More... | |
static av_always_inline int | lcg_random (int previous_val) |
linear congruential pseudorandom number generator More... | |
static av_always_inline void | reset_predict_state (PredictorState *ps) |
static void | reset_all_predictors (PredictorState *ps) |
static int | sample_rate_idx (int rate) |
static void | reset_predictor_group (PredictorState *ps, int group_num) |
static av_cold int | aac_decode_init (AVCodecContext *avctx) |
static int | skip_data_stream_element (AACContext *ac, GetBitContext *gb) |
Skip data_stream_element; reference: table 4.10. More... | |
static int | decode_prediction (AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb) |
static void | decode_ltp (AACContext *ac, LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb) |
Decode Long Term Prediction data; reference: table 4.xx. More... | |
static int | decode_ics_info (AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb) |
Decode Individual Channel Stream info; reference: table 4.6. More... | |
static int | decode_band_types (AACContext *ac, enum BandType band_type[120], int band_type_run_end[120], GetBitContext *gb, IndividualChannelStream *ics) |
Decode band types (section_data payload); reference: table 4.46. More... | |
static int | decode_scalefactors (AACContext *ac, float sf[120], GetBitContext *gb, unsigned int global_gain, IndividualChannelStream *ics, enum BandType band_type[120], int band_type_run_end[120]) |
Decode scalefactors; reference: table 4.47. More... | |
static int | decode_pulses (Pulse *pulse, GetBitContext *gb, const uint16_t *swb_offset, int num_swb) |
Decode pulse data; reference: table 4.7. More... | |
static int | decode_tns (AACContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics) |
Decode Temporal Noise Shaping data; reference: table 4.48. More... | |
static void | decode_mid_side_stereo (ChannelElement *cpe, GetBitContext *gb, int ms_present) |
Decode Mid/Side data; reference: table 4.54. More... | |
static float * | VMUL2 (float *dst, const float *v, unsigned idx, const float *scale) |
static float * | VMUL4 (float *dst, const float *v, unsigned idx, const float *scale) |
static float * | VMUL2S (float *dst, const float *v, unsigned idx, unsigned sign, const float *scale) |
static float * | VMUL4S (float *dst, const float *v, unsigned idx, unsigned sign, const float *scale) |
static int | decode_spectrum_and_dequant (AACContext *ac, float coef[1024], GetBitContext *gb, const float sf[120], int pulse_present, const Pulse *pulse, const IndividualChannelStream *ics, enum BandType band_type[120]) |
Decode spectral data; reference: table 4.50. More... | |
static av_always_inline float | flt16_round (float pf) |
static av_always_inline float | flt16_even (float pf) |
static av_always_inline float | flt16_trunc (float pf) |
static av_always_inline void | predict (PredictorState *ps, float *coef, int output_enable) |
static void | apply_prediction (AACContext *ac, SingleChannelElement *sce) |
Apply AAC-Main style frequency domain prediction. More... | |
static int | decode_ics (AACContext *ac, SingleChannelElement *sce, GetBitContext *gb, int common_window, int scale_flag) |
Decode an individual_channel_stream payload; reference: table 4.44. More... | |
static void | apply_mid_side_stereo (AACContext *ac, ChannelElement *cpe) |
Mid/Side stereo decoding; reference: 4.6.8.1.3. More... | |
static void | apply_intensity_stereo (AACContext *ac, ChannelElement *cpe, int ms_present) |
intensity stereo decoding; reference: 4.6.8.2.3 More... | |
static int | decode_cpe (AACContext *ac, GetBitContext *gb, ChannelElement *cpe) |
Decode a channel_pair_element; reference: table 4.4. More... | |
static int | decode_cce (AACContext *ac, GetBitContext *gb, ChannelElement *che) |
Decode coupling_channel_element; reference: table 4.8. More... | |
static int | decode_drc_channel_exclusions (DynamicRangeControl *che_drc, GetBitContext *gb) |
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53. More... | |
static int | decode_dynamic_range (DynamicRangeControl *che_drc, GetBitContext *gb, int cnt) |
Decode dynamic range information; reference: table 4.52. More... | |
static int | decode_extension_payload (AACContext *ac, GetBitContext *gb, int cnt, ChannelElement *che, enum RawDataBlockType elem_type) |
Decode extension data (incomplete); reference: table 4.51. More... | |
static void | apply_tns (float coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode) |
Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3. More... | |
static void | windowing_and_mdct_ltp (AACContext *ac, float *out, float *in, IndividualChannelStream *ics) |
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP. More... | |
static void | apply_ltp (AACContext *ac, SingleChannelElement *sce) |
Apply the long term prediction. More... | |
static void | update_ltp (AACContext *ac, SingleChannelElement *sce) |
Update the LTP buffer for next frame. More... | |
static void | imdct_and_windowing (AACContext *ac, SingleChannelElement *sce) |
Conduct IMDCT and windowing. More... | |
static void | apply_dependent_coupling (AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index) |
Apply dependent channel coupling (applied before IMDCT). More... | |
static void | apply_independent_coupling (AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index) |
Apply independent channel coupling (applied after IMDCT). More... | |
static void | apply_channel_coupling (AACContext *ac, ChannelElement *cc, enum RawDataBlockType type, int elem_id, enum CouplingPoint coupling_point, void(*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)) |
channel coupling transformation interface More... | |
static void | spectral_to_sample (AACContext *ac) |
Convert spectral data to float samples, applying all supported tools as appropriate. More... | |
static int | parse_adts_frame_header (AACContext *ac, GetBitContext *gb) |
static int | aac_decode_frame_int (AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb) |
static int | aac_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) |
static av_cold int | aac_decode_close (AVCodecContext *avctx) |
static uint32_t | latm_get_value (GetBitContext *b) |
static int | latm_decode_audio_specific_config (struct LATMContext *latmctx, GetBitContext *gb, int asclen) |
static int | read_stream_mux_config (struct LATMContext *latmctx, GetBitContext *gb) |
static int | read_payload_length_info (struct LATMContext *ctx, GetBitContext *gb) |
static int | read_audio_mux_element (struct LATMContext *latmctx, GetBitContext *gb) |
static int | latm_decode_frame (AVCodecContext *avctx, void *out, int *got_frame_ptr, AVPacket *avpkt) |
static av_cold int | latm_decode_init (AVCodecContext *avctx) |
Variables | |
static VLC | vlc_scalefactors |
static VLC | vlc_spectral [11] |
static const char | overread_err [] = "Input buffer exhausted before END element found\n" |
static const float | cce_scale [] |
AVCodec | ff_aac_decoder |
AVCodec | ff_aac_latm_decoder |
AAC decoder.
Definition in file aacdec.c.
#define AAC_INIT_VLC_STATIC | ( | num, | |
size | |||
) |
Definition at line 575 of file aacdec.c.
Referenced by aac_decode_init().
#define LOAS_SYNC_WORD 0x2b7 |
|
static |
|
static |
|
static |
Definition at line 2130 of file aacdec.c.
Referenced by aac_decode_frame(), and latm_decode_frame().
|
static |
Definition at line 581 of file aacdec.c.
Referenced by latm_decode_init().
|
static |
channel coupling transformation interface
apply_coupling_method | pointer to (in)dependent coupling function |
Definition at line 2014 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
Apply dependent channel coupling (applied before IMDCT).
index | index into coupling gain array |
Definition at line 1959 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
Apply independent channel coupling (applied after IMDCT).
index | index into coupling gain array |
Definition at line 1995 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
intensity stereo decoding; reference: 4.6.8.2.3
ms_present | Indicates mid/side stereo presence. [0] mask is all 0s; [1] mask is decoded from bitstream; [2] mask is all 1s; [3] reserved for scalable AAC |
Definition at line 1459 of file aacdec.c.
Referenced by decode_cpe().
|
static |
Apply the long term prediction.
Definition at line 1827 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
Mid/Side stereo decoding; reference: 4.6.8.1.3.
Definition at line 1429 of file aacdec.c.
Referenced by decode_cpe().
|
static |
Apply AAC-Main style frequency domain prediction.
Definition at line 1341 of file aacdec.c.
Referenced by decode_cpe(), and decode_ics().
|
static |
Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4.6.9.3.
decode | 1 if tool is used normally, 0 if tool is used in LTP. |
coef | spectral coefficients |
Definition at line 1745 of file aacdec.c.
Referenced by apply_ltp(), and spectral_to_sample().
|
static |
Check for the channel element in the current channel position configuration.
If it exists, make sure the appropriate element is allocated and map the channel order to match the internal Libav channel layout.
che_pos | current channel position configuration |
type | channel element type |
id | channel element id |
channels | count of the number of channels in the configuration |
Definition at line 191 of file aacdec.c.
Referenced by output_configure().
|
static |
Definition at line 166 of file aacdec.c.
Referenced by decode_ga_specific_config().
|
static |
Decode audio specific configuration; reference: table 1.13.
ac | pointer to AACContext, may be null |
avctx | pointer to AVCCodecContext, used for logging |
m4ac | pointer to MPEG4AudioConfig, used for parsing |
data | pointer to buffer holding an audio specific config |
bit_size | size of audio specific config or data in bits |
sync_extension | look for an appended sync extension |
Definition at line 478 of file aacdec.c.
Referenced by aac_decode_frame(), aac_decode_init(), latm_decode_audio_specific_config(), and latm_decode_frame().
|
static |
Decode band types (section_data payload); reference: table 4.46.
band_type | array of the used band type |
band_type_run_end | array of the last scalefactor band of a band type run |
Definition at line 796 of file aacdec.c.
Referenced by decode_ics().
|
static |
Decode coupling_channel_element; reference: table 4.8.
Definition at line 1550 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
cpe_map | Stereo (Channel Pair Element) map, NULL if stereo bit is not present. |
sce_map | mono (Single Channel Element) map |
type | speaker type/position for these channels |
Definition at line 285 of file aacdec.c.
Referenced by decode_pce().
|
static |
Decode a channel_pair_element; reference: table 4.4.
Definition at line 1499 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
Definition at line 1622 of file aacdec.c.
Referenced by decode_dynamic_range().
|
static |
Decode dynamic range information; reference: table 4.52.
cnt | length of TYPE_FIL syntactic element in bytes |
Definition at line 1643 of file aacdec.c.
Referenced by decode_extension_payload().
|
static |
Decode extension data (incomplete); reference: table 4.51.
cnt | length of TYPE_FIL syntactic element in bytes |
Definition at line 1697 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Decode GA "General Audio" specific configuration; reference: table 4.1.
ac | pointer to AACContext, may be null |
avctx | pointer to AVCCodecContext, used for logging |
Definition at line 406 of file aacdec.c.
Referenced by decode_audio_specific_config().
|
static |
Decode an individual_channel_stream payload; reference: table 4.44.
common_window | Channels have independent [0], or shared [1], Individual Channel Stream information. |
scale_flag | scalable [1] or non-scalable [0] AAC (Unused until scalable AAC is implemented.) |
Definition at line 1371 of file aacdec.c.
Referenced by aac_decode_frame_int(), decode_cce(), and decode_cpe().
|
static |
Decode Individual Channel Stream info; reference: table 4.6.
Definition at line 726 of file aacdec.c.
Referenced by decode_cpe(), and decode_ics().
|
static |
Decode Long Term Prediction data; reference: table 4.xx.
Definition at line 712 of file aacdec.c.
Referenced by decode_cpe(), and decode_ics_info().
|
static |
Decode Mid/Side data; reference: table 4.54.
ms_present | Indicates mid/side stereo presence. [0] mask is all 0s; [1] mask is decoded from bitstream; [2] mask is all 1s; [3] reserved for scalable AAC |
Definition at line 977 of file aacdec.c.
Referenced by decode_cpe().
|
static |
Decode program configuration element; reference: table 4.2.
new_che_pos | New channel position configuration - we only do something if it differs from the current one. |
Definition at line 303 of file aacdec.c.
Referenced by aac_decode_frame_int(), and decode_ga_specific_config().
|
static |
Definition at line 692 of file aacdec.c.
Referenced by decode_ics_info().
|
static |
Decode pulse data; reference: table 4.7.
Definition at line 908 of file aacdec.c.
Referenced by decode_ics().
|
static |
Decode scalefactors; reference: table 4.47.
global_gain | first scalefactor value as scalefactors are differentially coded |
band_type | array of the used band type |
band_type_run_end | array of the last scalefactor band of a band type run |
sf | array of scalefactors or intensity stereo positions |
Definition at line 845 of file aacdec.c.
Referenced by decode_ics().
|
static |
Decode spectral data; reference: table 4.50.
Dequantize and scale spectral data; reference: 4.6.3.3.
coef | array of dequantized, scaled spectral data |
sf | array of scalefactors or intensity stereo positions |
pulse_present | set if pulses are present |
pulse | pointer to pulse data struct |
band_type | array of the used band type |
Definition at line 1069 of file aacdec.c.
Referenced by decode_ics().
|
static |
Decode Temporal Noise Shaping data; reference: table 4.48.
Definition at line 935 of file aacdec.c.
Referenced by decode_ics().
|
static |
|
static |
|
static |
|
static |
Definition at line 117 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Conduct IMDCT and windowing.
Definition at line 1894 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
Definition at line 2348 of file aacdec.c.
Referenced by read_stream_mux_config().
|
static |
|
static |
|
inlinestatic |
Definition at line 2341 of file aacdec.c.
Referenced by read_stream_mux_config().
|
static |
linear congruential pseudorandom number generator
previous_val | pointer to the current state of the generator |
Definition at line 530 of file aacdec.c.
Referenced by decode_spectrum_and_dequant().
|
static |
Configure output channel order based on the current program configuration element.
che_pos | current channel position configuration |
new_che_pos | New channel position configuration - we only do something if it differs from the current one. |
Definition at line 226 of file aacdec.c.
Referenced by aac_decode_frame_int(), aac_decode_init(), decode_extension_payload(), decode_ga_specific_config(), and parse_adts_frame_header().
|
static |
Definition at line 2090 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Definition at line 1307 of file aacdec.c.
Referenced by apply_prediction().
|
static |
Definition at line 2505 of file aacdec.c.
Referenced by latm_decode_frame().
|
static |
Definition at line 2484 of file aacdec.c.
Referenced by read_audio_mux_element().
|
static |
Definition at line 2402 of file aacdec.c.
Referenced by read_audio_mux_element().
|
static |
Definition at line 545 of file aacdec.c.
Referenced by apply_prediction().
|
static |
Definition at line 535 of file aacdec.c.
Referenced by reset_all_predictors(), and reset_predictor_group().
|
static |
Definition at line 568 of file aacdec.c.
Referenced by apply_prediction().
|
static |
Definition at line 552 of file aacdec.c.
Referenced by aac_decode_init().
|
static |
Set up channel positions based on a default channel configuration as specified in table 1.17.
new_che_pos | New channel position configuration - we only do something if it differs from the current one. |
Definition at line 360 of file aacdec.c.
Referenced by aac_decode_init(), decode_ga_specific_config(), and parse_adts_frame_header().
|
static |
Skip data_stream_element; reference: table 4.10.
Definition at line 675 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Convert spectral data to float samples, applying all supported tools as appropriate.
Definition at line 2047 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Update the LTP buffer for next frame.
Definition at line 1859 of file aacdec.c.
Referenced by spectral_to_sample().
|
inlinestatic |
Definition at line 990 of file aacdec.c.
Referenced by decode_spectrum_and_dequant().
|
inlinestatic |
Definition at line 1014 of file aacdec.c.
Referenced by decode_spectrum_and_dequant().
|
inlinestatic |
Definition at line 1001 of file aacdec.c.
Referenced by decode_spectrum_and_dequant().
|
inlinestatic |
Definition at line 1031 of file aacdec.c.
Referenced by decode_spectrum_and_dequant().
|
static |
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP.
Definition at line 1801 of file aacdec.c.
Referenced by apply_ltp().
|
static |
Definition at line 1538 of file aacdec.c.
Referenced by decode_cce().
AVCodec ff_aac_decoder |
AVCodec ff_aac_latm_decoder |
|
static |
Definition at line 115 of file aacdec.c.
Referenced by aac_decode_frame_int(), decode_band_types(), decode_pce(), and skip_data_stream_element().