121 enum OCStatus oc_type,
int get_new_frame);
123 #define overread_err "Input buffer exhausted before END element found\n"
128 for (i = 0; i < tags; i++) {
129 int syn_ele =
layout[i][0];
131 sum += (1 + (syn_ele ==
TYPE_CPE)) *
151 int type,
int id,
int *channels)
156 if (!ac->
che[type][
id]) {
173 if (ac->
che[type][
id])
186 for (type = 0; type < 4; type++) {
206 for (ch = 0; ch < avctx->
channels; ch++) {
223 uint64_t right,
int pos)
225 if (layout_map[offset][0] ==
TYPE_CPE) {
227 .av_position = left | right,
229 .elem_id = layout_map[
offset][1],
237 .elem_id = layout_map[
offset][1],
241 .av_position = right,
243 .elem_id = layout_map[offset + 1][1],
253 int num_pos_channels = 0;
257 for (i = *current; i < tags; i++) {
258 if (layout_map[i][2] != pos)
268 num_pos_channels += 2;
279 return num_pos_channels;
284 int i,
n, total_non_cc_elements;
286 int num_front_channels, num_side_channels, num_back_channels;
295 if (num_front_channels < 0)
299 if (num_side_channels < 0)
303 if (num_back_channels < 0)
307 if (num_front_channels & 1) {
311 .elem_id = layout_map[i][1],
315 num_front_channels--;
317 if (num_front_channels >= 4) {
322 num_front_channels -= 2;
324 if (num_front_channels >= 2) {
329 num_front_channels -= 2;
331 while (num_front_channels >= 2) {
336 num_front_channels -= 2;
339 if (num_side_channels >= 2) {
344 num_side_channels -= 2;
346 while (num_side_channels >= 2) {
351 num_side_channels -= 2;
354 while (num_back_channels >= 4) {
359 num_back_channels -= 2;
361 if (num_back_channels >= 2) {
366 num_back_channels -= 2;
368 if (num_back_channels) {
372 .elem_id = layout_map[i][1],
383 .elem_id = layout_map[i][1],
392 .elem_id = layout_map[i][1],
399 total_non_cc_elements = n = i;
402 for (i = 1; i <
n; i++)
403 if (e2c_vec[i - 1].av_position > e2c_vec[i].av_position) {
411 for (i = 0; i < total_non_cc_elements; i++) {
412 layout_map[i][0] = e2c_vec[i].
syn_ele;
413 layout_map[i][1] = e2c_vec[i].
elem_id;
415 if (e2c_vec[i].av_position != UINT64_MAX) {
428 ac->
oc[0] = ac->
oc[1];
439 ac->
oc[1] = ac->
oc[0];
454 uint8_t layout_map[MAX_ELEM_ID * 4][3],
int tags,
455 enum OCStatus oc_type,
int get_new_frame)
458 int i, channels = 0,
ret;
462 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
470 for (i = 0; i < tags; i++) {
471 int type = layout_map[i][0];
472 int id = layout_map[i][1];
473 int position = layout_map[i][2];
480 if (ac->
oc[1].
m4ac.
ps == 1 && channels == 2) {
507 for (type = 3; type >= 0; type--) {
511 for (j = 0; j <= 1; j++) {
530 if (channel_config < 1 || channel_config > 7) {
532 "invalid default channel configuration (%d)\n",
538 *tags *
sizeof(*layout_map));
553 " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
571 uint8_t layout_map[MAX_ELEM_ID*4][3];
578 &layout_map_tags, 2) < 0)
590 uint8_t layout_map[MAX_ELEM_ID * 4][3];
597 &layout_map_tags, 1) < 0)
625 "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
626 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
647 "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
648 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
708 layout_map[0][0] = syn_ele;
710 layout_map[0][2] =
type;
724 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
734 "Sample rate index in program config element does not "
735 "match the sample rate index configured by the container.\n");
752 if (
get_bits_left(gb) < 4 * (num_front + num_side + num_back + num_lfe + num_assoc_data + num_cc)) {
795 int extension_flag,
ret, ep_config, res_flags;
796 uint8_t layout_map[MAX_ELEM_ID*4][3];
813 if (channel_config == 0) {
815 tags =
decode_pce(avctx, m4ac, layout_map, gb);
820 &tags, channel_config)))
826 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
832 if (extension_flag) {
845 "AAC data resilience (flags %x)",
861 "epConfig %d", ep_config);
873 int ret, ep_config, res_flags;
874 uint8_t layout_map[MAX_ELEM_ID*4][3];
876 const int ELDEXT_TERM = 0;
885 "AAC data resilience (flags %x)",
896 while (
get_bits(gb, 4) != ELDEXT_TERM) {
910 &tags, channel_config)))
919 "epConfig %d", ep_config);
946 av_dlog(avctx,
"audio specific config size %d\n", bit_size >> 3);
947 for (i = 0; i < bit_size >> 3; i++)
948 av_dlog(avctx,
"%02x ", data[i]);
955 sync_extension)) < 0)
959 "invalid sampling rate index %d\n",
966 "invalid low delay sampling rate index %d\n",
990 "Audio object type %s%d",
991 m4ac->
sbr == 1 ?
"SBR+" :
"",
997 "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1014 union {
unsigned u;
int s; }
v = { previous_val * 1664525
u + 1013904223 };
1037 if (92017 <= rate)
return 0;
1038 else if (75132 <= rate)
return 1;
1039 else if (55426 <= rate)
return 2;
1040 else if (46009 <= rate)
return 3;
1041 else if (37566 <= rate)
return 4;
1042 else if (27713 <= rate)
return 5;
1043 else if (23004 <= rate)
return 6;
1044 else if (18783 <= rate)
return 7;
1045 else if (13856 <= rate)
return 8;
1046 else if (11502 <= rate)
return 9;
1047 else if (9391 <= rate)
return 10;
1058 #define AAC_INIT_VLC_STATIC(num, size) \
1059 INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
1060 ff_aac_spectral_bits[num], sizeof(ff_aac_spectral_bits[num][0]), \
1061 sizeof(ff_aac_spectral_bits[num][0]), \
1062 ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), \
1063 sizeof(ff_aac_spectral_codes[num][0]), \
1088 uint8_t layout_map[MAX_ELEM_ID*4][3];
1089 int layout_map_tags;
1203 "Invalid Predictor Reset Group.\n");
1247 "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1260 for (i = 0; i < 7; i++) {
1305 "Prediction is not allowed in AAC-LC.\n");
1310 "LTP in ER AAC LD not yet implemented.\n");
1321 "Number of scalefactor bands in group (%d) "
1322 "exceeds limit (%d).\n",
1349 while (k < ics->max_sfb) {
1352 int sect_band_type =
get_bits(gb, 4);
1353 if (sect_band_type == 12) {
1358 sect_len_incr =
get_bits(gb, bits);
1359 sect_end += sect_len_incr;
1364 if (sect_end > ics->
max_sfb) {
1366 "Number of bands (%d) exceeds limit (%d).\n",
1370 }
while (sect_len_incr == (1 << bits) - 1);
1371 for (; k < sect_end; k++) {
1372 band_type [idx] = sect_band_type;
1373 band_type_run_end[idx++] = sect_end;
1391 unsigned int global_gain,
1394 int band_type_run_end[120])
1397 int offset[3] = { global_gain, global_gain - 90, 0 };
1401 for (i = 0; i < ics->
max_sfb;) {
1402 int run_end = band_type_run_end[idx];
1403 if (band_type[idx] ==
ZERO_BT) {
1404 for (; i < run_end; i++, idx++)
1408 for (; i < run_end; i++, idx++) {
1409 offset[2] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1410 clipped_offset = av_clip(offset[2], -155, 100);
1411 if (offset[2] != clipped_offset) {
1413 "If you heard an audible artifact, there may be a bug in the decoder. "
1414 "Clipped intensity stereo position (%d -> %d)",
1415 offset[2], clipped_offset);
1419 }
else if (band_type[idx] ==
NOISE_BT) {
1420 for (; i < run_end; i++, idx++) {
1421 if (noise_flag-- > 0)
1422 offset[1] +=
get_bits(gb, 9) - 256;
1424 offset[1] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1425 clipped_offset = av_clip(offset[1], -100, 155);
1426 if (offset[1] != clipped_offset) {
1428 "If you heard an audible artifact, there may be a bug in the decoder. "
1429 "Clipped noise gain (%d -> %d)",
1430 offset[1], clipped_offset);
1435 for (; i < run_end; i++, idx++) {
1436 offset[0] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1437 if (offset[0] > 255
U) {
1439 "Scalefactor (%d) out of range.\n", offset[0]);
1454 const uint16_t *swb_offset,
int num_swb)
1459 if (pulse_swb >= num_swb)
1461 pulse->
pos[0] = swb_offset[pulse_swb];
1463 if (pulse->
pos[0] >= swb_offset[num_swb])
1466 for (i = 1; i < pulse->
num_pulse; i++) {
1468 if (pulse->
pos[i] >= swb_offset[num_swb])
1483 int w,
filt, i, coef_len, coef_res, coef_compress;
1490 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
1494 if ((tns->
order[w][filt] =
get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
1496 "TNS filter order %d is greater than maximum %d.\n",
1497 tns->
order[w][filt], tns_max_order);
1501 if (tns->
order[w][filt]) {
1504 coef_len = coef_res + 3 - coef_compress;
1505 tmp2_idx = 2 * coef_compress + coef_res;
1507 for (i = 0; i < tns->
order[w][
filt]; i++)
1528 if (ms_present == 1) {
1529 for (idx = 0; idx < max_idx; idx++)
1531 }
else if (ms_present == 2) {
1537 static inline float *
VMUL2(
float *dst,
const float *
v,
unsigned idx,
1541 *dst++ = v[idx & 15] *
s;
1542 *dst++ = v[idx>>4 & 15] *
s;
1548 static inline float *
VMUL4(
float *dst,
const float *
v,
unsigned idx,
1552 *dst++ = v[idx & 3] *
s;
1553 *dst++ = v[idx>>2 & 3] *
s;
1554 *dst++ = v[idx>>4 & 3] *
s;
1555 *dst++ = v[idx>>6 & 3] *
s;
1561 static inline float *
VMUL2S(
float *dst,
const float *
v,
unsigned idx,
1562 unsigned sign,
const float *scale)
1566 s0.
f = s1.
f = *scale;
1567 s0.
i ^= sign >> 1 << 31;
1570 *dst++ = v[idx & 15] * s0.
f;
1571 *dst++ = v[idx>>4 & 15] * s1.
f;
1578 static inline float *
VMUL4S(
float *dst,
const float *
v,
unsigned idx,
1579 unsigned sign,
const float *scale)
1581 unsigned nz = idx >> 12;
1585 t.
i = s.
i ^ (sign & 1
U<<31);
1586 *dst++ = v[idx & 3] * t.
f;
1588 sign <<= nz & 1; nz >>= 1;
1589 t.
i = s.
i ^ (sign & 1
U<<31);
1590 *dst++ = v[idx>>2 & 3] * t.
f;
1592 sign <<= nz & 1; nz >>= 1;
1593 t.
i = s.
i ^ (sign & 1
U<<31);
1594 *dst++ = v[idx>>4 & 3] * t.
f;
1597 t.
i = s.
i ^ (sign & 1
U<<31);
1598 *dst++ = v[idx>>6 & 3] * t.
f;
1618 int pulse_present,
const Pulse *pulse,
1622 int i, k,
g, idx = 0;
1625 float *coef_base = coef;
1628 memset(coef + g * 128 + offsets[ics->
max_sfb], 0,
1629 sizeof(
float) * (c - offsets[ics->
max_sfb]));
1634 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1635 const unsigned cbt_m1 = band_type[idx] - 1;
1636 float *cfo = coef + offsets[
i];
1637 int off_len = offsets[i + 1] - offsets[
i];
1641 for (group = 0; group < g_len; group++, cfo+=128) {
1642 memset(cfo, 0, off_len *
sizeof(
float));
1644 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1645 for (group = 0; group < g_len; group++, cfo+=128) {
1649 for (k = 0; k < off_len; k++) {
1655 scale = sf[idx] / sqrtf(band_energy);
1664 switch (cbt_m1 >> 1) {
1666 for (group = 0; group < g_len; group++, cfo+=128) {
1676 cb_idx = cb_vector_idx[code];
1677 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1683 for (group = 0; group < g_len; group++, cfo+=128) {
1695 cb_idx = cb_vector_idx[code];
1696 nnz = cb_idx >> 8 & 15;
1699 cf =
VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1705 for (group = 0; group < g_len; group++, cfo+=128) {
1715 cb_idx = cb_vector_idx[code];
1716 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1723 for (group = 0; group < g_len; group++, cfo+=128) {
1735 cb_idx = cb_vector_idx[code];
1736 nnz = cb_idx >> 8 & 15;
1737 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1739 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1745 for (group = 0; group < g_len; group++, cfo+=128) {
1747 uint32_t *icf = (uint32_t *) cf;
1766 cb_idx = cb_vector_idx[code];
1772 for (j = 0; j < 2; j++) {
1794 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1795 *icf++ = (bits & 1
U<<31) | v;
1812 if (pulse_present) {
1814 for (i = 0; i < pulse->
num_pulse; i++) {
1815 float co = coef_base[ pulse->
pos[
i] ];
1816 while (offsets[idx + 1] <= pulse->
pos[i])
1818 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
1819 float ico = -pulse->
amp[
i];
1822 ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1824 coef_base[ pulse->
pos[
i] ] =
cbrtf(fabsf(ico)) * ico * sf[idx];
1835 tmp.
i = (tmp.
i + 0x00008000
U) & 0xFFFF0000U;
1843 tmp.
i = (tmp.
i + 0x00007FFF
U + (tmp.
i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
1851 pun.
i &= 0xFFFF0000
U;
1858 const float a = 0.953125;
1859 const float alpha = 0.90625;
1863 float r0 = ps->
r0, r1 = ps->
r1;
1864 float cor0 = ps->
cor0, cor1 = ps->
cor1;
1865 float var0 = ps->
var0, var1 = ps->
var1;
1867 k1 = var0 > 1 ? cor0 *
flt16_even(a / var0) : 0;
1868 k2 = var1 > 1 ? cor1 *
flt16_even(a / var1) : 0;
1903 k < sce->ics.swb_offset[sfb + 1];
1932 int global_gain, eld_syntax, er_syntax, pulse_present = 0;
1948 if (!common_window && !scale_flag) {
1962 if (!eld_syntax && (pulse_present =
get_bits1(gb))) {
1965 "Pulse tool not allowed in eight short sequence.\n");
1970 "Pulse data corrupt or invalid.\n");
1975 if (tns->
present && !er_syntax)
1984 if (tns->
present && er_syntax)
2007 int g,
i, group, idx = 0;
2010 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2014 for (group = 0; group < ics->
group_len[
g]; group++) {
2016 ch1 + group * 128 + offsets[i],
2017 offsets[i+1] - offsets[i]);
2040 int g, group,
i, idx = 0;
2044 for (i = 0; i < ics->
max_sfb;) {
2048 for (; i < bt_run_end; i++, idx++) {
2049 c = -1 + 2 * (sce1->
band_type[idx] - 14);
2051 c *= 1 - 2 * cpe->
ms_mask[idx];
2052 scale = c * sce1->
sf[idx];
2053 for (group = 0; group < ics->
group_len[
g]; group++)
2055 coef0 + group * 128 + offsets[i],
2057 offsets[i + 1] - offsets[i]);
2061 idx += bt_run_end -
i;
2077 int i,
ret, common_window, ms_present = 0;
2080 common_window = eld_syntax ||
get_bits1(gb);
2081 if (common_window) {
2092 if (ms_present == 3) {
2095 }
else if (ms_present)
2098 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
2100 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
2103 if (common_window) {
2117 1.09050773266525765921,
2118 1.18920711500272106672,
2153 scale = cce_scale[
get_bits(gb, 2)];
2158 for (c = 0; c < num_gain; c++) {
2162 float gain_cache = 1.0;
2165 gain = cge ?
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60: 0;
2166 gain_cache =
powf(scale, -gain);
2169 coup->
gain[
c][0] = gain_cache;
2172 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
2183 gain_cache =
powf(scale, -t) *
s;
2186 coup->
gain[
c][idx] = gain_cache;
2204 int num_excl_chan = 0;
2207 for (i = 0; i < 7; i++)
2211 return num_excl_chan / 7;
2223 int drc_num_bands = 1;
2244 for (i = 0; i < drc_num_bands; i++) {
2257 for (i = 0; i < drc_num_bands; i++) {
2268 int i, major, minor;
2275 for(i=0; i+1<
sizeof(
buf) && len>=8; i++, len-=8)
2282 if (sscanf(buf,
"libfaac %d.%d", &major, &minor) == 2){
2368 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
2380 if ((size = end - start) <= 0)
2392 for (m = 0; m <
size; m++, start += inc)
2393 for (i = 1; i <=
FFMIN(m, order); i++)
2394 coef[start] -= coef[start - i * inc] * lpc[i - 1];
2397 for (m = 0; m <
size; m++, start += inc) {
2398 tmp[0] = coef[
start];
2399 for (i = 1; i <=
FFMIN(m, order); i++)
2400 coef[start] += tmp[i] * lpc[i - 1];
2401 for (i = order; i > 0; i--)
2402 tmp[i] = tmp[i - 1];
2424 memset(in, 0, 448 *
sizeof(
float));
2431 memset(in + 1024 + 576, 0, 448 *
sizeof(
float));
2446 float *predTime = sce->
ret;
2448 int16_t num_samples = 2048;
2450 if (ltp->
lag < 1024)
2451 num_samples = ltp->
lag + 1024;
2452 for (i = 0; i < num_samples; i++)
2454 memset(&predTime[i], 0, (2048 - i) *
sizeof(
float));
2463 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
2464 sce->
coeffs[i] += predFreq[i];
2474 float *saved = sce->
saved;
2475 float *saved_ltp = sce->
coeffs;
2481 memcpy(saved_ltp, saved, 512 *
sizeof(
float));
2482 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2484 for (i = 0; i < 64; i++)
2485 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2487 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(
float));
2488 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2490 for (i = 0; i < 64; i++)
2491 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2494 for (i = 0; i < 512; i++)
2495 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * lwindow[511 - i];
2511 float *saved = sce->
saved;
2521 for (i = 0; i < 1024; i += 128)
2536 memcpy( out, saved, 448 *
sizeof(
float));
2544 memcpy( out + 448 + 4*128, temp, 64 *
sizeof(
float));
2547 memcpy( out + 576, buf + 64, 448 *
sizeof(
float));
2553 memcpy( saved, temp + 64, 64 *
sizeof(
float));
2557 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2559 memcpy( saved, buf + 512, 448 *
sizeof(
float));
2560 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2562 memcpy( saved, buf + 512, 512 *
sizeof(
float));
2571 float *saved = sce->
saved;
2580 memcpy(out, saved, 192 *
sizeof(
float));
2582 memcpy( out + 320, buf + 64, 192 *
sizeof(
float));
2588 memcpy(saved, buf + 256, 256 *
sizeof(
float));
2595 float *saved = sce->
saved;
2599 const int n2 = n >> 1;
2600 const int n4 = n >> 2;
2609 for (i = 0; i < n2; i+=2) {
2611 temp = in[
i ]; in[
i ] = -in[n - 1 -
i]; in[n - 1 -
i] =
temp;
2612 temp = -in[i + 1]; in[i + 1] = in[n - 2 -
i]; in[n - 2 -
i] =
temp;
2618 for (i = 0; i <
n; i+=2) {
2628 for (i = n4; i < n2; i ++) {
2629 out[i - n4] = buf[n2 - 1 -
i] * window[i - n4] +
2630 saved[ i + n2] * window[i + n - n4] +
2631 -saved[ n + n2 - 1 -
i] * window[i + 2*n - n4] +
2632 -saved[2*n + n2 +
i] * window[i + 3*n - n4];
2634 for (i = 0; i < n2; i ++) {
2635 out[n4 +
i] = buf[
i] * window[i + n2 - n4] +
2636 -saved[ n - 1 -
i] * window[i + n2 + n - n4] +
2637 -saved[ n +
i] * window[i + n2 + 2*n - n4] +
2638 saved[2*n + n - 1 -
i] * window[i + n2 + 3*n - n4];
2640 for (i = 0; i < n4; i ++) {
2641 out[n2 + n4 +
i] = buf[ i + n2] * window[i + n - n4] +
2642 -saved[ n2 - 1 -
i] * window[i + 2*n - n4] +
2643 -saved[ n + n2 +
i] * window[i + 3*n - n4];
2647 memmove(saved + n, saved, 2 * n *
sizeof(
float));
2648 memcpy( saved, buf, n *
sizeof(
float));
2662 float *dest = target->
coeffs;
2664 int g,
i, group, k, idx = 0;
2667 "Dependent coupling is not supported together with LTP\n");
2671 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2674 for (group = 0; group < ics->
group_len[
g]; group++) {
2675 for (k = offsets[i]; k < offsets[i + 1]; k++) {
2677 dest[group * 128 + k] += gain * src[group * 128 + k];
2699 float *dest = target->
ret;
2702 for (i = 0; i <
len; i++)
2703 dest[i] += gain * src[i];
2726 if (coup->
type[c] == type && coup->
id_select[c] == elem_id) {
2728 apply_coupling_method(ac, &cc->
ch[0], cce, index);
2733 apply_coupling_method(ac, &cc->
ch[1], cce, index++);
2758 for (type = 3; type >= 0; type--) {
2805 uint8_t layout_map[MAX_ELEM_ID*4][3];
2806 int layout_map_tags,
ret;
2814 "More than one AAC RDB per ADTS frame");
2837 layout_map_tags = 2;
2838 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
2840 layout_map[0][1] = 0;
2841 layout_map[1][1] = 1;
2888 if (chan_config < 0 || chan_config >= 8) {
2896 if (!(che=
get_che(ac, elem_type, elem_id))) {
2898 "channel element %d.%d is not allocated\n",
2899 elem_type, elem_id);
2905 switch (elem_type) {
2937 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
2938 int is_dmono, sce_count = 0;
2970 if (!(che=
get_che(ac, elem_type, elem_id))) {
2972 elem_type, elem_id);
2980 switch (elem_type) {
3007 uint8_t layout_map[MAX_ELEM_ID*4][3];
3017 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
3046 elem_type_prev = elem_type;
3061 samples <<= multiplier;
3072 if (side && side_size>=4)
3082 *got_frame_ptr = !!samples;
3088 *got_frame_ptr = !!samples;
3091 is_dmono = ac->
dmono_mode && sce_count == 2 &&
3107 int *got_frame_ptr,
AVPacket *avpkt)
3111 int buf_size = avpkt->
size;
3116 int new_extradata_size;
3119 &new_extradata_size);
3120 int jp_dualmono_size;
3125 if (new_extradata && 0) {
3132 memcpy(avctx->
extradata, new_extradata, new_extradata_size);
3143 if (jp_dualmono && jp_dualmono_size > 0)
3148 if (INT_MAX / 8 <= buf_size)
3168 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
3169 if (buf[buf_offset])
3172 return buf_size > buf_offset ? buf_consumed : buf_size;
3181 for (type = 0; type < 4; type++) {
3182 if (ac->
che[type][i])
3198 #define LOAS_SYNC_WORD 0x2b7
3224 int sync_extension = 0;
3225 int bits_consumed, esize;
3233 if (config_start_bit % 8) {
3235 "Non-byte-aligned audio-specific config");
3241 gb->
buffer + (config_start_bit / 8),
3242 asclen, sync_extension);
3244 if (bits_consumed < 0)
3258 esize = (bits_consumed+7) / 8;
3273 return bits_consumed;
3282 if (audio_mux_version)
3287 if (audio_mux_version)
3307 if (!audio_mux_version) {
3338 if (audio_mux_version) {
3361 int mux_slot_length = 0;
3364 mux_slot_length += tmp;
3365 }
while (tmp == 255);
3366 return mux_slot_length;
3382 if (!use_same_mux) {
3387 "no decoder config found\n");
3395 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
3397 "frame length mismatch %d << %d\n",
3407 int *got_frame_ptr,
AVPacket *avpkt)
3422 if (muxlength > avpkt->
size)
3446 "ADTS header detected, probably as result of configuration "
3492 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
3494 {
"dual_mono_mode",
"Select the channel to decode for dual mono",
int predictor_initialized
static int decode_fill(AACContext *ac, GetBitContext *gb, int len)
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 float * VMUL4S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
#define FF_PROFILE_AAC_SSR
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
This structure describes decoded (raw) audio or video data.
static int decode_audio_specific_config(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int bit_size, int sync_extension)
Decode audio specific configuration; reference: table 1.13.
static av_cold void cbrt_tableinit(void)
#define FF_PROFILE_AAC_ELD
static void imdct_and_windowing_eld(AACContext *ac, SingleChannelElement *sce)
ptrdiff_t const GLvoid * data
static const int8_t tags_per_config[16]
void(* mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
static void push_output_configuration(AACContext *ac)
Save current output configuration if and only if it has been locked.
static void apply_intensity_stereo(AACContext *ac, ChannelElement *cpe, int ms_present)
intensity stereo decoding; reference: 4.6.8.2.3
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
#define LIBAVUTIL_VERSION_INT
static void skip_bits_long(GetBitContext *s, int n)
static av_cold int init(AVCodecContext *avctx)
static float * VMUL2S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
ChannelElement * che[4][MAX_ELEM_ID]
static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
av_cold void ff_aac_sbr_init(void)
Initialize SBR.
static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Decode Individual Channel Stream info; reference: table 4.6.
float(* scalarproduct_float)(const float *v1, const float *v2, int len)
Calculate the scalar product of two vectors of floats.
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;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);returnNULL;}returnac;}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;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->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);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_dlog(ac->avr,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> in
void(* update_ltp)(AACContext *ac, SingleChannelElement *sce)
void(* imdct_and_windowing)(AACContext *ac, SingleChannelElement *sce)
#define AACDEC_FLAGS
AVOptions for Japanese DTV specific extensions (ADTS only)
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)
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats, and store the result in a vector of floats...
#define FF_ARRAY_ELEMS(a)
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
static void apply_independent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
static int frame_configure_elements(AVCodecContext *avctx)
static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac, uint8_t(*layout_map)[3], GetBitContext *gb)
Decode program configuration element; reference: table 4.2.
Dynamic Range Control - decoded from the bitstream but not processed further.
float coef[8][4][TNS_MAX_ORDER]
Reference: libavcodec/aacdec.c.
static av_always_inline void predict(PredictorState *ps, float *coef, int output_enable)
enum RawDataBlockType type[8]
Type of channel element to be coupled - SCE or CPE.
Spectral data are scaled white noise not coded in the bitstream.
static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024], GetBitContext *gb, const float sf[120], int pulse_present, const Pulse *pulse, const IndividualChannelStream *ics, enum BandType band_type[120])
Decode spectral data; reference: table 4.50.
int band_incr
Number of DRC bands greater than 1 having DRC info.
const uint8_t ff_aac_num_swb_128[]
av_cold void ff_aac_sbr_ctx_close(SpectralBandReplication *sbr)
Close one SBR context.
int dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
const uint16_t * swb_offset
table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular wind...
N Error Resilient Long Term Prediction.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
enum AVSampleFormat sample_fmt
audio sample format
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
Apply AAC-Main style frequency domain prediction.
static const uint8_t aac_channel_layout_map[7][5][3]
uint8_t layout_map[MAX_ELEM_ID *4][3]
Output configuration under trial specified by an inband PCE.
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
const uint16_t *const ff_swb_offset_480[]
SingleChannelElement ch[2]
const uint16_t *const ff_swb_offset_512[]
const uint8_t ff_tns_max_bands_480[]
static av_cold int end(AVCodecContext *avctx)
N Error Resilient Low Delay.
static int aac_decode_frame_int(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb, AVPacket *avpkt)
static VLC vlc_scalefactors
#define FF_PROFILE_UNKNOWN
const uint8_t ff_aac_scalefactor_bits[121]
CouplingPoint
The point during decoding at which channel coupling is applied.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int num_coupled
number of target elements
#define AV_CH_LOW_FREQUENCY
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
int ff_decode_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, GetBitContext *gb_host, int crc, int cnt, int id_aac)
Decode Spectral Band Replication extension data; reference: table 4.55.
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.
SingleChannelElement * output_element[MAX_CHANNELS]
Points to each SingleChannelElement.
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 count_paired_channels(uint8_t(*layout_map)[3], int tags, int pos, int *current)
static int get_bits_count(const GetBitContext *s)
Scalefactor data are intensity stereo positions.
bitstream reader API header.
static int read_stream_mux_config(struct LATMContext *latmctx, GetBitContext *gb)
#define AV_LOG_VERBOSE
Detailed information.
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.
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int id_select[8]
element id
const float *const ff_aac_codebook_vector_vals[]
static int decode_dynamic_range(DynamicRangeControl *che_drc, GetBitContext *gb)
Decode dynamic range information; reference: table 4.52.
N Error Resilient Low Complexity.
ChannelElement * tag_che_map[4][MAX_ELEM_ID]
Output configuration set in a global header but not yet locked.
AACContext aac_ctx
containing AACContext
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 uint32_t latm_get_value(GetBitContext *b)
static av_cold int aac_decode_close(AVCodecContext *avctx)
static int get_bits_left(GetBitContext *gb)
int dyn_rng_sgn[17]
DRC sign information; 0 - positive, 1 - negative.
float coeffs[1024]
coefficients for IMDCT, maybe processed
#define UPDATE_CACHE(name, gb)
static double alpha(void *priv, double x, double y)
PredictorState predictor_state[MAX_PREDICTORS]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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.
#define FF_PROFILE_AAC_HE
#define FF_PROFILE_AAC_HE_V2
SpectralBandReplication sbr
#define FF_PROFILE_AAC_MAIN
#define AV_EF_EXPLODE
abort decoding on minor error detection
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats and store the result in a vector of floats...
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
int frame_length_type
0/1 variable/fixed frame length
const uint8_t ff_aac_num_swb_1024[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
float ff_aac_kbd_long_1024[1024]
av_cold void ff_imdct15_uninit(IMDCT15Context **ps)
Free an iMDCT.
Spectral Band Replication definitions and structures.
const char * name
Name of the codec implementation.
uint8_t max_sfb
number of scalefactor bands per group
static int latm_decode_frame(AVCodecContext *avctx, void *out, int *got_frame_ptr, AVPacket *avpkt)
void ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int id_aac, float *L, float *R)
Apply one SBR element to one AAC element.
#define LOAS_SYNC_WORD
11 bits LOAS sync word
AVCodec ff_aac_latm_decoder
const float ff_aac_eld_window_512[1920]
static const uint8_t offset[127][2]
#define CLOSE_READER(name, gb)
int num_swb
number of scalefactor window bands
Libavcodec external API header.
#define AAC_INIT_VLC_STATIC(num, size)
int prog_ref_level
A reference level for the long-term program audio level for all channels combined.
Output configuration locked in place.
uint64_t channel_layout
Audio channel layout.
#define SKIP_BITS(name, gb, num)
#define POW_SF2_ZERO
ff_aac_pow2sf_tab index corresponding to pow(2, 0);
static const float cce_scale[]
int warned_remapping_once
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
#define FF_DEBUG_STARTCODE
N Error Resilient Scalable.
static int read_payload_length_info(struct LATMContext *ctx, GetBitContext *gb)
AAC Spectral Band Replication function declarations.
enum WindowSequence window_sequence[2]
const uint8_t ff_aac_num_swb_512[]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
static void pop_output_configuration(AACContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked...
int predictor_reset_group
static void reset_predictor_group(PredictorState *ps, int group_num)
int dyn_rng_ctl[17]
DRC magnitude information.
int initialized
initialized after a valid extradata was seen
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb, int ms_present)
Decode Mid/Side data; reference: table 4.54.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
void ff_aacdec_init_mips(AACContext *c)
#define LAST_SKIP_BITS(name, gb, num)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
AAC definitions and structures.
#define AV_CH_FRONT_LEFT_OF_CENTER
const uint8_t ff_tns_max_bands_1024[]
#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 AV_CH_FRONT_CENTER
static void apply_dependent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
int pce_instance_tag
Indicates with which program the DRC info is associated.
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...
#define SHOW_UBITS(name, gb, num)
#define AV_CH_FRONT_RIGHT_OF_CENTER
static void flush(AVCodecContext *avctx)
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
Decode GA "General Audio" specific configuration; reference: table 4.1.
int ch_select[8]
[0] shared list of gains; [1] list of gains for right channel; [2] list of gains for left channel; [3...
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
Mid/Side stereo decoding; reference: 4.6.8.1.3.
int frame_size
Number of samples per channel in an audio frame.
int frame_length
frame length for fixed frame length
int force_dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
#define AV_LOG_INFO
Standard information.
int warned_num_aac_frames
AVSampleFormat
Audio sample formats.
int audio_mux_version_A
LATM syntax version.
int sample_rate
samples per second
float ff_aac_kbd_short_128[128]
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 uint32_t cbrt_tab[1<< 13]
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define AV_CH_LAYOUT_NATIVE
Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests ...
#define FF_PROFILE_AAC_LTP
static void update_ltp(AACContext *ac, SingleChannelElement *sce)
Update the LTP buffer for next frame.
main external API structure.
static void(WINAPI *cond_broadcast)(pthread_cond_t *cond)
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.
#define FF_PROFILE_AAC_LOW
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define OPEN_READER(name, gb)
IndividualChannelStream ics
int avpriv_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
Parse AAC frame header.
static av_always_inline float cbrtf(float x)
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
Describe the class of an AVClass context structure.
int sample_rate
Sample rate of the audio data.
static const AVProfile profiles[]
static void skip_bits(GetBitContext *s, int n)
static av_cold int latm_decode_init(AVCodecContext *avctx)
static void spectral_to_sample(AACContext *ac)
Convert spectral data to float samples, applying all supported tools as appropriate.
static const AVClass aac_decoder_class
static av_always_inline int lcg_random(unsigned previous_val)
linear congruential pseudorandom number generator
void(* imdct_half)(struct IMDCT15Context *s, float *dst, const float *src, ptrdiff_t src_stride, float scale)
Calculate the middle half of the iMDCT.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Recommmends skipping the specified number of samples.
#define GET_CACHE(name, gb)
static int read_audio_mux_element(struct LATMContext *latmctx, GetBitContext *gb)
static int latm_decode_audio_specific_config(struct LATMContext *latmctx, GetBitContext *gb, int asclen)
static void apply_ltp(AACContext *ac, SingleChannelElement *sce)
Apply the long term prediction.
static float * VMUL2(float *dst, const float *v, unsigned idx, const float *scale)
OCStatus
Output configuration status.
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
N Error Resilient Bit-Sliced Arithmetic Coding.
av_cold void ff_aac_sbr_ctx_init(AACContext *ac, SpectralBandReplication *sbr)
Initialize one SBR context.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
static void reset_all_predictors(PredictorState *ps)
av_cold int ff_imdct15_init(IMDCT15Context **ps, int N)
Init an iMDCT of the length 2 * 15 * (2^N)
const uint32_t ff_aac_scalefactor_code[121]
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Output configuration under trial specified by a frame header.
const uint8_t ff_tns_max_bands_128[]
static const uint64_t aac_channel_layout[8]
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype, int wtype, float *in, float *prev, int ch)
float ltp_state[3072]
time signal for LTP
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static const int8_t filt[NUMTAPS]
int band_type_run_end[120]
band type run end points
float sf[120]
scalefactors
#define AV_CH_BACK_CENTER
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int band_top[17]
Indicates the top of the i-th DRC band in units of 4 spectral lines.
static void aacdec_init(AACContext *ac)
#define FF_DEBUG_PICT_INFO
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
Scalefactor data are intensity stereo positions.
N Error Resilient Enhanced Low Delay.
av_cold void ff_aac_tableinit(void)
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
Decode a channel_pair_element; reference: table 4.4.
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;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);returnNULL;}returnac;}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;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->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);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_dlog(ac->avr,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
DynamicRangeControl che_drc
static av_always_inline void reset_predict_state(PredictorState *ps)
OutputConfiguration oc[2]
An AV_PKT_DATA_JP_DUALMONO side data packet indicates that the packet may contain "dual mono" audio s...
const uint8_t ff_aac_pred_sfb_max[]
void(* apply_ltp)(AACContext *ac, SingleChannelElement *sce)
uint8_t prediction_used[41]
common internal api header.
const float ff_aac_eld_window_480[1800]
Single Channel Element - used for both SCE and LFE elements.
#define CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
const uint8_t ff_aac_num_swb_480[]
const uint16_t *const ff_swb_offset_1024[]
static const AVOption options[]
static av_cold int aac_decode_init(AVCodecContext *avctx)
#define AV_EF_BITSTREAM
detect bitstream specification deviations
Individual Channel Stream.
float ff_aac_pow2sf_tab[428]
static ChannelElement * get_che(AACContext *ac, int type, int elem_id)
int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf, int bit_size, int sync_extension)
Parse MPEG-4 systems extradata to retrieve audio configuration.
static const float ltp_coef[8]
const uint16_t *const ff_aac_codebook_vector_idx[]
static void windowing_and_mdct_ltp(AACContext *ac, float *out, float *in, IndividualChannelStream *ics)
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP...
channel element - generic struct for SCE/CPE/CCE/LFE
void(* windowing_and_mdct_ltp)(AACContext *ac, float *out, float *in, IndividualChannelStream *ics)
static int aac_decode_er_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb)
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
const uint8_t ff_tns_max_bands_512[]
Scalefactors and spectral data are all zero.
int channels
number of audio channels
struct AVCodecInternal * internal
Private context used for internal data.
const uint8_t ff_mpeg4audio_channels[8]
VLC_TYPE(* table)[2]
code, bits
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
static int decode_scalefactors(AACContext *ac, float 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.
void(* apply_tns)(float coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
static const uint8_t * align_get_bits(GetBitContext *s)
enum BandType band_type[128]
band types
static int set_default_channel_config(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 int sample_rate_idx(int rate)
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...
#define AV_CH_FRONT_RIGHT
static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
Skip data_stream_element; reference: table 4.10.
static enum AVSampleFormat sample_fmts[]
static int decode_eld_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
float ret_buf[2048]
PCM output buffer.
int sbr
-1 implicit, 1 presence
uint8_t * av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
static void apply_tns(float coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4...
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
Decode coupling_channel_element; reference: table 4.8.
static int aac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
#define FFSWAP(type, a, b)
int ps
-1 implicit, 1 presence
int8_t used[MAX_LTP_LONG_SFB]
static av_always_inline float flt16_trunc(float pf)
const uint16_t *const ff_swb_offset_128[]
static av_always_inline float flt16_even(float pf)
static const float *const tns_tmp2_map[4]
uint8_t ** extended_data
pointers to the data planes/channels.
uint64_t request_channel_layout
Request decoder to use this channel layout if it can (0 for default)
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static VLC vlc_spectral[11]
int strict_std_compliance
strictly follow the standard (MPEG4, ...).
static int count_channels(uint8_t(*layout)[3], int tags)
#define FF_PROFILE_AAC_LD
void ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
static av_always_inline float flt16_round(float pf)
static void decode_ltp(LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb)
Decode Long Term Prediction data; reference: table 4.xx.
static float * VMUL4(float *dst, const float *v, unsigned idx, const float *scale)