FFmpeg
|
#include "config_components.h"
#include <limits.h>
#include <stddef.h>
#include "aacdec.h"
#include "aacdec_tab.h"
#include "aacdec_usac.h"
#include "libavcodec/aac.h"
#include "libavcodec/aac_defines.h"
#include "libavcodec/aacsbr.h"
#include "libavcodec/aactab.h"
#include "libavcodec/adts_header.h"
#include "libavcodec/avcodec.h"
#include "libavcodec/internal.h"
#include "libavcodec/codec_internal.h"
#include "libavcodec/decode.h"
#include "libavcodec/profiles.h"
#include "libavutil/attributes.h"
#include "libavutil/error.h"
#include "libavutil/log.h"
#include "libavutil/macros.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/tx.h"
#include "libavutil/version.h"
Go to the source code of this file.
Data Structures | |
struct | elem_to_channel |
Macros | |
#define | USE_FIXED 1 |
#define | overread_err "Input buffer exhausted before END element found\n" |
#define | MDCT_INIT(s, fn, len, sval) |
#define | AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM |
#define | OFF(field) offsetof(AACDecContext, field) |
Functions | |
static int | count_channels (uint8_t(*layout)[3], int tags) |
static av_cold int | che_configure (AACDecContext *ac, enum ChannelPosition che_pos, int type, int id, int *channels) |
Check for the channel element in the current channel position configuration. More... | |
static int | frame_configure_elements (AVCodecContext *avctx) |
static int | assign_pair (struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], int offset, uint64_t left, uint64_t right, int pos, uint64_t *layout) |
static int | count_paired_channels (uint8_t(*layout_map)[3], int tags, int pos, int current) |
static int | assign_channels (struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], uint64_t *layout, int tags, int layer, int pos, int *current) |
static uint64_t | sniff_channel_order (uint8_t(*layout_map)[3], int tags) |
static int | push_output_configuration (AACDecContext *ac) |
Save current output configuration if and only if it has been locked. More... | |
static void | pop_output_configuration (AACDecContext *ac) |
Restore the previous output configuration if and only if the current configuration is unlocked. More... | |
int | ff_aac_output_configure (AACDecContext *ac, uint8_t layout_map[MAX_ELEM_ID *4][3], int tags, enum OCStatus oc_type, int get_new_frame) |
Configure output channel order based on the current program configuration element. More... | |
static av_cold void | flush (AVCodecContext *avctx) |
int | ff_aac_set_default_channel_config (AACDecContext *ac, AVCodecContext *avctx, uint8_t(*layout_map)[3], int *tags, int channel_config) |
Set up channel positions based on a default channel configuration as specified in table 1.17. More... | |
ChannelElement * | ff_aac_get_che (AACDecContext *ac, int type, int elem_id) |
static void | decode_channel_map (uint8_t layout_map[][3], 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 void | relative_align_get_bits (GetBitContext *gb, int reference_position) |
static int | decode_pce (AVCodecContext *avctx, MPEG4AudioConfig *m4ac, uint8_t(*layout_map)[3], GetBitContext *gb, int byte_align_ref) |
Decode program configuration element; reference: table 4.2. More... | |
static int | decode_ga_specific_config (AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, int get_bit_alignment, MPEG4AudioConfig *m4ac, int channel_config) |
Decode GA "General Audio" specific configuration; reference: table 4.1. More... | |
static int | decode_eld_specific_config (AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config) |
static int | decode_audio_specific_config_gb (AACDecContext *ac, AVCodecContext *avctx, OutputConfiguration *oc, GetBitContext *gb, int get_bit_alignment, int sync_extension) |
Decode audio specific configuration; reference: table 1.13. More... | |
static int | decode_audio_specific_config (AACDecContext *ac, AVCodecContext *avctx, OutputConfiguration *oc, const uint8_t *data, int64_t bit_size, int sync_extension) |
static av_cold int | decode_close (AVCodecContext *avctx) |
static av_cold int | init_dsp (AVCodecContext *avctx) |
av_cold int | ff_aac_decode_init (AVCodecContext *avctx) |
static int | skip_data_stream_element (AACDecContext *ac, GetBitContext *gb) |
Skip data_stream_element; reference: table 4.10. More... | |
static int | decode_prediction (AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb) |
static void | decode_ltp (AACDecContext *ac, LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb) |
Decode Long Term Prediction data; reference: table 4.xx. More... | |
static int | decode_ics_info (AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb) |
Decode Individual Channel Stream info; reference: table 4.6. More... | |
static int | decode_band_types (AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb) |
Decode band types (section_data payload); reference: table 4.46. More... | |
static int | decode_scalefactors (AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, unsigned int global_gain) |
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... | |
int | ff_aac_decode_tns (AACDecContext *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 void | decode_gain_control (SingleChannelElement *sce, GetBitContext *gb) |
int | ff_aac_decode_ics (AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, int common_window, int scale_flag) |
Decode an individual_channel_stream payload; reference: table 4.44. More... | |
static int | decode_cpe (AACDecContext *ac, GetBitContext *gb, ChannelElement *cpe) |
Decode a channel_pair_element; reference: table 4.4. 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) |
Decode dynamic range information; reference: table 4.52. More... | |
static int | decode_fill (AACDecContext *ac, GetBitContext *gb, int len) |
static int | decode_extension_payload (AACDecContext *ac, GetBitContext *gb, int cnt, ChannelElement *che, enum RawDataBlockType elem_type) |
Decode extension data (incomplete); reference: table 4.51. More... | |
static void | apply_channel_coupling (AACDecContext *ac, ChannelElement *cc, enum RawDataBlockType type, int elem_id, enum CouplingPoint coupling_point, void(*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)) |
channel coupling transformation interface More... | |
static void | spectral_to_sample (AACDecContext *ac, int samples) |
Convert spectral data to samples, applying all supported tools as appropriate. More... | |
static int | parse_adts_frame_header (AACDecContext *ac, GetBitContext *gb) |
static int | aac_decode_er_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb) |
static int | decode_frame_ga (AVCodecContext *avctx, AACDecContext *ac, GetBitContext *gb, int *got_frame_ptr) |
static int | aac_decode_frame_int (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb, const AVPacket *avpkt) |
static int | aac_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) |
Variables | |
static const AVOption | options [] |
static const AVClass | decoder_class |
#define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM |
#define OFF | ( | field | ) | offsetof(AACDecContext, field) |
|
static |
Definition at line 117 of file aacdec.c.
Referenced by decode_ga_specific_config().
|
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 FFmpeg 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 141 of file aacdec.c.
Referenced by ff_aac_output_configure().
|
static |
Definition at line 174 of file aacdec.c.
Referenced by aac_decode_er_frame(), aac_decode_frame_int(), and ff_aac_output_configure().
|
static |
Definition at line 215 of file aacdec.c.
Referenced by assign_channels().
|
static |
Definition at line 253 of file aacdec.c.
Referenced by assign_channels().
|
static |
Definition at line 285 of file aacdec.c.
Referenced by sniff_channel_order().
|
static |
Definition at line 363 of file aacdec.c.
Referenced by ff_aac_output_configure().
|
static |
Save current output configuration if and only if it has been locked.
Definition at line 427 of file aacdec.c.
Referenced by decode_frame_ga(), ff_aac_get_che(), latm_decode_frame(), and parse_adts_frame_header().
|
static |
Restore the previous output configuration if and only if the current configuration is unlocked.
Definition at line 443 of file aacdec.c.
Referenced by aac_decode_frame_int(), decode_frame_ga(), and latm_decode_frame().
int ff_aac_output_configure | ( | AACDecContext * | ac, |
uint8_t | layout_map[MAX_ELEM_ID *4][3], | ||
int | tags, | ||
enum OCStatus | oc_type, | ||
int | get_new_frame | ||
) |
Configure output channel order based on the current program configuration element.
Definition at line 459 of file aacdec.c.
Referenced by decode_eld_specific_config(), decode_extension_payload(), decode_frame_ga(), decode_ga_specific_config(), ff_aac_decode_init(), ff_aac_get_che(), ff_aac_usac_config_decode(), ff_aac_usac_decode_frame(), parse_adts_frame_header(), and pop_output_configuration().
|
static |
int ff_aac_set_default_channel_config | ( | AACDecContext * | ac, |
AVCodecContext * | avctx, | ||
uint8_t(*) | layout_map[3], | ||
int * | tags, | ||
int | channel_config | ||
) |
Set up channel positions based on a default channel configuration as specified in table 1.17.
Definition at line 552 of file aacdec.c.
Referenced by decode_eld_specific_config(), decode_ga_specific_config(), ff_aac_decode_init(), ff_aac_get_che(), ff_aac_usac_config_decode(), and parse_adts_frame_header().
ChannelElement* ff_aac_get_che | ( | AACDecContext * | ac, |
int | type, | ||
int | elem_id | ||
) |
Definition at line 592 of file aacdec.c.
Referenced by aac_decode_er_frame(), decode_frame_ga(), ff_aac_usac_decode_frame(), and ff_aac_usac_reset_state().
|
static |
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
type | speaker type/position for these channels |
Definition at line 738 of file aacdec.c.
Referenced by decode_pce().
|
inlinestatic |
Definition at line 768 of file aacdec.c.
Referenced by decode_pce().
|
static |
Decode program configuration element; reference: table 4.2.
Definition at line 780 of file aacdec.c.
Referenced by decode_frame_ga(), and decode_ga_specific_config().
|
static |
Decode GA "General Audio" specific configuration; reference: table 4.1.
ac | pointer to AACDecContext, may be null |
avctx | pointer to AVCCodecContext, used for logging |
Definition at line 850 of file aacdec.c.
Referenced by decode_audio_specific_config_gb().
|
static |
Definition at line 931 of file aacdec.c.
Referenced by decode_audio_specific_config_gb().
|
static |
Decode audio specific configuration; reference: table 1.13.
ac | pointer to AACDecContext, may be null |
avctx | pointer to AVCCodecContext, used for logging |
m4ac | pointer to MPEG4AudioConfig, used for parsing |
gb | buffer holding an audio specific config |
get_bit_alignment | relative alignment for byte align operations |
sync_extension | look for an appended sync extension |
Definition at line 1000 of file aacdec.c.
Referenced by decode_audio_specific_config(), and latm_decode_audio_specific_config().
|
static |
Definition at line 1075 of file aacdec.c.
Referenced by aac_decode_frame(), ff_aac_decode_init(), and latm_decode_frame().
|
static |
|
static |
Definition at line 1142 of file aacdec.c.
Referenced by ff_aac_decode_init().
av_cold int ff_aac_decode_init | ( | AVCodecContext * | avctx | ) |
Definition at line 1177 of file aacdec.c.
Referenced by ff_aac_decode_init_fixed(), and ff_aac_decode_init_float().
|
static |
Skip data_stream_element; reference: table 4.10.
Definition at line 1240 of file aacdec.c.
Referenced by decode_frame_ga().
|
static |
Definition at line 1257 of file aacdec.c.
Referenced by decode_ics_info().
|
static |
Decode Long Term Prediction data; reference: table 4.xx.
Definition at line 1279 of file aacdec.c.
Referenced by decode_cpe(), and decode_ics_info().
|
static |
Decode Individual Channel Stream info; reference: table 4.6.
Definition at line 1297 of file aacdec.c.
Referenced by decode_cpe(), and ff_aac_decode_ics().
|
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 1424 of file aacdec.c.
Referenced by ff_aac_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 1471 of file aacdec.c.
Referenced by ff_aac_decode_ics().
|
static |
Decode pulse data; reference: table 4.7.
Definition at line 1530 of file aacdec.c.
Referenced by ff_aac_decode_ics().
int ff_aac_decode_tns | ( | AACDecContext * | ac, |
TemporalNoiseShaping * | tns, | ||
GetBitContext * | gb, | ||
const IndividualChannelStream * | ics | ||
) |
Decode Temporal Noise Shaping data; reference: table 4.48.
Definition at line 1557 of file aacdec.c.
Referenced by decode_usac_core_coder(), decode_usac_stereo_info(), and ff_aac_decode_ics().
|
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 1615 of file aacdec.c.
Referenced by decode_cpe().
|
static |
Definition at line 1629 of file aacdec.c.
Referenced by ff_aac_decode_ics().
int ff_aac_decode_ics | ( | AACDecContext * | ac, |
SingleChannelElement * | sce, | ||
GetBitContext * | gb, | ||
int | common_window, | ||
int | scale_flag | ||
) |
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 1664 of file aacdec.c.
Referenced by aac_decode_er_frame(), decode_cce(), decode_cpe(), and decode_frame_ga().
|
static |
Decode a channel_pair_element; reference: table 4.4.
Definition at line 1757 of file aacdec.c.
Referenced by aac_decode_er_frame(), and decode_frame_ga().
|
static |
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4.53.
Definition at line 1803 of file aacdec.c.
Referenced by decode_dynamic_range().
|
static |
Decode dynamic range information; reference: table 4.52.
Definition at line 1822 of file aacdec.c.
Referenced by decode_extension_payload().
|
static |
Definition at line 1869 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 1902 of file aacdec.c.
Referenced by decode_frame_ga().
|
static |
channel coupling transformation interface
apply_coupling_method | pointer to (in)dependent coupling function |
Definition at line 1973 of file aacdec.c.
Referenced by spectral_to_sample().
|
static |
Convert spectral data to samples, applying all supported tools as appropriate.
Definition at line 2006 of file aacdec.c.
Referenced by aac_decode_er_frame(), and decode_frame_ga().
|
static |
dual mono frames in Japanese DTV can have chan_config 0 WITHOUT specifying PCE. thus, set dual mono as default.
Definition at line 2071 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Definition at line 2133 of file aacdec.c.
Referenced by aac_decode_frame(), and latm_decode_frame().
|
static |
Definition at line 2206 of file aacdec.c.
Referenced by aac_decode_frame_int().
|
static |
Definition at line 2381 of file aacdec.c.
Referenced by aac_decode_frame(), and latm_decode_frame().
|
static |
|
static |