Go to the documentation of this file.
101 enum OCStatus oc_type,
int get_new_frame);
103 #define overread_err "Input buffer exhausted before END element found\n"
108 for (
i = 0;
i < tags;
i++) {
111 sum += (1 + (syn_ele ==
TYPE_CPE)) *
205 uint8_t (*layout_map)[3],
int offset, uint64_t
left,
206 uint64_t right,
int pos, uint64_t *
layout)
210 .av_position =
left | right,
212 .elem_id = layout_map[
offset][1],
215 if (e2c_vec[
offset].av_position != UINT64_MAX)
223 .elem_id = layout_map[
offset][1],
227 .av_position = right,
229 .elem_id = layout_map[
offset + 1][1],
232 if (
left != UINT64_MAX)
235 if (right != UINT64_MAX)
245 int num_pos_channels = 0;
249 for (
i = current;
i < tags;
i++) {
250 if (layout_map[
i][2] !=
pos)
260 num_pos_channels += 2;
271 return num_pos_channels;
275 uint64_t *
layout,
int tags,
int layer,
int pos,
int *current)
277 int i = *current, j = 0;
280 if (nb_channels < 0 || nb_channels > 5)
284 while (nb_channels) {
289 .syn_ele = layout_map[
i][0],
290 .elem_id = layout_map[
i][1],
293 *
layout |= e2c_vec[
i].av_position;
303 while (nb_channels & 1) {
310 .syn_ele = layout_map[
i][0],
311 .elem_id = layout_map[
i][1],
314 *
layout |= e2c_vec[
i].av_position;
320 while (nb_channels >= 2) {
331 while (nb_channels & 1) {
336 .syn_ele = layout_map[
i][0],
337 .elem_id = layout_map[
i][1],
340 *
layout |= e2c_vec[
i].av_position;
354 int i, n, total_non_cc_elements;
361 for (n = 0,
i = 0; n < 3 &&
i < tags; n++) {
376 total_non_cc_elements = n =
i;
394 for (
i = 1;
i < n;
i++)
404 for (
i = 0;
i < total_non_cc_elements;
i++) {
421 ac->
oc[0] = ac->
oc[1];
435 ac->
oc[1] = ac->
oc[0];
450 enum OCStatus oc_type,
int get_new_frame)
456 uint8_t type_counts[
TYPE_END] = { 0 };
459 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
462 for (
i = 0;
i < tags;
i++) {
463 int type = layout_map[
i][0];
464 int id = layout_map[
i][1];
475 for (
i = 0;
i < tags;
i++) {
476 int type = layout_map[
i][0];
477 int id = layout_map[
i][1];
478 int iid = id_map[
type][
id];
479 int position = layout_map[
i][2];
523 for (j = 0; j <= 1; j++) {
538 uint8_t (*layout_map)[3],
542 if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
543 channel_config > 14) {
545 "invalid default channel configuration (%d)\n",
551 *tags *
sizeof(*layout_map));
569 " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
594 &layout_map_tags, 2) < 0)
613 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
615 layout_map[0][1] = 0;
616 layout_map[1][1] = 1;
661 "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
683 "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
748 layout_map[0][2] =
type;
754 int reference_position) {
766 uint8_t (*layout_map)[3],
769 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
779 "Sample rate index in program config element does not "
780 "match the sample rate index configured by the container.\n");
797 if (
get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
837 int get_bit_alignment,
841 int extension_flag,
ret, ep_config, res_flags;
861 if (channel_config == 0) {
863 tags =
decode_pce(avctx, m4ac, layout_map, gb, get_bit_alignment);
868 &tags, channel_config)))
874 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
880 if (extension_flag) {
893 "AAC data resilience (flags %x)",
909 "epConfig %d", ep_config);
921 int ret, ep_config, res_flags;
924 const int ELDEXT_TERM = 0;
933 "AAC data resilience (flags %x)",
944 while (
get_bits(gb, 4) != ELDEXT_TERM) {
958 &tags, channel_config)))
967 "epConfig %d", ep_config);
989 int get_bit_alignment,
1003 "invalid sampling rate index %d\n",
1011 "invalid low delay sampling rate index %d\n",
1037 "Audio object type %s%d",
1038 m4ac->
sbr == 1 ?
"SBR+" :
"",
1044 "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1055 const uint8_t *
data, int64_t bit_size,
1061 if (bit_size < 0 || bit_size > INT_MAX) {
1066 ff_dlog(avctx,
"audio specific config size %d\n", (
int)bit_size >> 3);
1067 for (
i = 0; i < bit_size >> 3;
i++)
1087 union {
unsigned u;
int s; } v = { previous_val * 1664525
u + 1013904223 };
1100 if (92017 <= rate)
return 0;
1101 else if (75132 <= rate)
return 1;
1102 else if (55426 <= rate)
return 2;
1103 else if (46009 <= rate)
return 3;
1104 else if (37566 <= rate)
return 4;
1105 else if (27713 <= rate)
return 5;
1106 else if (23004 <= rate)
return 6;
1107 else if (18783 <= rate)
return 7;
1108 else if (13856 <= rate)
return 8;
1109 else if (11502 <= rate)
return 9;
1110 else if (9391 <= rate)
return 10;
1181 int layout_map_tags;
1224 #define MDCT_INIT(s, fn, len, sval) \
1226 ret = av_tx_init(&s, &fn, TX_TYPE, 1, len, &scale, 0); \
1276 "Invalid Predictor Reset Group.\n");
1322 "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1335 for (
i = 0;
i < 7;
i++) {
1392 "Prediction is not allowed in AAC-LC.\n");
1397 "LTP in ER AAC LD not yet implemented.\n");
1409 "Number of scalefactor bands in group (%d) "
1410 "exceeds limit (%d).\n",
1437 while (k < ics->max_sfb) {
1438 uint8_t sect_end = k;
1440 int sect_band_type =
get_bits(gb, 4);
1441 if (sect_band_type == 12) {
1447 sect_end += sect_len_incr;
1452 if (sect_end > ics->
max_sfb) {
1454 "Number of bands (%d) exceeds limit (%d).\n",
1458 }
while (sect_len_incr == (1 <<
bits) - 1);
1459 for (; k < sect_end; k++) {
1460 band_type [idx] = sect_band_type;
1461 band_type_run_end[idx++] = sect_end;
1479 unsigned int global_gain,
1482 int band_type_run_end[120])
1490 int run_end = band_type_run_end[idx];
1491 if (band_type[idx] ==
ZERO_BT) {
1492 for (;
i < run_end;
i++, idx++)
1496 for (;
i < run_end;
i++, idx++) {
1499 if (
offset[2] != clipped_offset) {
1501 "If you heard an audible artifact, there may be a bug in the decoder. "
1502 "Clipped intensity stereo position (%d -> %d)",
1503 offset[2], clipped_offset);
1506 sf[idx] = 100 - clipped_offset;
1511 }
else if (band_type[idx] ==
NOISE_BT) {
1512 for (;
i < run_end;
i++, idx++) {
1513 if (noise_flag-- > 0)
1518 if (
offset[1] != clipped_offset) {
1520 "If you heard an audible artifact, there may be a bug in the decoder. "
1521 "Clipped noise gain (%d -> %d)",
1522 offset[1], clipped_offset);
1525 sf[idx] = -(100 + clipped_offset);
1531 for (;
i < run_end;
i++, idx++) {
1535 "Scalefactor (%d) out of range.\n",
offset[0]);
1554 const uint16_t *swb_offset,
int num_swb)
1559 if (pulse_swb >= num_swb)
1561 pulse->
pos[0] = swb_offset[pulse_swb];
1563 if (pulse->
pos[0] >= swb_offset[num_swb])
1568 if (pulse->
pos[
i] >= swb_offset[num_swb])
1583 int w,
filt,
i, coef_len, coef_res, coef_compress;
1596 "TNS filter order %d is greater than maximum %d.\n",
1604 coef_len = coef_res + 3 - coef_compress;
1605 tmp2_idx = 2 * coef_compress + coef_res;
1628 if (ms_present == 1) {
1629 for (idx = 0; idx < max_idx; idx++)
1631 }
else if (ms_present == 2) {
1650 int pulse_present,
const Pulse *pulse,
1654 int i, k,
g, idx = 0;
1667 const unsigned cbt_m1 = band_type[idx] - 1;
1673 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1674 memset(cfo, 0, off_len *
sizeof(*cfo));
1676 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1677 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1680 for (k = 0; k < off_len; k++) {
1685 band_energy = ac->
fdsp->scalarproduct_fixed(cfo, cfo, off_len);
1691 for (k = 0; k < off_len; k++) {
1708 switch (cbt_m1 >> 1) {
1710 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1724 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1731 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1744 nnz = cb_idx >> 8 & 15;
1757 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1771 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1779 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1792 nnz = cb_idx >> 8 & 15;
1793 sign = nnz ?
SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12) : 0;
1798 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1805 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1811 uint32_t *icf = (uint32_t *) cf;
1826 if (cb_idx == 0x0000) {
1837 for (j = 0; j < 2; j++) {
1872 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1873 *icf++ = (
bits & 1
U<<31) | v;
1892 if (pulse_present) {
1898 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
1902 ico = co + (co > 0 ? -ico : ico);
1904 coef_base[ pulse->
pos[
i] ] = ico;
1922 const unsigned cbt_m1 = band_type[idx] - 1;
1928 for (group = 0; group < (
int)g_len; group++, cfo+=128) {
1957 k < sce->ics.swb_offset[sfb + 1];
1974 static const uint8_t gain_mode[4][3] = {
1985 uint8_t max_band =
get_bits(gb, 2);
1986 for (bd = 0; bd < max_band; bd++) {
1987 for (wd = 0; wd < gain_mode[
mode][0]; wd++) {
1988 uint8_t adjust_num =
get_bits(gb, 3);
1989 for (ad = 0; ad < adjust_num; ad++) {
1992 : gain_mode[
mode][2]));
2013 int global_gain, eld_syntax, er_syntax, pulse_present = 0;
2029 if (!common_window && !scale_flag) {
2044 if (!eld_syntax && (pulse_present =
get_bits1(gb))) {
2047 "Pulse tool not allowed in eight short sequence.\n");
2053 "Pulse data corrupt or invalid.\n");
2059 if (tns->
present && !er_syntax) {
2073 if (tns->
present && er_syntax) {
2102 int g,
i, group, idx = 0;
2110 for (group = 0; group < ics->
group_len[
g]; group++) {
2111 ac->
fdsp->butterflies_fixed(ch0 + group * 128 +
offsets[
i],
2115 for (group = 0; group < ics->
group_len[
g]; group++) {
2142 int g, group,
i, idx = 0;
2150 for (;
i < bt_run_end;
i++, idx++) {
2155 for (group = 0; group < ics->
group_len[
g]; group++)
2171 idx += bt_run_end -
i;
2187 int i,
ret, common_window, ms_present = 0;
2190 common_window = eld_syntax ||
get_bits1(gb);
2191 if (common_window) {
2202 if (ms_present == 3) {
2205 }
else if (ms_present)
2213 if (common_window) {
2227 1.09050773266525765921,
2228 1.18920711500272106672,
2272 for (
c = 0;
c < num_gain;
c++) {
2282 if ((
abs(gain_cache)-1024) >> 3 > 30)
2287 coup->
gain[
c][0] = gain_cache;
2290 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
2303 if ((
abs(gain_cache)-1024) >> 3 > 30)
2308 coup->
gain[
c][idx] = gain_cache;
2326 int num_excl_chan = 0;
2329 for (
i = 0;
i < 7;
i++)
2333 return num_excl_chan / 7;
2345 int drc_num_bands = 1;
2366 for (
i = 0;
i < drc_num_bands;
i++) {
2379 for (
i = 0;
i < drc_num_bands;
i++) {
2390 int i, major, minor;
2397 for(
i=0;
i+1<
sizeof(buf) &&
len>=8;
i++,
len-=8)
2404 if (sscanf(buf,
"libfaac %d.%d", &major, &minor) == 2){
2441 "SBR with 960 frame length");
2496 int bottom, top, order, start, end,
size, inc;
2518 if ((
size = end - start) <= 0)
2530 for (m = 0; m <
size; m++, start += inc)
2531 for (
i = 1;
i <=
FFMIN(m, order);
i++)
2535 for (m = 0; m <
size; m++, start += inc) {
2536 tmp[0] = coef[start];
2537 for (
i = 1;
i <=
FFMIN(m, order);
i++)
2539 for (
i = order;
i > 0;
i--)
2562 memset(in, 0, 448 *
sizeof(*in));
2569 memset(in + 1024 + 576, 0, 448 *
sizeof(*in));
2586 int16_t num_samples = 2048;
2588 if (ltp->
lag < 1024)
2589 num_samples = ltp->
lag + 1024;
2590 for (
i = 0;
i < num_samples;
i++)
2592 memset(&predTime[
i], 0, (2048 -
i) *
sizeof(*predTime));
2619 memcpy(saved_ltp, saved, 512 *
sizeof(*saved_ltp));
2620 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2623 for (
i = 0;
i < 64;
i++)
2626 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(*saved_ltp));
2627 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2630 for (
i = 0;
i < 64;
i++)
2635 for (
i = 0;
i < 512;
i++)
2662 for (
i = 0;
i < 1024;
i += 128)
2678 memcpy(
out, saved, 448 *
sizeof(*
out));
2686 memcpy(
out + 448 + 4*128,
temp, 64 *
sizeof(*
out));
2689 memcpy(
out + 576, buf + 64, 448 *
sizeof(*
out));
2695 memcpy( saved,
temp + 64, 64 *
sizeof(*saved));
2699 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2701 memcpy( saved, buf + 512, 448 *
sizeof(*saved));
2702 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2704 memcpy( saved, buf + 512, 512 *
sizeof(*saved));
2726 for (
i = 0;
i < 8;
i++)
2743 memcpy(
out, saved, 420 *
sizeof(*
out));
2751 memcpy(
out + 420 + 4*120,
temp, 60 *
sizeof(*
out));
2754 memcpy(
out + 540, buf + 60, 420 *
sizeof(*
out));
2760 memcpy( saved,
temp + 60, 60 *
sizeof(*saved));
2764 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2766 memcpy( saved, buf + 480, 420 *
sizeof(*saved));
2767 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2769 memcpy( saved, buf + 480, 480 *
sizeof(*saved));
2786 memcpy(
out, saved, 192 *
sizeof(*
out));
2788 memcpy(
out + 320, buf + 64, 192 *
sizeof(*
out));
2794 memcpy(saved, buf + 256, 256 *
sizeof(*saved));
2805 const int n2 = n >> 1;
2806 const int n4 = n >> 2;
2815 for (
i = 0;
i < n2;
i+=2) {
2817 temp = in[
i ]; in[
i ] = -in[n - 1 -
i]; in[n - 1 -
i] =
temp;
2818 temp = -in[
i + 1]; in[
i + 1] = in[n - 2 -
i]; in[n - 2 -
i] =
temp;
2826 for (
i = 0;
i < n;
i+=2) {
2837 for (
i = n4;
i < n2;
i ++) {
2843 for (
i = 0;
i < n2;
i ++) {
2849 for (
i = 0;
i < n4;
i ++) {
2856 memmove(saved + n, saved, 2 * n *
sizeof(*saved));
2857 memcpy( saved, buf, n *
sizeof(*saved));
2882 apply_coupling_method(ac, &cc->
ch[0], cce,
index);
2887 apply_coupling_method(ac, &cc->
ch[1], cce,
index++);
2975 int layout_map_tags,
ret;
2983 "More than one AAC RDB per ADTS frame");
3006 layout_map_tags = 2;
3007 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
3009 layout_map[0][1] = 0;
3010 layout_map[1][1] = 1;
3057 if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
3065 if (!(che=
get_che(ac, elem_type, elem_id))) {
3067 "channel element %d.%d is not allocated\n",
3068 elem_type, elem_id);
3074 switch (elem_type) {
3112 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
3113 int is_dmono, sce_count = 0;
3114 int payload_alignment;
3153 if (che_presence[elem_type][elem_id]) {
3154 int error = che_presence[elem_type][elem_id] > 1;
3156 elem_type, elem_id);
3162 che_presence[elem_type][elem_id]++;
3164 if (!(che=
get_che(ac, elem_type, elem_id))) {
3166 elem_type, elem_id);
3174 switch (elem_type) {
3205 if (pce_found && !pushed) {
3218 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
3238 while (elem_id > 0) {
3255 che_prev_type = elem_type;
3278 if (ac->
oc[1].
status && audio_found) {
3298 is_dmono = ac->
dmono_mode && sce_count == 2 &&
3315 int *got_frame_ptr,
AVPacket *avpkt)
3318 const uint8_t *buf = avpkt->
data;
3319 int buf_size = avpkt->
size;
3324 size_t new_extradata_size;
3327 &new_extradata_size);
3328 size_t jp_dualmono_size;
3333 if (new_extradata) {
3338 new_extradata_size * 8LL, 1);
3345 if (jp_dualmono && jp_dualmono_size > 0)
3350 if (INT_MAX / 8 <= buf_size)
3370 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
3371 if (buf[buf_offset])
3374 return buf_size > buf_offset ? buf_consumed : buf_size;
3423 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
3424 #define OFF(field) offsetof(AACDecContext, field)
3426 {
"dual_mono_mode",
"Select the channel to decode for dual mono",
3435 {
"channel_order",
"Order in which the channels are to be exported",
3440 {
"coded",
"order in which the channels are coded in the bitstream",
static void error(const char *err)
enum RawDataBlockType type[8]
Type of channel element to be coupled - SCE or CPE.
static void vector_pow43(int *coefs, int len)
CouplingPoint
The point during decoding at which channel coupling is applied.
int frame_size
Number of samples per channel in an audio frame.
@ AV_SAMPLE_FMT_FLTP
float, planar
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
static av_always_inline int lcg_random(unsigned previous_val)
linear congruential pseudorandom number generator
const uint8_t ff_tns_max_bands_128[]
#define AV_EF_EXPLODE
abort decoding on minor error detection
static int decode_prediction(AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
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 decode_audio_specific_config_gb(AACDecContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, GetBitContext *gb, int get_bit_alignment, int sync_extension)
Decode audio specific configuration; reference: table 1.13.
void(* butterflies_float)(float *restrict v1, float *restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
#define AV_CHANNEL_LAYOUT_STEREO
int sample_rate
samples per second
#define u(width, name, range_min, range_max)
const float *const ff_aac_codebook_vector_vals[]
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
void(* update_ltp)(struct AACDecContext *ac, SingleChannelElement *sce)
static av_cold int aac_decode_init(AVCodecContext *avctx)
static INTFLOAT aac_kbd_short_120[120]
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define GET_VLC(code, name, gb, table, bits, max_depth)
If the vlc code is invalid and max_depth=1, then no bits will be removed.
void ff_cbrt_tableinit(void)
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats, and store the result in a vector of floats...
static int get_bits_count(const GetBitContext *s)
int8_t used[MAX_LTP_LONG_SFB]
@ OC_TRIAL_PCE
Output configuration under trial specified by an inband PCE.
This structure describes decoded (raw) audio or video data.
static av_cold int che_configure(AACDecContext *ac, enum ChannelPosition che_pos, int type, int id, int *channels)
Check for the channel element in the current channel position configuration.
const uint8_t ff_aac_num_swb_960[]
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb, int ms_present)
Decode Mid/Side data; reference: table 4.54.
@ AOT_ER_AAC_LTP
N Error Resilient Long Term Prediction.
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
const uint8_t ff_aac_num_swb_120[]
#define AV_LOG_VERBOSE
Detailed information.
ChannelElement * tag_che_map[4][MAX_ELEM_ID]
static int * DEC_SQUAD(int *dst, unsigned idx)
static void apply_independent_coupling(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
static AVOnce aac_table_init
static int decode_audio_specific_config(AACDecContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int64_t bit_size, int sync_extension)
#define UPDATE_CACHE(name, gb)
enum AVChannelOrder order
Channel order used in this layout.
const uint8_t ff_aac_num_swb_480[]
int warned_remapping_once
static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], uint64_t *layout, int tags, int layer, int pos, int *current)
INTFLOAT * ret
PCM output.
const VLCElem * ff_vlc_spectral[11]
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
int nb_channels
Number of channels in this layout.
SingleChannelElement ch[2]
const uint16_t *const ff_swb_offset_128[]
static int push_output_configuration(AACDecContext *ac)
Save current output configuration if and only if it has been locked.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac, uint8_t(*layout_map)[3], GetBitContext *gb, int byte_align_ref)
Decode program configuration element; reference: table 4.2.
#define FF_DEBUG_PICT_INFO
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
const uint8_t ff_tns_max_bands_1024[]
static void reset_all_predictors(PredictorState *ps)
int dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
#define GET_CACHE(name, gb)
static void apply_ltp(AACDecContext *ac, SingleChannelElement *sce)
Apply the long term prediction.
static void skip_bits(GetBitContext *s, int n)
Dynamic Range Control - decoded from the bitstream but not processed further.
int num_swb
number of scalefactor window bands
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
static SDL_Window * window
const uint8_t ff_aac_num_swb_512[]
int force_dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
static ChannelElement * get_che(AACDecContext *ac, int type, int elem_id)
INTFLOAT saved[1536]
overlap
INTFLOAT ret_buf[2048]
PCM output buffer.
AVChannelLayout ch_layout
Audio channel layout.
void(* vector_pow43)(int *coefs, int len)
int id_select[8]
element id
#define AV_EF_BITSTREAM
detect bitstream specification deviations
static int count_paired_channels(uint8_t(*layout_map)[3], int tags, int pos, int current)
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc, GetBitContext *gb)
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4....
static void spectral_to_sample(AACDecContext *ac, int samples)
Convert spectral data to samples, applying all supported tools as appropriate.
int flags
AV_CODEC_FLAG_*.
#define POW_SF2_ZERO
ff_aac_pow2sf_tab index corresponding to pow(2, 0);
static void decode_gain_control(SingleChannelElement *sce, GetBitContext *gb)
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 type
static float * VMUL2(float *dst, const float *v, unsigned idx, const float *scale)
static void decode_ltp(LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb)
Decode Long Term Prediction data; reference: table 4.xx.
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
static __device__ float fabsf(float a)
DynamicRangeControl che_drc
IndividualChannelStream ics
static int aac_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
static void imdct_and_windowing_ld(AACDecContext *ac, SingleChannelElement *sce)
@ AOT_ER_AAC_LC
N Error Resilient Low Complexity.
static int ff_thread_once(char *control, void(*routine)(void))
void AAC_RENAME() ff_sbr_apply(struct AACDecContext *ac, SpectralBandReplication *sbr, int id_aac, INTFLOAT *L, INTFLOAT *R)
Apply one SBR element to one AAC element.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ ZERO_BT
Scalefactors and spectral data are all zero.
#define FF_ARRAY_ELEMS(a)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define MDCT_INIT(s, fn, len, sval)
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
static int decode_scalefactors(AACDecContext *ac, INTFLOAT sf[120], GetBitContext *gb, unsigned int global_gain, IndividualChannelStream *ics, enum BandType band_type[120], int band_type_run_end[120])
Decode scalefactors; reference: table 4.47.
#define AV_CH_LAYOUT_22POINT2
@ OC_GLOBAL_HDR
Output configuration set in a global header but not yet locked.
#define CLOSE_READER(name, gb)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
@ NOISE_BT
Spectral data are scaled white noise not coded in the bitstream.
float(* scalarproduct_float)(const float *v1, const float *v2, int len)
Calculate the scalar product of two vectors of floats.
@ AOT_ER_AAC_LD
N Error Resilient Low Delay.
static const AVClass aac_decoder_class
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
const uint16_t *const ff_swb_offset_960[]
static int sample_rate_idx(int rate)
static av_always_inline void reset_predict_state(PredictorState *ps)
static const int offsets[]
int num_coupled
number of target elements
static int decode_dynamic_range(DynamicRangeControl *che_drc, GetBitContext *gb)
Decode dynamic range information; reference: table 4.52.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
@ INTENSITY_BT2
Scalefactor data are intensity stereo positions (out of phase).
void(* apply_ltp)(struct AACDecContext *ac, SingleChannelElement *sce)
static void imdct_and_windowing(AACDecContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static int decode_band_types(AACDecContext *ac, enum BandType band_type[120], int band_type_run_end[120], GetBitContext *gb, IndividualChannelStream *ics)
Decode band types (section_data payload); reference: table 4.46.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int AAC_RENAME() ff_decode_sbr_extension(struct AACDecContext *ac, SpectralBandReplication *sbr, GetBitContext *gb, int crc, int cnt, int id_aac)
Decode one SBR element.
int AAC_RENAME() ff_aac_sbr_ctx_init(struct AACDecContext *ac, SpectralBandReplication *sbr, int id_aac)
Initialize one SBR context.
#define SKIP_BITS(name, gb, num)
static int decode_spectrum_and_dequant(AACDecContext *ac, INTFLOAT coef[1024], GetBitContext *gb, const INTFLOAT sf[120], int pulse_present, const Pulse *pulse, const IndividualChannelStream *ics, enum BandType band_type[120])
Decode spectral data; reference: table 4.50.
Individual Channel Stream.
ChannelElement * che[4][MAX_ELEM_ID]
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
INTFLOAT coef[8][4][TNS_MAX_ORDER]
void(* imdct_and_windowing)(struct AACDecContext *ac, SingleChannelElement *sce)
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
int warned_num_aac_frames
PredictorState predictor_state[MAX_PREDICTORS]
@ INTENSITY_BT
Scalefactor data are intensity stereo positions (in phase).
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
static int compute_lpc_coefs(const LPC_TYPE *autoc, int max_order, LPC_TYPE *lpc, int lpc_stride, int fail, int normalize)
Levinson-Durbin recursion.
static int decode_cce(AACDecContext *ac, GetBitContext *gb, ChannelElement *che)
Decode coupling_channel_element; reference: table 4.8.
static int decode_pulses(Pulse *pulse, GetBitContext *gb, const uint16_t *swb_offset, int num_swb)
Decode pulse data; reference: table 4.7.
static void flush(AVCodecContext *avctx)
static int decode_ga_specific_config(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, int get_bit_alignment, MPEG4AudioConfig *m4ac, int channel_config)
Decode GA "General Audio" specific configuration; reference: table 4.1.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
const float ff_aac_eld_window_480[1800]
const uint8_t ff_aac_num_swb_128[]
static void decode_channel_map(uint8_t layout_map[][3], enum ChannelPosition type, GetBitContext *gb, int n)
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit.
struct AVCodecInternal * internal
Private context used for internal data.
const int8_t ff_tags_per_config[16]
static int skip_data_stream_element(AACDecContext *ac, GetBitContext *gb)
Skip data_stream_element; reference: table 4.10.
const char * av_default_item_name(void *ptr)
Return the context name.
static unsigned int get_bits1(GetBitContext *s)
static av_cold int aac_decode_close(AVCodecContext *avctx)
static int decode_fill(AACDecContext *ac, GetBitContext *gb, int len)
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
#define LAST_SKIP_BITS(name, gb, num)
static __device__ float sqrtf(float a)
int band_top[17]
Indicates the top of the i-th DRC band in units of 4 spectral lines.
static void imdct_and_windowing_eld(AACDecContext *ac, SingleChannelElement *sce)
const uint16_t *const ff_swb_offset_480[]
#define AV_CH_FRONT_CENTER
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
@ OC_LOCKED
Output configuration locked in place.
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
int band_type_run_end[120]
band type run end points
static void pop_output_configuration(AACDecContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked.
const uint8_t ff_tns_max_bands_512[]
static float * VMUL2S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
static void apply_channel_coupling(AACDecContext *ac, ChannelElement *cc, enum RawDataBlockType type, int elem_id, enum CouplingPoint coupling_point, void(*apply_coupling_method)(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
channel coupling transformation interface
uint8_t layout_map[MAX_ELEM_ID *4][3]
static void apply_mid_side_stereo(AACDecContext *ac, ChannelElement *cpe)
Mid/Side stereo decoding; reference: 4.6.8.1.3.
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)
const uint8_t ff_aac_pred_sfb_max[]
static int decode_extension_payload(AACDecContext *ac, GetBitContext *gb, int cnt, ChannelElement *che, enum RawDataBlockType elem_type)
Decode extension data (incomplete); reference: table 4.51.
enum WindowSequence window_sequence[2]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
@ AOT_ER_AAC_SCALABLE
N Error Resilient Scalable.
@ OC_NONE
Output unconfigured.
const uint16_t *const ff_swb_offset_1024[]
void(* windowing_and_mdct_ltp)(struct AACDecContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
static void relative_align_get_bits(GetBitContext *gb, int reference_position)
@ AOT_AAC_SCALABLE
N Scalable.
An AVChannelLayout holds information about the channel layout of audio data.
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats and store the result in a vector of floats.
const int16_t ff_aac_channel_map[3][4][6]
void ff_aac_float_common_init(void)
static INTFLOAT sine_120[120]
static int set_default_channel_config(AACDecContext *ac, AVCodecContext *avctx, uint8_t(*layout_map)[3], int *tags, int channel_config)
Set up channel positions based on a default channel configuration as specified in table 1....
int sample_rate
Sample rate of the audio data.
static void noise_scale(int *coefs, int scale, int band_energy, int len)
static INTFLOAT sine_960[960]
OCStatus
Output configuration status.
enum AVSampleFormat sample_fmt
audio sample format
uint32_t ff_cbrt_tab[1<< 13]
int prog_ref_level
A reference level for the long-term program audio level for all channels combined.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
SingleChannelElement * output_element[MAX_CHANNELS]
Points to each SingleChannelElement.
int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a potentially unaligned GetBitContext to retrieve audio configura...
enum AACOutputChannelOrder output_channel_order
const uint8_t ff_tns_max_bands_480[]
#define OPEN_READER(name, gb)
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], int offset, uint64_t left, uint64_t right, int pos, uint64_t *layout)
const uint16_t *const ff_swb_offset_512[]
VLCElem ff_vlc_scalefactors[352]
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 void skip_bits1(GetBitContext *s)
enum BandType band_type[128]
band types
@ AV_CHAN_UNUSED
Channel is empty can be safely skipped.
int dyn_rng_ctl[17]
DRC magnitude information.
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
#define AV_LOG_INFO
Standard information.
void ff_sine_window_init(float *window, int n)
Generate a sine window.
@ AOT_AAC_SSR
N (code in SoC repo) Scalable Sample Rate.
static int decode_eld_specific_config(AACDecContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
static INTFLOAT aac_kbd_long_960[960]
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 layout
static av_cold void aac_static_table_init(void)
int nb_samples
number of audio samples (per channel) described by this frame
Single Channel Element - used for both SCE and LFE elements.
#define i(width, name, range_min, range_max)
static av_cold void init_sine_windows_fixed(void)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
static const AVOption options[]
static int aac_decode_er_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb)
SpectralBandReplication sbr
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.
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
const float ff_aac_eld_window_512[1920]
uint8_t ** extended_data
pointers to the data planes/channels.
channel element - generic struct for SCE/CPE/CCE/LFE
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
@ AOT_ER_AAC_ELD
N Error Resilient Enhanced Low Delay.
static av_always_inline void predict(PredictorState *ps, float *coef, int output_enable)
#define NOISE_PRE_BITS
length of preamble
#define FF_DEBUG_STARTCODE
static av_always_inline float cbrtf(float x)
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static void aacdec_init(AACDecContext *ac)
const uint8_t ff_aac_channel_layout_map[16][16][3]
void(* subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context)
static const int8_t filt[NUMTAPS *2]
OutputConfiguration oc[2]
static void apply_tns(INTFLOAT coef_param[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4....
static void apply_dependent_coupling(AACDecContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
static void apply_intensity_stereo(AACDecContext *ac, ChannelElement *cpe, int ms_present)
intensity stereo decoding; reference: 4.6.8.2.3
static void reset_predictor_group(PredictorState *ps, int group_num)
static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
const uint16_t *const ff_swb_offset_120[]
@ AOT_ER_BSAC
N Error Resilient Bit-Sliced Arithmetic Coding.
int pce_instance_tag
Indicates with which program the DRC info is associated.
@ AV_PKT_DATA_JP_DUALMONO
An AV_PKT_DATA_JP_DUALMONO side data packet indicates that the packet may contain "dual mono" audio s...
const uint8_t ff_aac_num_swb_1024[]
#define FFSWAP(type, a, b)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
INTFLOAT sf[120]
scalefactors
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
#define AACDEC_FLAGS
AVOptions for Japanese DTV specific extensions (ADTS only)
static const uint8_t * align_get_bits(GetBitContext *s)
int ch_select[8]
[0] shared list of gains; [1] list of gains for right channel; [2] list of gains for left channel; [3...
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype, int wtype, float *in, float *prev, int ch)
main AAC decoding context
@ AV_CHAN_NONE
Invalid channel index.
main external API structure.
static void apply_prediction(AACDecContext *ac, SingleChannelElement *sce)
Apply AAC-Main style frequency domain prediction.
#define AV_PROFILE_AAC_HE_V2
struct AVCodecContext * avctx
static int decode_ics(AACDecContext *ac, SingleChannelElement *sce, GetBitContext *gb, int common_window, int scale_flag)
Decode an individual_channel_stream payload; reference: table 4.44.
#define SHOW_UBITS(name, gb, num)
int ps
-1 implicit, 1 presence
#define NOISE_OFFSET
subtracted from global gain, used as offset for the preamble
uint8_t prediction_used[41]
const uint8_t ff_mpeg4audio_channels[15]
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
void AAC_RENAME() ff_aac_sbr_ctx_close(SpectralBandReplication *sbr)
Close one SBR context.
av_cold void ff_aacdec_common_init_once(void)
static void update_ltp(AACDecContext *ac, SingleChannelElement *sce)
Update the LTP buffer for next frame.
int sbr
-1 implicit, 1 presence
Filter the word “frame” indicates either a video frame or a group of audio samples
int band_incr
Number of DRC bands greater than 1 having DRC info.
#define AV_CH_FRONT_RIGHT
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
static int * DEC_UQUAD(int *dst, unsigned idx, unsigned sign)
AVChannelLayout ch_layout
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
static int frame_configure_elements(AVCodecContext *avctx)
#define avpriv_request_sample(...)
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
void(* apply_tns)(INTFLOAT coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
static int decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
#define AV_PROFILE_AAC_HE
static void scale(int *out, const int *in, const int w, const int h, const int shift)
static int count_channels(uint8_t(*layout)[3], int tags)
int dyn_rng_sgn[17]
DRC sign information; 0 - positive, 1 - negative.
This structure stores compressed data.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
static void imdct_and_windowing_960(AACDecContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
uint8_t max_sfb
number of scalefactor bands per group
INTFLOAT ltp_state[3072]
time signal for LTP
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
void AAC_RENAME() ff_aac_sbr_init(void)
Initialize SBR.
static int aac_decode_frame_int(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, GetBitContext *gb, const AVPacket *avpkt)
static int output_configure(AACDecContext *ac, uint8_t layout_map[MAX_ELEM_ID *4][3], int tags, enum OCStatus oc_type, int get_new_frame)
Configure output channel order based on the current program configuration element.
static int * DEC_UPAIR(int *dst, unsigned idx, unsigned sign)
static int * DEC_SPAIR(int *dst, unsigned idx)
void ff_aacdec_init_mips(AACDecContext *c)
float ff_aac_pow2sf_tab[428]
@ AOT_AAC_LC
Y Low Complexity.
static int decode_cpe(AACDecContext *ac, GetBitContext *gb, ChannelElement *cpe)
Decode a channel_pair_element; reference: table 4.4.
@ AOT_AAC_LTP
Y Long Term Prediction.
static int parse_adts_frame_header(AACDecContext *ac, GetBitContext *gb)
@ OC_TRIAL_FRAME
Output configuration under trial specified by a frame header.
static const float cce_scale[]
static void windowing_and_mdct_ltp(AACDecContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP.
static int decode_ics_info(AACDecContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Decode Individual Channel Stream info; reference: table 4.6.
int predictor_reset_group
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
int predictor_initialized