99 enum OCStatus oc_type,
int get_new_frame);
101 #define overread_err "Input buffer exhausted before END element found\n"
106 for (
i = 0;
i < tags;
i++) {
109 sum += (1 + (syn_ele ==
TYPE_CPE)) *
184 for (ch = 0; ch < avctx->
channels; ch++) {
201 uint64_t right,
int pos, uint64_t *
layout)
205 .av_position = left | right,
207 .elem_id = layout_map[
offset][1],
210 if (e2c_vec[
offset].av_position != UINT64_MAX)
218 .elem_id = layout_map[
offset][1],
222 .av_position = right,
224 .elem_id = layout_map[
offset + 1][1],
227 if (left != UINT64_MAX)
230 if (right != UINT64_MAX)
240 int num_pos_channels = 0;
244 for (
i = *current;
i < tags;
i++) {
245 if (layout_map[
i][2] !=
pos)
255 num_pos_channels += 2;
266 return num_pos_channels;
269 #define PREFIX_FOR_22POINT2 (AV_CH_LAYOUT_7POINT1_WIDE_BACK|AV_CH_BACK_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_LOW_FREQUENCY_2)
272 int i, n, total_non_cc_elements;
274 int num_front_channels, num_side_channels, num_back_channels;
283 if (num_front_channels < 0)
287 if (num_side_channels < 0)
291 if (num_back_channels < 0)
294 if (num_side_channels == 0 && num_back_channels >= 4) {
295 num_side_channels = 2;
296 num_back_channels -= 2;
300 if (num_front_channels & 1) {
304 .elem_id = layout_map[
i][1],
309 num_front_channels--;
311 if (num_front_channels >= 4) {
316 num_front_channels -= 2;
318 if (num_front_channels >= 2) {
323 num_front_channels -= 2;
325 while (num_front_channels >= 2) {
330 num_front_channels -= 2;
333 if (num_side_channels >= 2) {
338 num_side_channels -= 2;
340 while (num_side_channels >= 2) {
345 num_side_channels -= 2;
348 while (num_back_channels >= 4) {
353 num_back_channels -= 2;
355 if (num_back_channels >= 2) {
360 num_back_channels -= 2;
362 if (num_back_channels) {
366 .elem_id = layout_map[
i][1],
378 .elem_id = layout_map[
i][1],
388 .elem_id = layout_map[
i][1],
398 .elem_id = layout_map[
i][1],
407 for (
int j = 0; j < tags; j++) {
408 if (layout_map[j][0] != reference_layout_map[j][0] ||
409 layout_map[j][2] != reference_layout_map[j][2])
410 goto end_of_layout_definition;
415 .syn_ele = layout_map[
i][0],
416 .elem_id = layout_map[
i][1],
417 .aac_position = layout_map[
i][2]
431 .syn_ele = layout_map[
i][0],
432 .elem_id = layout_map[
i][1],
433 .aac_position = layout_map[
i][2]
442 .syn_ele = layout_map[
i][0],
443 .elem_id = layout_map[
i][1],
444 .aac_position = layout_map[
i][2]
448 .syn_ele = layout_map[
i][0],
449 .elem_id = layout_map[
i][1],
450 .aac_position = layout_map[
i][2]
459 end_of_layout_definition:
461 total_non_cc_elements = n =
i;
479 for (
i = 1;
i < n;
i++)
480 if (e2c_vec[
i - 1].av_position > e2c_vec[
i].av_position) {
489 for (
i = 0;
i < total_non_cc_elements;
i++) {
505 ac->
oc[0] = ac->
oc[1];
518 ac->
oc[1] = ac->
oc[0];
534 enum OCStatus oc_type,
int get_new_frame)
543 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
546 for (
i = 0;
i < tags;
i++) {
547 int type = layout_map[
i][0];
548 int id = layout_map[
i][1];
559 for (
i = 0;
i < tags;
i++) {
560 int type = layout_map[
i][0];
561 int id = layout_map[
i][1];
562 int iid = id_map[
type][
id];
563 int position = layout_map[
i][2];
601 for (j = 0; j <= 1; j++) {
620 if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
621 channel_config > 13) {
623 "invalid default channel configuration (%d)\n",
629 *tags *
sizeof(*layout_map));
647 " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
672 &layout_map_tags, 2) < 0)
691 &layout_map_tags, 1) < 0)
734 "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
756 "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
817 layout_map[0][0] = syn_ele;
819 layout_map[0][2] =
type;
825 int reference_position) {
840 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
850 "Sample rate index in program config element does not "
851 "match the sample rate index configured by the container.\n");
868 if (
get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
908 int get_bit_alignment,
912 int extension_flag, ret, ep_config, res_flags;
940 if (channel_config == 0) {
942 tags =
decode_pce(avctx, m4ac, layout_map, gb, get_bit_alignment);
947 &tags, channel_config)))
953 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
959 if (extension_flag) {
972 "AAC data resilience (flags %x)",
988 "epConfig %d", ep_config);
1000 int ret, ep_config, res_flags;
1003 const int ELDEXT_TERM = 0;
1018 "AAC data resilience (flags %x)",
1029 while (
get_bits(gb, 4) != ELDEXT_TERM) {
1033 if (
len == 15 + 255)
1043 &tags, channel_config)))
1052 "epConfig %d", ep_config);
1074 int get_bit_alignment,
1088 "invalid sampling rate index %d\n",
1096 "invalid low delay sampling rate index %d\n",
1122 "Audio object type %s%d",
1123 m4ac->
sbr == 1 ?
"SBR+" :
"",
1129 "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1146 if (bit_size < 0 || bit_size > INT_MAX) {
1151 ff_dlog(avctx,
"audio specific config size %d\n", (
int)bit_size >> 3);
1152 for (
i = 0; i < bit_size >> 3;
i++)
1172 union {
unsigned u;
int s; } v = { previous_val * 1664525u + 1013904223 };
1185 if (92017 <= rate)
return 0;
1186 else if (75132 <= rate)
return 1;
1187 else if (55426 <= rate)
return 2;
1188 else if (46009 <= rate)
return 3;
1189 else if (37566 <= rate)
return 4;
1190 else if (27713 <= rate)
return 5;
1191 else if (23004 <= rate)
return 6;
1192 else if (18783 <= rate)
return 7;
1193 else if (13856 <= rate)
return 8;
1194 else if (11502 <= rate)
return 9;
1195 else if (9391 <= rate)
return 10;
1211 294 + 306 + 268 + 510 + 366 + 462][2];
1212 for (
unsigned i = 0,
offset = 0;
i < 11;
i++) {
1290 int layout_map_tags;
1381 "Invalid Predictor Reset Group.\n");
1427 "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1440 for (
i = 0;
i < 7;
i++) {
1497 "Prediction is not allowed in AAC-LC.\n");
1502 "LTP in ER AAC LD not yet implemented.\n");
1514 "Number of scalefactor bands in group (%d) "
1515 "exceeds limit (%d).\n",
1542 while (k < ics->max_sfb) {
1545 int sect_band_type =
get_bits(gb, 4);
1546 if (sect_band_type == 12) {
1552 sect_end += sect_len_incr;
1557 if (sect_end > ics->
max_sfb) {
1559 "Number of bands (%d) exceeds limit (%d).\n",
1563 }
while (sect_len_incr == (1 <<
bits) - 1);
1564 for (; k < sect_end; k++) {
1565 band_type [idx] = sect_band_type;
1566 band_type_run_end[idx++] = sect_end;
1584 unsigned int global_gain,
1587 int band_type_run_end[120])
1595 int run_end = band_type_run_end[idx];
1596 if (band_type[idx] ==
ZERO_BT) {
1597 for (;
i < run_end;
i++, idx++)
1601 for (;
i < run_end;
i++, idx++) {
1604 if (
offset[2] != clipped_offset) {
1606 "If you heard an audible artifact, there may be a bug in the decoder. "
1607 "Clipped intensity stereo position (%d -> %d)",
1608 offset[2], clipped_offset);
1611 sf[idx] = 100 - clipped_offset;
1616 }
else if (band_type[idx] ==
NOISE_BT) {
1617 for (;
i < run_end;
i++, idx++) {
1618 if (noise_flag-- > 0)
1623 if (
offset[1] != clipped_offset) {
1625 "If you heard an audible artifact, there may be a bug in the decoder. "
1626 "Clipped noise gain (%d -> %d)",
1627 offset[1], clipped_offset);
1630 sf[idx] = -(100 + clipped_offset);
1636 for (;
i < run_end;
i++, idx++) {
1640 "Scalefactor (%d) out of range.\n",
offset[0]);
1659 const uint16_t *swb_offset,
int num_swb)
1664 if (pulse_swb >= num_swb)
1666 pulse->
pos[0] = swb_offset[pulse_swb];
1668 if (pulse->
pos[0] >= swb_offset[num_swb])
1673 if (pulse->
pos[
i] >= swb_offset[num_swb])
1688 int w,
filt,
i, coef_len, coef_res, coef_compress;
1701 "TNS filter order %d is greater than maximum %d.\n",
1709 coef_len = coef_res + 3 - coef_compress;
1710 tmp2_idx = 2 * coef_compress + coef_res;
1733 if (ms_present == 1) {
1734 for (idx = 0; idx < max_idx; idx++)
1736 }
else if (ms_present == 2) {
1755 int pulse_present,
const Pulse *pulse,
1759 int i, k,
g, idx = 0;
1772 const unsigned cbt_m1 = band_type[idx] - 1;
1778 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1779 memset(cfo, 0, off_len *
sizeof(*cfo));
1781 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1782 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1785 for (k = 0; k < off_len; k++) {
1790 band_energy = ac->
fdsp->scalarproduct_fixed(cfo, cfo, off_len);
1796 for (k = 0; k < off_len; k++) {
1802 scale = sf[idx] / sqrtf(band_energy);
1813 switch (cbt_m1 >> 1) {
1815 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1829 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1836 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1849 nnz = cb_idx >> 8 & 15;
1862 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1876 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1884 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1897 nnz = cb_idx >> 8 & 15;
1898 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1903 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1910 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1916 uint32_t *icf = (uint32_t *) cf;
1931 if (cb_idx == 0x0000) {
1942 for (j = 0; j < 2; j++) {
1977 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1978 *icf++ = (
bits & 1U<<31) | v;
1997 if (pulse_present) {
2003 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
2007 ico = co + (co > 0 ? -ico : ico);
2009 coef_base[ pulse->
pos[
i] ] = ico;
2013 ico = co / sqrtf(sqrtf(
fabsf(co))) + (co > 0 ? -ico : ico);
2027 const unsigned cbt_m1 = band_type[idx] - 1;
2033 for (group = 0; group < (
int)g_len; group++, cfo+=128) {
2062 k < sce->ics.swb_offset[sfb + 1];
2079 static const uint8_t gain_mode[4][3] = {
2091 for (bd = 0; bd < max_band; bd++) {
2092 for (wd = 0; wd < gain_mode[
mode][0]; wd++) {
2094 for (ad = 0; ad < adjust_num; ad++) {
2097 : gain_mode[
mode][2]));
2118 int global_gain, eld_syntax, er_syntax, pulse_present = 0;
2134 if (!common_window && !scale_flag) {
2149 if (!eld_syntax && (pulse_present =
get_bits1(gb))) {
2152 "Pulse tool not allowed in eight short sequence.\n");
2158 "Pulse data corrupt or invalid.\n");
2164 if (tns->
present && !er_syntax) {
2178 if (tns->
present && er_syntax) {
2207 int g,
i, group, idx = 0;
2215 for (group = 0; group < ics->
group_len[
g]; group++) {
2216 ac->
fdsp->butterflies_fixed(ch0 + group * 128 +
offsets[
i],
2220 for (group = 0; group < ics->
group_len[
g]; group++) {
2247 int g, group,
i, idx = 0;
2255 for (;
i < bt_run_end;
i++, idx++) {
2259 scale =
c * sce1->
sf[idx];
2260 for (group = 0; group < ics->
group_len[
g]; group++)
2276 idx += bt_run_end -
i;
2292 int i, ret, common_window, ms_present = 0;
2295 common_window = eld_syntax ||
get_bits1(gb);
2296 if (common_window) {
2307 if (ms_present == 3) {
2310 }
else if (ms_present)
2313 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
2315 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
2318 if (common_window) {
2332 1.09050773266525765921,
2333 1.18920711500272106672,
2377 for (
c = 0;
c < num_gain;
c++) {
2385 gain_cache =
GET_GAIN(scale, gain);
2387 if ((
abs(gain_cache)-1024) >> 3 > 30)
2392 coup->
gain[
c][0] = gain_cache;
2395 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
2408 if ((
abs(gain_cache)-1024) >> 3 > 30)
2413 coup->
gain[
c][idx] = gain_cache;
2431 int num_excl_chan = 0;
2434 for (
i = 0;
i < 7;
i++)
2438 return num_excl_chan / 7;
2450 int drc_num_bands = 1;
2471 for (
i = 0;
i < drc_num_bands;
i++) {
2484 for (
i = 0;
i < drc_num_bands;
i++) {
2502 for(
i=0;
i+1<
sizeof(buf) &&
len>=8;
i++,
len-=8)
2509 if (sscanf(buf,
"libfaac %d.%d", &
major, &
minor) == 2){
2546 "SBR with 960 frame length");
2596 int bottom, top, order, start, end,
size, inc;
2618 if ((
size = end - start) <= 0)
2630 for (m = 0; m <
size; m++, start += inc)
2631 for (
i = 1;
i <=
FFMIN(m, order);
i++)
2635 for (m = 0; m <
size; m++, start += inc) {
2636 tmp[0] = coef[start];
2637 for (
i = 1;
i <=
FFMIN(m, order);
i++)
2639 for (
i = order;
i > 0;
i--)
2662 memset(
in, 0, 448 *
sizeof(*
in));
2669 memset(
in + 1024 + 576, 0, 448 *
sizeof(*
in));
2686 int16_t num_samples = 2048;
2688 if (ltp->
lag < 1024)
2689 num_samples = ltp->
lag + 1024;
2690 for (
i = 0;
i < num_samples;
i++)
2692 memset(&predTime[
i], 0, (2048 -
i) *
sizeof(*predTime));
2719 memcpy(saved_ltp, saved, 512 *
sizeof(*saved_ltp));
2720 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2723 for (
i = 0;
i < 64;
i++)
2726 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(*saved_ltp));
2727 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2730 for (
i = 0;
i < 64;
i++)
2735 for (
i = 0;
i < 512;
i++)
2762 for (
i = 0;
i < 1024;
i += 128)
2767 for (
i=0;
i<1024;
i++)
2768 buf[
i] = (buf[
i] + 4LL) >> 3;
2782 memcpy(
out, saved, 448 *
sizeof(*
out));
2790 memcpy(
out + 448 + 4*128,
temp, 64 *
sizeof(*
out));
2793 memcpy(
out + 576, buf + 64, 448 *
sizeof(*
out));
2799 memcpy( saved,
temp + 64, 64 *
sizeof(*saved));
2803 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2805 memcpy( saved, buf + 512, 448 *
sizeof(*saved));
2806 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2808 memcpy( saved, buf + 512, 512 *
sizeof(*saved));
2831 for (
i = 0;
i < 8;
i++)
2848 memcpy(
out, saved, 420 *
sizeof(*
out));
2856 memcpy(
out + 420 + 4*120,
temp, 60 *
sizeof(*
out));
2859 memcpy(
out + 540, buf + 60, 420 *
sizeof(*
out));
2865 memcpy( saved,
temp + 60, 60 *
sizeof(*saved));
2869 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2871 memcpy( saved, buf + 480, 420 *
sizeof(*saved));
2872 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2874 memcpy( saved, buf + 480, 480 *
sizeof(*saved));
2893 for (
i = 0;
i < 1024;
i++)
2894 buf[
i] = (buf[
i] + 2) >> 2;
2900 memcpy(
out, saved, 192 *
sizeof(*
out));
2902 memcpy(
out + 320, buf + 64, 192 *
sizeof(*
out));
2908 memcpy(saved, buf + 256, 256 *
sizeof(*saved));
2919 const int n2 = n >> 1;
2920 const int n4 = n >> 2;
2929 for (
i = 0;
i < n2;
i+=2) {
2942 for (
i = 0;
i < 1024;
i++)
2943 buf[
i] = (buf[
i] + 1) >> 1;
2946 for (
i = 0;
i < n;
i+=2) {
2956 for (
i = n4;
i < n2;
i ++) {
2962 for (
i = 0;
i < n2;
i ++) {
2968 for (
i = 0;
i < n4;
i ++) {
2975 memmove(saved + n, saved, 2 * n *
sizeof(*saved));
2976 memcpy( saved, buf, n *
sizeof(*saved));
3001 apply_coupling_method(ac, &cc->
ch[0], cce,
index);
3006 apply_coupling_method(ac, &cc->
ch[1], cce,
index++);
3074 for(j = 0; j<samples; j++){
3094 int layout_map_tags, ret;
3102 "More than one AAC RDB per ADTS frame");
3125 layout_map_tags = 2;
3126 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
3128 layout_map[0][1] = 0;
3129 layout_map[1][1] = 1;
3176 if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
3184 if (!(che=
get_che(ac, elem_type, elem_id))) {
3186 "channel element %d.%d is not allocated\n",
3187 elem_type, elem_id);
3193 switch (elem_type) {
3231 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
3232 int is_dmono, sce_count = 0;
3233 int payload_alignment;
3272 if (che_presence[elem_type][elem_id]) {
3273 int error = che_presence[elem_type][elem_id] > 1;
3275 elem_type, elem_id);
3281 che_presence[elem_type][elem_id]++;
3283 if (!(che=
get_che(ac, elem_type, elem_id))) {
3285 elem_type, elem_id);
3293 switch (elem_type) {
3324 if (pce_found && !pushed) {
3337 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
3357 while (elem_id > 0) {
3374 che_prev_type = elem_type;
3393 samples <<= multiplier;
3397 if (ac->
oc[1].
status && audio_found) {
3417 *got_frame_ptr = !!samples;
3420 is_dmono = ac->
dmono_mode && sce_count == 2 &&
3436 int *got_frame_ptr,
AVPacket *avpkt)
3440 int buf_size = avpkt->
size;
3448 &new_extradata_size);
3454 if (new_extradata) {
3459 new_extradata_size * 8LL, 1);
3466 if (jp_dualmono && jp_dualmono_size > 0)
3471 if (INT_MAX / 8 <= buf_size)
3491 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
3492 if (buf[buf_offset])
3495 return buf_size > buf_offset ? buf_consumed : buf_size;
3544 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
3546 {
"dual_mono_mode",
"Select the channel to decode for dual mono",
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
@ INTENSITY_BT
Scalefactor data are intensity stereo positions (in phase).
@ ZERO_BT
Scalefactors and spectral data are all zero.
@ INTENSITY_BT2
Scalefactor data are intensity stereo positions (out of phase).
@ NOISE_BT
Spectral data are scaled white noise not coded in the bitstream.
CouplingPoint
The point during decoding at which channel coupling is applied.
#define NOISE_PRE_BITS
length of preamble
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
OCStatus
Output configuration status.
@ OC_TRIAL_FRAME
Output configuration under trial specified by a frame header.
@ OC_TRIAL_PCE
Output configuration under trial specified by an inband PCE.
@ OC_LOCKED
Output configuration locked in place.
@ OC_GLOBAL_HDR
Output configuration set in a global header but not yet locked.
@ OC_NONE
Output unconfigured.
void ff_aacdec_init_mips(AACContext *c)
#define NOISE_OFFSET
subtracted from global gain, used as offset for the preamble
#define POW_SF2_ZERO
ff_aac_pow2sf_tab index corresponding to pow(2, 0);
static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
static int * DEC_UQUAD(int *dst, unsigned idx, unsigned sign)
static int * DEC_SQUAD(int *dst, unsigned idx)
static int * DEC_SPAIR(int *dst, unsigned idx)
static void vector_pow43(int *coefs, int len)
static int * DEC_UPAIR(int *dst, unsigned idx, unsigned sign)
static void noise_scale(int *coefs, int scale, int band_energy, int len)
static int decode_eld_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
static void imdct_and_windowing_eld(AACContext *ac, SingleChannelElement *sce)
static void relative_align_get_bits(GetBitContext *gb, int reference_position)
#define AACDEC_FLAGS
AVOptions for Japanese DTV specific extensions (ADTS only)
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
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.
static int aac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static int aac_decode_er_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb)
static int sample_rate_idx(int rate)
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
Apply AAC-Main style frequency domain prediction.
static int decode_spectrum_and_dequant(AACContext *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.
static void spectral_to_sample(AACContext *ac, int samples)
Convert spectral data to samples, applying all supported tools as appropriate.
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
static const AVOption options[]
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
Mid/Side stereo decoding; reference: 4.6.8.1.3.
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.
static void imdct_and_windowing_960(AACContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
static VLC vlc_scalefactors
static av_cold void aac_static_table_init(void)
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb, int ms_present)
Decode Mid/Side data; reference: table 4.54.
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
Decode a channel_pair_element; reference: table 4.4.
static int aac_decode_frame_int(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb, const AVPacket *avpkt)
static void windowing_and_mdct_ltp(AACContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP.
static void apply_ltp(AACContext *ac, SingleChannelElement *sce)
Apply the long term prediction.
static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
Skip data_stream_element; reference: table 4.10.
static VLC vlc_spectral[11]
static int frame_configure_elements(AVCodecContext *avctx)
static int output_configure(AACContext *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 decode_drc_channel_exclusions(DynamicRangeControl *che_drc, GetBitContext *gb)
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4....
static int count_paired_channels(uint8_t(*layout_map)[3], int tags, int pos, int *current)
static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt, ChannelElement *che, enum RawDataBlockType elem_type)
Decode extension data (incomplete); reference: table 4.51.
static int decode_pulses(Pulse *pulse, GetBitContext *gb, const uint16_t *swb_offset, int num_swb)
Decode pulse data; reference: table 4.7.
static int decode_dynamic_range(DynamicRangeControl *che_drc, GetBitContext *gb)
Decode dynamic range information; reference: table 4.52.
static void decode_gain_control(SingleChannelElement *sce, GetBitContext *gb)
static av_cold int che_configure(AACContext *ac, enum ChannelPosition che_pos, int type, int id, int *channels)
Check for the channel element in the current channel position configuration.
static int decode_fill(AACContext *ac, GetBitContext *gb, int len)
static av_cold int aac_decode_close(AVCodecContext *avctx)
static int count_channels(uint8_t(*layout)[3], int tags)
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.
static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
static av_cold int aac_decode_init(AVCodecContext *avctx)
static ChannelElement * get_che(AACContext *ac, int type, int elem_id)
static int decode_audio_specific_config(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int64_t bit_size, int sync_extension)
static void aacdec_init(AACContext *ac)
static int decode_band_types(AACContext *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.
static int set_default_channel_config(AACContext *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....
static void update_ltp(AACContext *ac, SingleChannelElement *sce)
Update the LTP buffer for next frame.
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
Decode coupling_channel_element; reference: table 4.8.
static void apply_intensity_stereo(AACContext *ac, ChannelElement *cpe, int ms_present)
intensity stereo decoding; reference: 4.6.8.2.3
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 AVOnce aac_table_init
static void decode_ltp(LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb)
Decode Long Term Prediction data; reference: table 4.xx.
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)
static void reset_all_predictors(PredictorState *ps)
static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, int get_bit_alignment, MPEG4AudioConfig *m4ac, int channel_config)
Decode GA "General Audio" specific configuration; reference: table 4.1.
static void apply_channel_coupling(AACContext *ac, ChannelElement *cc, enum RawDataBlockType type, int elem_id, enum CouplingPoint coupling_point, void(*apply_coupling_method)(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index))
channel coupling transformation interface
static void reset_predictor_group(PredictorState *ps, int group_num)
static int decode_ics(AACContext *ac, SingleChannelElement *sce, GetBitContext *gb, int common_window, int scale_flag)
Decode an individual_channel_stream payload; reference: table 4.44.
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Decode Individual Channel Stream info; reference: table 4.6.
static av_always_inline int lcg_random(unsigned previous_val)
linear congruential pseudorandom number generator
static int push_output_configuration(AACContext *ac)
Save current output configuration if and only if it has been locked.
static void pop_output_configuration(AACContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked.
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
#define PREFIX_FOR_22POINT2
static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
static const AVClass aac_decoder_class
static int decode_scalefactors(AACContext *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.
static const float cce_scale[]
static void flush(AVCodecContext *avctx)
static const uint8_t aac_channel_layout_map[16][16][3]
static const int8_t tags_per_config[16]
void AAC_RENAME() ff_aac_sbr_ctx_close(SpectralBandReplication *sbr)
Close one SBR context.
void AAC_RENAME() ff_aac_sbr_ctx_init(AACContext *ac, SpectralBandReplication *sbr, int id_aac)
Initialize one SBR context.
void AAC_RENAME() ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int id_aac, INTFLOAT *L, INTFLOAT *R)
Apply one SBR element to one AAC element.
void AAC_RENAME() ff_aac_sbr_init(void)
Initialize SBR.
int AAC_RENAME() ff_decode_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, GetBitContext *gb, int crc, int cnt, int id_aac)
Decode one SBR element.
const uint32_t ff_aac_scalefactor_code[121]
const uint8_t ff_aac_num_swb_120[]
const uint8_t ff_aac_num_swb_960[]
const float ff_aac_eld_window_480[1800]
const uint8_t ff_tns_max_bands_512[]
const uint8_t ff_tns_max_bands_1024[]
const uint16_t *const ff_swb_offset_128[]
const uint16_t *const ff_swb_offset_120[]
const uint8_t ff_aac_num_swb_480[]
const uint8_t ff_aac_pred_sfb_max[]
const uint16_t *const ff_swb_offset_1024[]
const uint8_t ff_aac_scalefactor_bits[121]
const uint16_t *const ff_aac_codebook_vector_idx[]
void ff_aac_tableinit(void)
float ff_aac_pow2sf_tab[428]
const uint16_t *const ff_swb_offset_960[]
const uint16_t *const ff_swb_offset_480[]
const uint8_t ff_aac_num_swb_1024[]
const uint8_t ff_aac_num_swb_128[]
const float ff_aac_eld_window_512[1920]
const uint8_t ff_tns_max_bands_480[]
const uint8_t *const ff_aac_spectral_bits[11]
const uint8_t ff_aac_num_swb_512[]
const uint16_t ff_aac_spectral_sizes[11]
const uint16_t *const ff_aac_spectral_codes[11]
const uint8_t ff_tns_max_bands_128[]
const float *const ff_aac_codebook_vector_vals[]
const uint16_t *const ff_swb_offset_512[]
static const INTFLOAT *const tns_tmp2_map[4]
void ff_aac_float_common_init(void)
static const INTFLOAT ltp_coef[8]
static const int8_t filt[NUMTAPS *2]
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define FF_DEBUG_STARTCODE
#define AV_EF_BITSTREAM
detect bitstream specification deviations
#define FF_PROFILE_AAC_HE
#define FF_PROFILE_AAC_HE_V2
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
#define FF_DEBUG_PICT_INFO
#define AV_EF_EXPLODE
abort decoding on minor error detection
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, buffer_size_t *size)
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
void ff_cbrt_tableinit(void)
uint32_t ff_cbrt_tab[1<< 13]
#define u(width, name, range_min, range_max)
static VLC_TYPE vlc_buf[16716][2]
#define FFSWAP(type, a, b)
static __device__ float fabsf(float a)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
mode
Use these values in ebur128_init (or'ed).
static SDL_Window * window
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
#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.
#define GET_CACHE(name, gb)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define CLOSE_READER(name, gb)
static int get_bits_left(GetBitContext *gb)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define SHOW_UBITS(name, gb, num)
static unsigned int get_bits1(GetBitContext *s)
#define OPEN_READER(name, gb)
static void skip_bits(GetBitContext *s, int n)
#define SKIP_BITS(name, gb, num)
#define UPDATE_CACHE(name, gb)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define LAST_SKIP_BITS(name, gb, num)
static int get_bits_count(const GetBitContext *s)
static void skip_bits1(GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static const uint8_t * align_get_bits(GetBitContext *s)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define AV_CH_LAYOUT_22POINT2
#define AV_CH_TOP_FRONT_LEFT
#define AV_CH_FRONT_RIGHT
#define AV_CH_TOP_BACK_CENTER
#define AV_CH_BOTTOM_FRONT_CENTER
#define AV_CH_FRONT_RIGHT_OF_CENTER
#define AV_CH_BACK_CENTER
#define AV_CH_TOP_FRONT_CENTER
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_CH_LOW_FREQUENCY_2
#define AV_CH_LAYOUT_NATIVE
Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests ...
#define AV_CH_TOP_SIDE_RIGHT
#define AV_CH_FRONT_CENTER
#define AV_CH_TOP_BACK_RIGHT
#define AV_CH_TOP_SIDE_LEFT
#define AV_CH_TOP_BACK_LEFT
#define AV_CH_LOW_FREQUENCY
#define AV_CH_BOTTOM_FRONT_RIGHT
#define AV_CH_TOP_FRONT_RIGHT
#define AV_CH_BOTTOM_FRONT_LEFT
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
@ AV_PKT_DATA_JP_DUALMONO
An AV_PKT_DATA_JP_DUALMONO side data packet indicates that the packet may contain "dual mono" audio s...
@ 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...
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
@ AV_SAMPLE_FMT_FLTP
float, planar
@ AV_SAMPLE_FMT_S32P
signed 32 bits, planar
#define LIBAVUTIL_VERSION_INT
static const int offsets[]
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
static av_always_inline void reset_predict_state(PredictorState *ps)
static float * VMUL4S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
static void apply_dependent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
static float * VMUL4(float *dst, const float *v, unsigned idx, const float *scale)
static INTFLOAT aac_kbd_short_120[120]
static av_always_inline void predict(PredictorState *ps, float *coef, int output_enable)
static void apply_independent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
static INTFLOAT aac_kbd_long_960[960]
static INTFLOAT sine_960[960]
static INTFLOAT sine_120[120]
static float * VMUL2(float *dst, const float *v, unsigned idx, const float *scale)
static float * VMUL2S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static int ff_thread_once(char *control, void(*routine)(void))
static av_always_inline float cbrtf(float x)
static int AAC_RENAME() compute_lpc_coefs(const LPC_TYPE *autoc, int max_order, LPC_TYPE *lpc, int lpc_stride, int fail, int normalize)
Levinson-Durbin recursion.
av_cold void ff_mdct15_uninit(MDCT15Context **ps)
av_cold int ff_mdct15_init(MDCT15Context **ps, int inverse, int N, double scale)
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...
const uint8_t ff_mpeg4audio_channels[14]
@ AOT_AAC_LTP
Y Long Term Prediction.
@ AOT_ER_AAC_LD
N Error Resilient Low Delay.
@ AOT_ER_AAC_ELD
N Error Resilient Enhanced Low Delay.
@ AOT_ER_AAC_LC
N Error Resilient Low Complexity.
@ AOT_AAC_SCALABLE
N Scalable.
@ AOT_ER_BSAC
N Error Resilient Bit-Sliced Arithmetic Coding.
@ AOT_AAC_SSR
N (code in SoC repo) Scalable Sample Rate.
@ AOT_AAC_LC
Y Low Complexity.
@ AOT_ER_AAC_LTP
N Error Resilient Long Term Prediction.
@ AOT_ER_AAC_SCALABLE
N Error Resilient Scalable.
typedef void(RENAME(mix_any_func_type))
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
void ff_sine_window_init(float *window, int n)
Generate a sine window.
static av_cold void init_sine_windows_fixed(void)
#define FF_ARRAY_ELEMS(a)
SingleChannelElement * output_element[MAX_CHANNELS]
Points to each SingleChannelElement.
void(* update_ltp)(AACContext *ac, SingleChannelElement *sce)
int dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
DynamicRangeControl che_drc
void(* vector_pow43)(int *coefs, int len)
OutputConfiguration oc[2]
int force_dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
void(* apply_ltp)(AACContext *ac, SingleChannelElement *sce)
int warned_num_aac_frames
void(* imdct_and_windowing)(AACContext *ac, SingleChannelElement *sce)
void(* subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context)
int warned_remapping_once
ChannelElement * tag_che_map[4][MAX_ELEM_ID]
ChannelElement * che[4][MAX_ELEM_ID]
void(* apply_tns)(INTFLOAT coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
void(* windowing_and_mdct_ltp)(AACContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
main external API structure.
enum AVSampleFormat sample_fmt
audio sample format
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
int sample_rate
samples per second
uint64_t request_channel_layout
Request decoder to use this channel layout if it can (0 for default)
int flags
AV_CODEC_FLAG_*.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int channels
number of audio channels
uint64_t channel_layout
Audio channel layout.
int frame_size
Number of samples per channel in an audio frame.
struct AVCodecInternal * internal
Private context used for internal data.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int skip_samples_multiplier
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
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...
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
float(* scalarproduct_float)(const float *v1, const float *v2, int len)
Calculate the scalar product of two vectors of floats.
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
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.
This structure describes decoded (raw) audio or video data.
int nb_samples
number of audio samples (per channel) described by this frame
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int sample_rate
Sample rate of the audio data.
uint8_t ** extended_data
pointers to the data planes/channels.
This structure stores compressed data.
int id_select[8]
element id
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
int num_coupled
number of target elements
int ch_select[8]
[0] shared list of gains; [1] list of gains for right channel; [2] list of gains for left channel; [3...
enum RawDataBlockType type[8]
Type of channel element to be coupled - SCE or CPE.
channel element - generic struct for SCE/CPE/CCE/LFE
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
SpectralBandReplication sbr
SingleChannelElement ch[2]
Dynamic Range Control - decoded from the bitstream but not processed further.
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
int band_incr
Number of DRC bands greater than 1 having DRC info.
int dyn_rng_ctl[17]
DRC magnitude information.
int prog_ref_level
A reference level for the long-term program audio level for all channels combined.
int pce_instance_tag
Indicates with which program the DRC info is associated.
int band_top[17]
Indicates the top of the i-th DRC band in units of 4 spectral lines.
int dyn_rng_sgn[17]
DRC sign information; 0 - positive, 1 - negative.
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
void(* mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
Individual Channel Stream.
uint8_t max_sfb
number of scalefactor bands per group
int num_swb
number of scalefactor window bands
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
int predictor_reset_group
uint8_t prediction_used[41]
int predictor_initialized
enum WindowSequence window_sequence[2]
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
int8_t used[MAX_LTP_LONG_SFB]
void(* imdct_half)(struct MDCT15Context *s, float *dst, const float *src, ptrdiff_t stride)
int sbr
-1 implicit, 1 presence
int ps
-1 implicit, 1 presence
uint8_t layout_map[MAX_ELEM_ID *4][3]
Single Channel Element - used for both SCE and LFE elements.
INTFLOAT * ret
PCM output.
enum BandType band_type[128]
band types
PredictorState predictor_state[MAX_PREDICTORS]
int band_type_run_end[120]
band type run end points
INTFLOAT ret_buf[2048]
PCM output buffer.
INTFLOAT sf[120]
scalefactors
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
INTFLOAT saved[1536]
overlap
INTFLOAT ltp_state[3072]
time signal for LTP
IndividualChannelStream ics
INTFLOAT coef[8][4][TNS_MAX_ORDER]
VLC_TYPE(* table)[2]
code, bits
#define avpriv_request_sample(...)
static void error(const char *err)
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype, int wtype, float *in, float *prev, int ch)
static const uint8_t offset[127][2]
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
#define INIT_VLC_STATIC_OVERLONG