Go to the documentation of this file.
87 static inline float *
VMUL2(
float *dst,
const float *v,
unsigned idx,
91 *dst++ = v[idx & 15] *
s;
92 *dst++ = v[idx>>4 & 15] *
s;
98 static inline float *
VMUL4(
float *dst,
const float *v,
unsigned idx,
102 *dst++ = v[idx & 3] *
s;
103 *dst++ = v[idx>>2 & 3] *
s;
104 *dst++ = v[idx>>4 & 3] *
s;
105 *dst++ = v[idx>>6 & 3] *
s;
111 static inline float *
VMUL2S(
float *dst,
const float *v,
unsigned idx,
112 unsigned sign,
const float *
scale)
117 s0.i ^= sign >> 1 << 31;
120 *dst++ = v[idx & 15] *
s0.f;
121 *dst++ = v[idx>>4 & 15] *
s1.f;
128 static inline float *
VMUL4S(
float *dst,
const float *v,
unsigned idx,
129 unsigned sign,
const float *
scale)
131 unsigned nz = idx >> 12;
135 t.
i =
s.i ^ (sign & 1
U<<31);
136 *dst++ = v[idx & 3] * t.
f;
138 sign <<= nz & 1; nz >>= 1;
139 t.
i =
s.i ^ (sign & 1
U<<31);
140 *dst++ = v[idx>>2 & 3] * t.
f;
142 sign <<= nz & 1; nz >>= 1;
143 t.
i =
s.i ^ (sign & 1
U<<31);
144 *dst++ = v[idx>>4 & 3] * t.
f;
147 t.
i =
s.i ^ (sign & 1
U<<31);
148 *dst++ = v[idx>>6 & 3] * t.
f;
158 tmp.i = (
tmp.i + 0x00008000
U) & 0xFFFF0000U;
166 tmp.i = (
tmp.i + 0x00007FFF
U + (
tmp.i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
174 pun.
i &= 0xFFFF0000
U;
181 const float a = 0.953125;
182 const float alpha = 0.90625;
186 float r0 = ps->
r0, r1 = ps->
r1;
187 float cor0 = ps->
cor0, cor1 = ps->
cor1;
188 float var0 = ps->
var0, var1 = ps->
var1;
220 float *dest = target->
coeffs;
222 int g,
i, group, k, idx = 0;
225 "Dependent coupling is not supported together with LTP\n");
232 for (group = 0; group < ics->
group_len[
g]; group++) {
235 dest[group * 128 + k] += gain *
src[group * 128 + k];
256 float *dest = target->
ret;
264 #define LOAS_SYNC_WORD 0x2b7
291 int sync_extension = 0;
292 int bits_consumed, esize,
i;
299 }
else if (asclen == 0) {
309 &gbc, config_start_bit,
312 if (bits_consumed < config_start_bit)
314 bits_consumed -= config_start_bit;
317 asclen = bits_consumed;
330 esize = (asclen + 7) / 8;
341 for (
i = 0;
i < esize;
i++) {
357 if (audio_mux_version)
362 if (audio_mux_version)
382 if (!audio_mux_version) {
411 if (audio_mux_version) {
435 if (
ctx->frame_length_type == 0) {
436 int mux_slot_length = 0;
441 mux_slot_length +=
tmp;
442 }
while (
tmp == 255);
443 return mux_slot_length;
444 }
else if (
ctx->frame_length_type == 1) {
445 return ctx->frame_length;
446 }
else if (
ctx->frame_length_type == 3 ||
447 ctx->frame_length_type == 5 ||
448 ctx->frame_length_type == 7) {
458 uint8_t use_same_mux =
get_bits(gb, 1);
464 "no decoder config found\n");
469 if (mux_slot_length_bytes < 0 || mux_slot_length_bytes * 8LL >
get_bits_left(gb)) {
472 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
474 "frame length mismatch %d << %d\n",
484 int *got_frame_ptr,
AVPacket *avpkt)
499 if (muxlength > avpkt->
size)
503 return (err < 0) ? err : avpkt->
size;
523 "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 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 INTFLOAT aac_kbd_short_120[120]
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)
static av_always_inline float scale(float x, float s)
IndividualChannelStream ics
@ AOT_ER_AAC_LC
N Error Resilient Low Complexity.
const AVCodec ff_aac_decoder
#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 const int offsets[]
#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() or get_encode_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 INTFLOAT sine_120[120]
static INTFLOAT sine_960[960]
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
const AVCodec ff_aac_latm_decoder
#define AV_LOG_INFO
Standard information.
static INTFLOAT aac_kbd_long_960[960]
#define DECLARE_ALIGNED(n, t, v)
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 aac_decode_frame_int(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb, const AVPacket *avpkt)
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)