Go to the documentation of this file.
62 #define TX_TYPE AV_TX_INT32_MDCT
102 ps->
var0.mant = 0x20000000;
104 ps->
var1.mant = 0x20000000;
108 static const int exp2tab[4] = {
Q31(1.0000000000/2),
Q31(1.1892071150/2),
Q31(1.4142135624/2),
Q31(1.6817928305/2) };
112 dst[0] = (idx & 15) - 4;
113 dst[1] = (idx >> 4 & 15) - 4;
120 dst[0] = (idx & 3) - 1;
121 dst[1] = (idx >> 2 & 3) - 1;
122 dst[2] = (idx >> 4 & 3) - 1;
123 dst[3] = (idx >> 6 & 3) - 1;
128 static inline int *
DEC_UPAIR(
int *dst,
unsigned idx,
unsigned sign)
130 dst[0] = (idx & 15) * (1 - (sign & 0xFFFFFFFE));
131 dst[1] = (idx >> 4 & 15) * (1 - ((sign & 1) * 2));
136 static inline int *
DEC_UQUAD(
int *dst,
unsigned idx,
unsigned sign)
138 unsigned nz = idx >> 12;
140 dst[0] = (idx & 3) * (1 + (((
int)sign >> 31) * 2));
143 dst[1] = (idx >> 2 & 3) * (1 + (((
int)sign >> 31) * 2));
146 dst[2] = (idx >> 4 & 3) * (1 + (((
int)sign >> 31) * 2));
149 dst[3] = (idx >> 6 & 3) * (1 + (((
int)sign >> 31) * 2));
170 int ssign =
scale < 0 ? -1 : 1;
187 }
else if (
s > -32) {
192 dst[
i] =
out * (unsigned)ssign;
207 while (band_energy > 0x7fff) {
212 s = 21 + nlz - (
s >> 2);
221 out = (
int)(((int64_t)coefs[
i] *
c) >> 32);
235 coefs[
i] = -(int64_t)coefs[
i] *
c * (1 << -
s);
248 tmp.mant = (
tmp.mant + 0x00200000
U) & 0xFFC00000U;
262 tmp.mant = (
tmp.mant + 0x001FFFFF
U + (
tmp.mant & 0x00400000
U >> 16)) & 0xFFC00000
U;
295 if (var0.
exp > 1 || (var0.
exp == 1 && var0.
mant > 0x20000000)) {
303 if (var1.exp > 1 || (var1.exp == 1 && var1.mant > 0x20000000)) {
318 *coef += (unsigned)((
pv.mant + (1 << (
shift - 1))) >>
shift);
320 *coef += (unsigned)
pv.mant << -
shift;
363 int *dest = target->
coeffs;
365 int g,
i, group, k, idx = 0;
368 "Dependent coupling is not supported together with LTP\n");
379 shift = (-gain-1024) >> 3;
383 shift = (gain-1024) >> 3;
388 }
else if (
shift < 0) {
392 for (group = 0; group < ics->
group_len[
g]; group++) {
394 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
395 (int64_t)0x1000000000) >> 37);
401 for (group = 0; group < ics->
group_len[
g]; group++) {
403 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
404 (int64_t)0x1000000000) >> 37);
405 dest[group * 128 + k] +=
tmp * (1
U <<
shift);
428 unsigned int *dest = target->
ret;
432 shift = (gain-1024) >> 3;
435 }
else if (
shift < 0) {
439 for (
i = 0;
i <
len;
i++) {
440 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
445 for (
i = 0;
i <
len;
i++) {
446 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
455 .
p.
name =
"aac_fixed",
static void vector_pow43(int *coefs, int len)
static av_always_inline SoftFloat flt16_even(SoftFloat pf)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
static av_cold int aac_decode_init(AVCodecContext *avctx)
static INTFLOAT aac_kbd_short_120[120]
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).
AVCodec p
The public AVCodec.
static av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b)
b has to be normalized and not zero.
static av_always_inline float scale(float x, float s)
IndividualChannelStream ics
static int aac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
#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]
#define FF_CODEC_DECODE_CB(func)
static const AVClass aac_decoder_class
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
static const int offsets[]
static const AVChannelLayout aac_ch_layout[]
int(* init)(AVBSFContext *ctx)
#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 CODEC_LONG_NAME(str)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
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() 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 av_always_inline void reset_predict_state(PredictorState *ps)
#define DECLARE_ALIGNED(n, t, v)
static int shift(int a, int b)
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 INTFLOAT aac_kbd_long_960[960]
static const int cce_scale_fixed[8]
#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array)
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)
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]
const FFCodec ff_aac_fixed_decoder
static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
static const int exp2tab[4]
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)
void(* flush)(AVBSFContext *ctx)
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.