Go to the documentation of this file.
101 ps->
var0.mant = 0x20000000;
103 ps->
var1.mant = 0x20000000;
107 static const int exp2tab[4] = {
Q31(1.0000000000/2),
Q31(1.1892071150/2),
Q31(1.4142135624/2),
Q31(1.6817928305/2) };
111 dst[0] = (idx & 15) - 4;
112 dst[1] = (idx >> 4 & 15) - 4;
119 dst[0] = (idx & 3) - 1;
120 dst[1] = (idx >> 2 & 3) - 1;
121 dst[2] = (idx >> 4 & 3) - 1;
122 dst[3] = (idx >> 6 & 3) - 1;
127 static inline int *
DEC_UPAIR(
int *dst,
unsigned idx,
unsigned sign)
129 dst[0] = (idx & 15) * (1 - (sign & 0xFFFFFFFE));
130 dst[1] = (idx >> 4 & 15) * (1 - ((sign & 1) * 2));
135 static inline int *
DEC_UQUAD(
int *dst,
unsigned idx,
unsigned sign)
137 unsigned nz = idx >> 12;
139 dst[0] = (idx & 3) * (1 + (((
int)sign >> 31) * 2));
142 dst[1] = (idx >> 2 & 3) * (1 + (((
int)sign >> 31) * 2));
145 dst[2] = (idx >> 4 & 3) * (1 + (((
int)sign >> 31) * 2));
148 dst[3] = (idx >> 6 & 3) * (1 + (((
int)sign >> 31) * 2));
169 int ssign =
scale < 0 ? -1 : 1;
186 }
else if (
s > -32) {
191 dst[
i] =
out * (unsigned)ssign;
206 while (band_energy > 0x7fff) {
211 s = 21 + nlz - (
s >> 2);
220 out = (
int)(((int64_t)coefs[
i] *
c) >> 32);
234 coefs[
i] = -(int64_t)coefs[
i] *
c * (1 << -
s);
247 tmp.mant = (
tmp.mant + 0x00200000
U) & 0xFFC00000U;
261 tmp.mant = (
tmp.mant + 0x001FFFFF
U + (
tmp.mant & 0x00400000
U >> 16)) & 0xFFC00000
U;
294 if (var0.
exp > 1 || (var0.
exp == 1 && var0.
mant > 0x20000000)) {
302 if (var1.exp > 1 || (var1.exp == 1 && var1.mant > 0x20000000)) {
317 *coef += (unsigned)((
pv.mant + (1 << (
shift - 1))) >>
shift);
319 *coef += (unsigned)
pv.mant << -
shift;
362 int *dest = target->
coeffs;
364 int g,
i, group, k, idx = 0;
367 "Dependent coupling is not supported together with LTP\n");
378 shift = (-gain-1024) >> 3;
382 shift = (gain-1024) >> 3;
387 }
else if (
shift < 0) {
391 for (group = 0; group < ics->
group_len[
g]; group++) {
393 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
394 (int64_t)0x1000000000) >> 37);
400 for (group = 0; group < ics->
group_len[
g]; group++) {
402 tmp = (
int)(((int64_t)
src[group * 128 + k] *
c + \
403 (int64_t)0x1000000000) >> 37);
404 dest[group * 128 + k] +=
tmp * (1
U <<
shift);
427 unsigned int *dest = target->
ret;
431 shift = (gain-1024) >> 3;
434 }
else if (
shift < 0) {
438 for (
i = 0;
i <
len;
i++) {
439 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
444 for (
i = 0;
i <
len;
i++) {
445 tmp = (
int)(((int64_t)
src[
i] *
c + (int64_t)0x1000000000) >> 37);
454 .
p.
name =
"aac_fixed",
467 #if FF_API_OLD_CHANNEL_LAYOUT
468 .p.channel_layouts = aac_channel_layout,
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 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)
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
static const int offsets[]
#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 const AVChannelLayout aac_ch_layout[16]
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)
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
#define DECLARE_ALIGNED(n, t, v)
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)
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.
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
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)
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.