Go to the documentation of this file.
62 #define FFT_FIXED_32 1
99 ps->
var0.mant = 0x20000000;
101 ps->
var1.mant = 0x20000000;
105 static const int exp2tab[4] = {
Q31(1.0000000000/2),
Q31(1.1892071150/2),
Q31(1.4142135624/2),
Q31(1.6817928305/2) };
109 dst[0] = (idx & 15) - 4;
110 dst[1] = (idx >> 4 & 15) - 4;
117 dst[0] = (idx & 3) - 1;
118 dst[1] = (idx >> 2 & 3) - 1;
119 dst[2] = (idx >> 4 & 3) - 1;
120 dst[3] = (idx >> 6 & 3) - 1;
125 static inline int *
DEC_UPAIR(
int *dst,
unsigned idx,
unsigned sign)
127 dst[0] = (idx & 15) * (1 - (sign & 0xFFFFFFFE));
128 dst[1] = (idx >> 4 & 15) * (1 - ((sign & 1) * 2));
133 static inline int *
DEC_UQUAD(
int *dst,
unsigned idx,
unsigned sign)
135 unsigned nz = idx >> 12;
137 dst[0] = (idx & 3) * (1 + (((
int)sign >> 31) * 2));
140 dst[1] = (idx >> 2 & 3) * (1 + (((
int)sign >> 31) * 2));
143 dst[2] = (idx >> 4 & 3) * (1 + (((
int)sign >> 31) * 2));
146 dst[3] = (idx >> 6 & 3) * (1 + (((
int)sign >> 31) * 2));
167 int ssign = scale < 0 ? -1 : 1;
184 }
else if (
s > -32) {
189 dst[
i] =
out * (unsigned)ssign;
204 while (band_energy > 0x7fff) {
209 s = 21 + nlz - (
s >> 2);
218 out = (
int)(((int64_t)coefs[
i] *
c) >> 32);
232 coefs[
i] = -(int64_t)coefs[
i] *
c * (1 << -
s);
245 tmp.mant = (
tmp.mant + 0x00200000
U) & 0xFFC00000U;
259 tmp.mant = (
tmp.mant + 0x001FFFFF
U + (
tmp.mant & 0x00400000
U >> 16)) & 0xFFC00000
U;
292 if (var0.
exp > 1 || (var0.
exp == 1 && var0.
mant > 0x20000000)) {
300 if (var1.exp > 1 || (var1.exp == 1 && var1.mant > 0x20000000)) {
315 *coef += (unsigned)((
pv.mant + (1 << (
shift - 1))) >>
shift);
317 *coef += (unsigned)
pv.mant << -
shift;
360 int *dest = target->
coeffs;
362 int g,
i, group, k, idx = 0;
365 "Dependent coupling is not supported together with LTP\n");
376 shift = (-gain-1024) >> 3;
380 shift = (gain-1024) >> 3;
385 }
else if (
shift < 0) {
389 for (group = 0; group < ics->
group_len[
g]; group++) {
390 for (k = offsets[
i]; k < offsets[
i + 1]; k++) {
391 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
392 (int64_t)0x1000000000) >> 37);
398 for (group = 0; group < ics->
group_len[
g]; group++) {
399 for (k = offsets[
i]; k < offsets[
i + 1]; k++) {
400 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
401 (int64_t)0x1000000000) >> 37);
402 dest[group * 128 + k] +=
tmp * (1
U <<
shift);
425 unsigned int *dest = target->
ret;
429 shift = (gain-1024) >> 3;
432 }
else if (
shift < 0) {
436 for (
i = 0;
i <
len;
i++) {
437 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
442 for (
i = 0;
i <
len;
i++) {
443 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
static void vector_pow43(int *coefs, int len)
static const uint64_t aac_channel_layout[16]
#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_always_inline SoftFloat flt16_even(SoftFloat pf)
static av_cold int init(AVCodecContext *avctx)
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 av_const SoftFloat av_sub_sf(SoftFloat a, SoftFloat b)
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
const AVProfile ff_aac_profiles[]
static int * DEC_SQUAD(int *dst, unsigned idx)
INTFLOAT * ret
PCM output.
static void apply_independent_coupling_fixed(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
static void apply_dependent_coupling_fixed(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
static av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b)
b has to be normalized and not zero.
IndividualChannelStream ics
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ ZERO_BT
Scalefactors and spectral data are all zero.
uint32_t ff_cbrt_tab_fixed[1<< 13]
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static av_always_inline void predict(PredictorState *ps, int *coef, int output_enable)
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...
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static void flush(AVCodecContext *avctx)
static av_cold int aac_decode_close(AVCodecContext *avctx)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
#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 av_always_inline void reset_predict_state(PredictorState *ps)
static void noise_scale(int *coefs, int scale, int band_energy, int len)
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
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static const int cce_scale_fixed[8]
Single Channel Element - used for both SCE and LFE elements.
#define i(width, name, range_min, range_max)
static av_always_inline av_const double round(double x)
#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
AVSampleFormat
Audio sample formats.
static av_const SoftFloat av_int2sf(int v, int frac_bits)
Converts a mantisse and exponent to a SoftFloat.
const char * name
Name of the codec implementation.
OutputConfiguration oc[2]
static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
static const int exp2tab[4]
AVCodec ff_aac_fixed_decoder
static av_const SoftFloat av_add_sf(SoftFloat a, SoftFloat b)
int sbr
-1 implicit, 1 presence
static int * DEC_UQUAD(int *dst, unsigned idx, unsigned sign)
static int shift(int a, int b)
static const int16_t alpha[]
uint8_t max_sfb
number of scalefactor bands per group
static av_always_inline SoftFloat flt16_round(SoftFloat pf)
static int * DEC_UPAIR(int *dst, unsigned idx, unsigned sign)
static int * DEC_SPAIR(int *dst, unsigned idx)
enum BandType band_type[128]
band types
static av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b)
static av_always_inline SoftFloat flt16_trunc(SoftFloat pf)
@ AOT_AAC_LTP
Y Long Term Prediction.