115 static const char overread_err[] =
"Input buffer exhausted before END element found\n";
168 int i, type, sum = 0;
170 for (type = 0; type < 4; type++) {
193 int type,
int id,
int *channels)
197 if (che_pos[type][
id]) {
198 if (!ac->
che[type][
id]) {
211 if (ac->
che[type][
id])
229 int channel_config,
enum OCStatus oc_type)
232 int i, type, channels = 0, ret;
234 if (new_che_pos != che_pos)
235 memcpy(che_pos, new_che_pos, 4 * MAX_ELEM_ID *
sizeof(new_che_pos[0][0]));
237 if (channel_config) {
246 memset(ac->
tag_che_map, 0, 4 * MAX_ELEM_ID *
sizeof(ac->
che[0][0]));
260 for (type = 0; type < 4; type++) {
307 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
314 av_log(avctx,
AV_LOG_WARNING,
"Sample rate index in program config element does not match the sample rate index configured by the container.\n");
364 if (channel_config < 1 || channel_config > 7) {
381 if (channel_config != 2)
383 if (channel_config > 1)
385 if (channel_config == 4)
387 if (channel_config > 4)
388 new_che_pos[
TYPE_CPE][(channel_config == 7) + 1]
390 if (channel_config > 5)
392 if (channel_config == 7)
412 int extension_flag, ret;
427 memset(new_che_pos, 0, 4 *
MAX_ELEM_ID *
sizeof(new_che_pos[0][0]));
428 if (channel_config == 0) {
430 if ((ret =
decode_pce(avctx, m4ac, new_che_pos, gb)))
439 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
445 if (extension_flag) {
481 const uint8_t *
data,
int bit_size,
516 av_dlog(avctx,
"AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
532 return previous_val * 1664525 + 1013904223;
554 if (92017 <= rate)
return 0;
555 else if (75132 <= rate)
return 1;
556 else if (55426 <= rate)
return 2;
557 else if (46009 <= rate)
return 3;
558 else if (37566 <= rate)
return 4;
559 else if (27713 <= rate)
return 5;
560 else if (23004 <= rate)
return 6;
561 else if (18783 <= rate)
return 7;
562 else if (13856 <= rate)
return 8;
563 else if (11502 <= rate)
return 9;
564 else if (9391 <= rate)
return 10;
575 #define AAC_INIT_VLC_STATIC(num, size) \
576 INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
577 ff_aac_spectral_bits[num], sizeof( ff_aac_spectral_bits[num][0]), sizeof( ff_aac_spectral_bits[num][0]), \
578 ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), sizeof(ff_aac_spectral_codes[num][0]), \
584 float output_scale_factor;
623 output_scale_factor = 1.0 / 32768.0;
626 output_scale_factor = 1.0;
742 for (i = 0; i < 7; i++) {
780 "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
804 while (k < ics->max_sfb) {
805 uint8_t sect_end = k;
807 int sect_band_type =
get_bits(gb, 4);
808 if (sect_band_type == 12) {
814 sect_end += sect_len_incr;
821 "Number of bands (%d) exceeds limit (%d).\n",
825 }
while (sect_len_incr == (1 << bits) - 1);
826 for (; k < sect_end; k++) {
827 band_type [idx] = sect_band_type;
828 band_type_run_end[idx++] = sect_end;
846 unsigned int global_gain,
849 int band_type_run_end[120])
852 int offset[3] = { global_gain, global_gain - 90, 0 };
855 static const char *sf_str[3] = {
"Global gain",
"Noise gain",
"Intensity stereo position" };
857 for (i = 0; i < ics->
max_sfb;) {
858 int run_end = band_type_run_end[idx];
859 if (band_type[idx] ==
ZERO_BT) {
860 for (; i < run_end; i++, idx++)
863 for (; i < run_end; i++, idx++) {
864 offset[2] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
865 clipped_offset = av_clip(offset[2], -155, 100);
866 if (offset[2] != clipped_offset) {
868 "position clipped (%d -> %d).\nIf you heard an "
869 "audible artifact, there may be a bug in the "
870 "decoder. ", offset[2], clipped_offset);
874 }
else if (band_type[idx] ==
NOISE_BT) {
875 for (; i < run_end; i++, idx++) {
876 if (noise_flag-- > 0)
879 offset[1] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
880 clipped_offset = av_clip(offset[1], -100, 155);
881 if (offset[1] != clipped_offset) {
883 "(%d -> %d).\nIf you heard an audible "
884 "artifact, there may be a bug in the decoder. ",
885 offset[1], clipped_offset);
890 for (; i < run_end; i++, idx++) {
891 offset[0] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
892 if (offset[0] > 255
U) {
894 "%s (%d) out of range.\n", sf_str[0], offset[0]);
909 const uint16_t *swb_offset,
int num_swb)
914 if (pulse_swb >= num_swb)
916 pulse->
pos[0] = swb_offset[pulse_swb];
918 if (pulse->
pos[0] > 1023)
923 if (pulse->
pos[i] > 1023)
938 int w, filt, i, coef_len, coef_res, coef_compress;
945 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
949 if ((tns->
order[w][filt] =
get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
951 tns->
order[w][filt], tns_max_order);
952 tns->
order[w][filt] = 0;
955 if (tns->
order[w][filt]) {
958 coef_len = coef_res + 3 - coef_compress;
959 tmp2_idx = 2 * coef_compress + coef_res;
961 for (i = 0; i < tns->
order[w][filt]; i++)
981 if (ms_present == 1) {
984 }
else if (ms_present == 2) {
990 static inline float *
VMUL2(
float *dst,
const float *
v,
unsigned idx,
994 *dst++ = v[idx & 15] * s;
995 *dst++ = v[idx>>4 & 15] * s;
1001 static inline float *
VMUL4(
float *dst,
const float *
v,
unsigned idx,
1005 *dst++ = v[idx & 3] * s;
1006 *dst++ = v[idx>>2 & 3] * s;
1007 *dst++ = v[idx>>4 & 3] * s;
1008 *dst++ = v[idx>>6 & 3] * s;
1014 static inline float *
VMUL2S(
float *dst,
const float *
v,
unsigned idx,
1015 unsigned sign,
const float *
scale)
1020 s0.
i ^= sign >> 1 << 31;
1023 *dst++ = v[idx & 15] * s0.
f;
1024 *dst++ = v[idx>>4 & 15] * s1.
f;
1031 static inline float *
VMUL4S(
float *dst,
const float *
v,
unsigned idx,
1032 unsigned sign,
const float *
scale)
1034 unsigned nz = idx >> 12;
1038 t.
i = s.
i ^ (sign & 1
U<<31);
1039 *dst++ = v[idx & 3] * t.
f;
1041 sign <<= nz & 1; nz >>= 1;
1042 t.
i = s.
i ^ (sign & 1
U<<31);
1043 *dst++ = v[idx>>2 & 3] * t.
f;
1045 sign <<= nz & 1; nz >>= 1;
1046 t.
i = s.
i ^ (sign & 1
U<<31);
1047 *dst++ = v[idx>>4 & 3] * t.
f;
1049 sign <<= nz & 1; nz >>= 1;
1050 t.
i = s.
i ^ (sign & 1
U<<31);
1051 *dst++ = v[idx>>6 & 3] * t.
f;
1071 int pulse_present,
const Pulse *pulse,
1075 int i, k,
g, idx = 0;
1078 float *coef_base = coef;
1081 memset(coef + g * 128 + offsets[ics->
max_sfb], 0,
sizeof(
float) * (c - offsets[ics->
max_sfb]));
1086 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1087 const unsigned cbt_m1 = band_type[idx] - 1;
1088 float *cfo = coef + offsets[
i];
1089 int off_len = offsets[i + 1] - offsets[
i];
1093 for (group = 0; group < g_len; group++, cfo+=128) {
1094 memset(cfo, 0, off_len *
sizeof(
float));
1096 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1097 for (group = 0; group < g_len; group++, cfo+=128) {
1101 for (k = 0; k < off_len; k++) {
1107 scale = sf[idx] / sqrtf(band_energy);
1116 switch (cbt_m1 >> 1) {
1118 for (group = 0; group < g_len; group++, cfo+=128) {
1128 cb_idx = cb_vector_idx[code];
1129 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1135 for (group = 0; group < g_len; group++, cfo+=128) {
1147 cb_idx = cb_vector_idx[code];
1148 nnz = cb_idx >> 8 & 15;
1151 cf =
VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1157 for (group = 0; group < g_len; group++, cfo+=128) {
1167 cb_idx = cb_vector_idx[code];
1168 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1175 for (group = 0; group < g_len; group++, cfo+=128) {
1187 cb_idx = cb_vector_idx[code];
1188 nnz = cb_idx >> 8 & 15;
1189 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1191 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1197 for (group = 0; group < g_len; group++, cfo+=128) {
1199 uint32_t *icf = (uint32_t *) cf;
1218 cb_idx = cb_vector_idx[code];
1224 for (j = 0; j < 2; j++) {
1232 b = 31 - av_log2(~b);
1246 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1247 *icf++ = (bits & 1
U<<31) | v;
1264 if (pulse_present) {
1266 for (i = 0; i < pulse->
num_pulse; i++) {
1267 float co = coef_base[ pulse->
pos[
i] ];
1268 while (offsets[idx + 1] <= pulse->
pos[i])
1270 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
1271 float ico = -pulse->
amp[
i];
1274 ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1276 coef_base[ pulse->
pos[
i] ] = cbrtf(fabsf(ico)) * ico * sf[idx];
1287 tmp.
i = (tmp.
i + 0x00008000
U) & 0xFFFF0000U;
1295 tmp.
i = (tmp.
i + 0x00007FFF
U + (tmp.
i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
1303 pun.
i &= 0xFFFF0000
U;
1310 const float a = 0.953125;
1311 const float alpha = 0.90625;
1315 float r0 = ps->
r0, r1 = ps->
r1;
1316 float cor0 = ps->
cor0, cor1 = ps->
cor1;
1317 float var0 = ps->
var0, var1 = ps->
var1;
1319 k1 = var0 > 1 ? cor0 *
flt16_even(a / var0) : 0;
1320 k2 = var1 > 1 ? cor1 *
flt16_even(a / var1) : 0;
1352 for (k = sce->
ics.
swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1377 float *out = sce->
coeffs;
1378 int global_gain, pulse_present = 0;
1387 if (!common_window && !scale_flag) {
1434 int g,
i, group, idx = 0;
1437 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1440 for (group = 0; group < ics->
group_len[
g]; group++) {
1442 ch1 + group * 128 + offsets[i],
1443 offsets[i+1] - offsets[i]);
1465 int g, group,
i, idx = 0;
1469 for (i = 0; i < ics->
max_sfb;) {
1472 for (; i < bt_run_end; i++, idx++) {
1473 c = -1 + 2 * (sce1->
band_type[idx] - 14);
1475 c *= 1 - 2 * cpe->
ms_mask[idx];
1476 scale = c * sce1->
sf[idx];
1477 for (group = 0; group < ics->
group_len[
g]; group++)
1479 coef0 + group * 128 + offsets[i],
1481 offsets[i + 1] - offsets[i]);
1485 idx += bt_run_end -
i;
1501 int i, ret, common_window, ms_present = 0;
1504 if (common_window) {
1514 if (ms_present == 3) {
1517 }
else if (ms_present)
1520 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
1522 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
1525 if (common_window) {
1539 1.09050773266525765921,
1540 1.18920711500272106672,
1580 for (c = 0; c < num_gain; c++) {
1584 float gain_cache = 1.;
1587 gain = cge ?
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60: 0;
1588 gain_cache = powf(scale, -gain);
1591 coup->
gain[c][0] = gain_cache;
1594 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
1605 gain_cache = powf(scale, -t) * s;
1608 coup->
gain[c][idx] = gain_cache;
1626 int num_excl_chan = 0;
1629 for (i = 0; i < 7; i++)
1633 return num_excl_chan / 7;
1647 int drc_num_bands = 1;
1668 for (i = 0; i < drc_num_bands; i++) {
1681 for (i = 0; i < drc_num_bands; i++) {
1750 int bottom, top, order, start, end,
size, inc;
1756 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
1759 order = tns->
order[w][filt];
1768 if ((size = end - start) <= 0)
1780 for (m = 0; m <
size; m++, start += inc)
1781 for (i = 1; i <=
FFMIN(m, order); i++)
1782 coef[start] -= coef[start - i * inc] * lpc[i - 1];
1785 for (m = 0; m <
size; m++, start += inc) {
1786 tmp[0] = coef[start];
1787 for (i = 1; i <=
FFMIN(m, order); i++)
1788 coef[start] += tmp[i] * lpc[i - 1];
1789 for (i = order; i > 0; i--)
1790 tmp[i] = tmp[i - 1];
1812 memset(in, 0, 448 *
sizeof(
float));
1819 memset(in + 1024 + 576, 0, 448 *
sizeof(
float));
1834 float *predTime = sce->
ret;
1836 int16_t num_samples = 2048;
1838 if (ltp->
lag < 1024)
1839 num_samples = ltp->
lag + 1024;
1840 for (i = 0; i < num_samples; i++)
1842 memset(&predTime[i], 0, (2048 - i) *
sizeof(
float));
1851 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
1852 sce->
coeffs[i] += predFreq[i];
1862 float *saved = sce->
saved;
1863 float *saved_ltp = sce->
coeffs;
1869 memcpy(saved_ltp, saved, 512 *
sizeof(
float));
1870 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
1872 for (i = 0; i < 64; i++)
1873 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
1875 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(
float));
1876 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
1878 for (i = 0; i < 64; i++)
1879 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
1882 for (i = 0; i < 512; i++)
1883 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * lwindow[511 - i];
1898 float *out = sce->
ret;
1899 float *saved = sce->
saved;
1904 float *temp = ac->
temp;
1909 for (i = 0; i < 1024; i += 128)
1924 memcpy( out, saved, 448 *
sizeof(
float));
1932 memcpy( out + 448 + 4*128, temp, 64 *
sizeof(
float));
1935 memcpy( out + 576, buf + 64, 448 *
sizeof(
float));
1941 memcpy( saved, temp + 64, 64 *
sizeof(
float));
1945 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
1947 memcpy( saved, buf + 512, 448 *
sizeof(
float));
1948 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
1950 memcpy( saved, buf + 512, 512 *
sizeof(
float));
1965 float *dest = target->
coeffs;
1966 const float *src = cce->
ch[0].
coeffs;
1967 int g,
i, group, k, idx = 0;
1970 "Dependent coupling is not supported together with LTP\n");
1974 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1977 for (group = 0; group < ics->
group_len[
g]; group++) {
1978 for (k = offsets[i]; k < offsets[i + 1]; k++) {
1980 dest[group * 128 + k] += gain * src[group * 128 + k];
2001 const float *src = cce->
ch[0].
ret;
2002 float *dest = target->
ret;
2005 for (i = 0; i <
len; i++)
2006 dest[i] += gain * src[i];
2029 if (coup->
type[c] == type && coup->
id_select[c] == elem_id) {
2031 apply_coupling_method(ac, &cc->
ch[0], cce, index);
2036 apply_coupling_method(ac, &cc->
ch[1], cce, index++);
2050 for (type = 3; type >= 0; type--) {
2099 memset(new_che_pos, 0, 4 *
MAX_ELEM_ID *
sizeof(new_che_pos[0][0]));
2137 int samples = 0, multiplier, audio_found = 0;
2156 if (!(che=
get_che(ac, elem_type, elem_id))) {
2158 elem_type, elem_id);
2164 switch (elem_type) {
2191 memset(new_che_pos, 0, 4 *
MAX_ELEM_ID *
sizeof(new_che_pos[0][0]));
2196 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2220 elem_type_prev = elem_type;
2234 samples <<= multiplier;
2268 int *got_frame_ptr,
AVPacket *avpkt)
2271 const uint8_t *buf = avpkt->
data;
2272 int buf_size = avpkt->
size;
2277 int new_extradata_size;
2280 &new_extradata_size);
2282 if (new_extradata) {
2289 memcpy(avctx->
extradata, new_extradata, new_extradata_size);
2302 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2303 if (buf[buf_offset])
2306 return buf_size > buf_offset ? buf_consumed : buf_size;
2315 for (type = 0; type < 4; type++) {
2316 if (ac->
che[type][i])
2329 #define LOAS_SYNC_WORD 0x2b7
2355 int sync_extension = 0;
2356 int bits_consumed, esize;
2364 if (config_start_bit % 8) {
2366 "config not byte aligned.\n", 1);
2372 gb->
buffer + (config_start_bit / 8),
2373 asclen, sync_extension);
2375 if (bits_consumed < 0)
2384 esize = (bits_consumed+7) / 8;
2399 return bits_consumed;
2405 int ret, audio_mux_version =
get_bits(gb, 1);
2408 if (audio_mux_version)
2413 if (audio_mux_version)
2421 "multiple programs are not supported\n", 1);
2430 "multiple layers are not supported\n", 1);
2435 if (!audio_mux_version) {
2466 if (audio_mux_version) {
2489 int mux_slot_length = 0;
2492 mux_slot_length += tmp;
2493 }
while (tmp == 255);
2494 return mux_slot_length;
2509 uint8_t use_same_mux =
get_bits(gb, 1);
2510 if (!use_same_mux) {
2515 "no decoder config found\n");
2523 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
2525 "frame length mismatch %d << %d\n",
2535 int *got_frame_ptr,
AVPacket *avpkt)
2549 if (muxlength > avpkt->
size)
2570 "ADTS header detected, probably as result of configuration "