Go to the documentation of this file.
36 #define FFT_FIXED_32 0
83 static inline float *
VMUL2(
float *dst,
const float *v,
unsigned idx,
87 *dst++ = v[idx & 15] *
s;
88 *dst++ = v[idx>>4 & 15] *
s;
94 static inline float *
VMUL4(
float *dst,
const float *v,
unsigned idx,
98 *dst++ = v[idx & 3] *
s;
99 *dst++ = v[idx>>2 & 3] *
s;
100 *dst++ = v[idx>>4 & 3] *
s;
101 *dst++ = v[idx>>6 & 3] *
s;
107 static inline float *
VMUL2S(
float *dst,
const float *v,
unsigned idx,
108 unsigned sign,
const float *scale)
112 s0.f =
s1.f = *scale;
113 s0.i ^= sign >> 1 << 31;
116 *dst++ = v[idx & 15] *
s0.f;
117 *dst++ = v[idx>>4 & 15] *
s1.f;
124 static inline float *
VMUL4S(
float *dst,
const float *v,
unsigned idx,
125 unsigned sign,
const float *scale)
127 unsigned nz = idx >> 12;
131 t.
i =
s.i ^ (sign & 1
U<<31);
132 *dst++ = v[idx & 3] * t.
f;
134 sign <<= nz & 1; nz >>= 1;
135 t.
i =
s.i ^ (sign & 1
U<<31);
136 *dst++ = v[idx>>2 & 3] * t.
f;
138 sign <<= nz & 1; nz >>= 1;
139 t.
i =
s.i ^ (sign & 1
U<<31);
140 *dst++ = v[idx>>4 & 3] * t.
f;
143 t.
i =
s.i ^ (sign & 1
U<<31);
144 *dst++ = v[idx>>6 & 3] * t.
f;
154 tmp.i = (
tmp.i + 0x00008000
U) & 0xFFFF0000U;
162 tmp.i = (
tmp.i + 0x00007FFF
U + (
tmp.i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
170 pun.
i &= 0xFFFF0000
U;
177 const float a = 0.953125;
178 const float alpha = 0.90625;
182 float r0 = ps->
r0, r1 = ps->
r1;
183 float cor0 = ps->
cor0, cor1 = ps->
cor1;
184 float var0 = ps->
var0, var1 = ps->
var1;
216 float *dest = target->
coeffs;
218 int g,
i, group, k, idx = 0;
221 "Dependent coupling is not supported together with LTP\n");
228 for (group = 0; group < ics->
group_len[
g]; group++) {
229 for (k = offsets[
i]; k < offsets[
i + 1]; k++) {
231 dest[group * 128 + k] += gain *
src[group * 128 + k];
252 float *dest = target->
ret;
260 #define LOAS_SYNC_WORD 0x2b7
287 int sync_extension = 0;
288 int bits_consumed, esize,
i;
295 }
else if (asclen == 0) {
305 &gbc, config_start_bit,
308 if (bits_consumed < config_start_bit)
310 bits_consumed -= config_start_bit;
313 asclen = bits_consumed;
326 esize = (asclen + 7) / 8;
337 for (
i = 0;
i < esize;
i++) {
353 if (audio_mux_version)
358 if (audio_mux_version)
378 if (!audio_mux_version) {
407 if (audio_mux_version) {
431 if (
ctx->frame_length_type == 0) {
432 int mux_slot_length = 0;
437 mux_slot_length +=
tmp;
438 }
while (
tmp == 255);
439 return mux_slot_length;
440 }
else if (
ctx->frame_length_type == 1) {
441 return ctx->frame_length;
442 }
else if (
ctx->frame_length_type == 3 ||
443 ctx->frame_length_type == 5 ||
444 ctx->frame_length_type == 7) {
460 "no decoder config found\n");
465 if (mux_slot_length_bytes < 0 || mux_slot_length_bytes * 8LL >
get_bits_left(gb)) {
468 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
470 "frame length mismatch %d << %d\n",
480 int *got_frame_ptr,
AVPacket *avpkt)
495 if (muxlength > avpkt->
size)
499 return (err < 0) ? err : avpkt->
size;
519 "ADTS header detected, probably as result of configuration "
static const uint64_t aac_channel_layout[16]
@ AV_SAMPLE_FMT_FLTP
float, planar
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
int frame_length_type
0/1 variable/fixed frame length
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
static av_cold int init(AVCodecContext *avctx)
static int get_bits_left(GetBitContext *gb)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static int aac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static enum AVSampleFormat sample_fmts[]
static av_cold int aac_decode_init(AVCodecContext *avctx)
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static int get_bits_count(const GetBitContext *s)
static void apply_dependent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
AACContext aac_ctx
containing AACContext
@ AOT_ER_AAC_LTP
N Error Resilient Long Term Prediction.
const AVProfile ff_aac_profiles[]
static void pop_output_configuration(AACContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked.
INTFLOAT * ret
PCM output.
static int latm_decode_audio_specific_config(struct LATMContext *latmctx, GetBitContext *gb, int asclen)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int latm_decode_init(AVCodecContext *avctx)
static int read_audio_mux_element(struct LATMContext *latmctx, GetBitContext *gb)
static float * VMUL2(float *dst, const float *v, unsigned idx, const float *scale)
IndividualChannelStream ics
@ AOT_ER_AAC_LC
N Error Resilient Low Complexity.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ ZERO_BT
Scalefactors and spectral data are all zero.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
@ AOT_ER_AAC_LD
N Error Resilient Low Delay.
static const AVClass aac_decoder_class
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
static av_always_inline void reset_predict_state(PredictorState *ps)
static int aac_decode_frame_int(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb, AVPacket *avpkt)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int frame_length
frame length for fixed frame length
static int aac_decode_er_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb)
Individual Channel Stream.
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
static void flush(AVCodecContext *avctx)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static av_cold int aac_decode_close(AVCodecContext *avctx)
static av_always_inline float flt16_trunc(float pf)
static av_always_inline float flt16_even(float pf)
int initialized
initialized after a valid extradata was seen
static int decode_audio_specific_config(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int64_t bit_size, int sync_extension)
static av_always_inline float flt16_round(float pf)
static float * VMUL2S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
static float * VMUL4(float *dst, const float *v, unsigned idx, const float *scale)
static float * VMUL4S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
static int decode_audio_specific_config_gb(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, GetBitContext *gb, int get_bit_alignment, int sync_extension)
Decode audio specific configuration; reference: table 1.13.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
SingleChannelElement ch[2]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static int push_output_configuration(AACContext *ac)
Save current output configuration if and only if it has been locked.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
#define AV_LOG_INFO
Standard information.
Single Channel Element - used for both SCE and LFE elements.
#define i(width, name, range_min, range_max)
void(* vector_fmac_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float and add to destination vector.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
channel element - generic struct for SCE/CPE/CCE/LFE
@ AOT_ER_AAC_ELD
N Error Resilient Enhanced Low Delay.
static void apply_independent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
static av_always_inline void predict(PredictorState *ps, float *coef, int output_enable)
AVSampleFormat
Audio sample formats.
const char * name
Name of the codec implementation.
OutputConfiguration oc[2]
#define AV_INPUT_BUFFER_PADDING_SIZE
int audio_mux_version_A
LATM syntax version.
main external API structure.
int sbr
-1 implicit, 1 presence
static int read_stream_mux_config(struct LATMContext *latmctx, GetBitContext *gb)
#define avpriv_request_sample(...)
#define LOAS_SYNC_WORD
11 bits LOAS sync word
static const int16_t alpha[]
This structure stores compressed data.
static uint32_t latm_get_value(GetBitContext *b)
uint8_t max_sfb
number of scalefactor bands per group
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int read_payload_length_info(struct LATMContext *ctx, GetBitContext *gb)
enum BandType band_type[128]
band types
@ AOT_AAC_LTP
Y Long Term Prediction.
static int latm_decode_frame(AVCodecContext *avctx, void *out, int *got_frame_ptr, AVPacket *avpkt)
AVCodec ff_aac_latm_decoder