83 #include "libavutil/opt.h"
101 #include "libavutil/intfloat.h"
119 enum OCStatus oc_type,
int get_new_frame);
121 #define overread_err "Input buffer exhausted before END element found\n"
126 for (i = 0; i < tags; i++) {
127 int syn_ele =
layout[i][0];
129 sum += (1 + (syn_ele ==
TYPE_CPE)) *
149 int type,
int id,
int *channels)
152 if (!ac->
che[type][
id]) {
169 if (ac->
che[type][
id])
179 int type,
id, ch, ret;
182 for (type = 0; type < 4; type++) {
203 for (ch = 0; ch < avctx->
channels; ch++) {
220 uint64_t right,
int pos)
222 if (layout_map[offset][0] ==
TYPE_CPE) {
224 .av_position = left | right, .syn_ele =
TYPE_CPE,
225 .elem_id = layout_map[
offset ][1], .aac_position = pos };
229 .av_position = left, .syn_ele =
TYPE_SCE,
230 .elem_id = layout_map[
offset ][1], .aac_position = pos };
232 .av_position = right, .syn_ele =
TYPE_SCE,
233 .elem_id = layout_map[offset + 1][1], .aac_position = pos };
239 int num_pos_channels = 0;
243 for (i = *current; i < tags; i++) {
244 if (layout_map[i][2] != pos)
254 num_pos_channels += 2;
265 return num_pos_channels;
270 int i, n, total_non_cc_elements;
272 int num_front_channels, num_side_channels, num_back_channels;
281 if (num_front_channels < 0)
285 if (num_side_channels < 0)
289 if (num_back_channels < 0)
293 if (num_front_channels & 1) {
298 num_front_channels--;
300 if (num_front_channels >= 4) {
305 num_front_channels -= 2;
307 if (num_front_channels >= 2) {
312 num_front_channels -= 2;
314 while (num_front_channels >= 2) {
319 num_front_channels -= 2;
322 if (num_side_channels >= 2) {
327 num_side_channels -= 2;
329 while (num_side_channels >= 2) {
334 num_side_channels -= 2;
337 while (num_back_channels >= 4) {
342 num_back_channels -= 2;
344 if (num_back_channels >= 2) {
349 num_back_channels -= 2;
351 if (num_back_channels) {
373 total_non_cc_elements = n = i;
376 for (i = 1; i < n; i++) {
377 if (e2c_vec[i-1].av_position > e2c_vec[i].av_position) {
386 for (i = 0; i < total_non_cc_elements; i++) {
387 layout_map[i][0] = e2c_vec[i].
syn_ele;
388 layout_map[i][1] = e2c_vec[i].
elem_id;
390 if (e2c_vec[i].av_position != UINT64_MAX) {
403 ac->
oc[0] = ac->
oc[1];
414 ac->
oc[1] = ac->
oc[0];
428 uint8_t layout_map[MAX_ELEM_ID*4][3],
int tags,
429 enum OCStatus oc_type,
int get_new_frame)
432 int i, channels = 0, ret;
436 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
444 for (i = 0; i < tags; i++) {
445 int type = layout_map[i][0];
446 int id = layout_map[i][1];
447 int position = layout_map[i][2];
454 if (ac->
oc[1].
m4ac.
ps == 1 && channels == 2) {
481 for (type = 3; type >= 0; type--) {
485 for (j = 0; j <= 1; j++) {
504 if (channel_config < 1 || channel_config > 7) {
522 uint8_t layout_map[MAX_ELEM_ID*4][3];
540 uint8_t layout_map[MAX_ELEM_ID*4][3];
627 layout_map[0][0] = syn_ele;
629 layout_map[0][2] = type;
643 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
651 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");
668 if (
get_bits_left(gb) < 4 * (num_front + num_side + num_back + num_lfe + num_assoc_data + num_cc)) {
711 int extension_flag, ret;
712 uint8_t layout_map[MAX_ELEM_ID*4][3];
728 if (channel_config == 0) {
730 tags =
decode_pce(avctx, m4ac, layout_map, gb);
740 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
746 if (extension_flag) {
789 av_dlog(avctx,
"audio specific config size %d\n", bit_size >> 3);
790 for (i = 0; i < bit_size >> 3; i++)
791 av_dlog(avctx,
"%02x ", data[i]);
819 av_dlog(avctx,
"AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
835 union {
unsigned u;
int s; }
v = { previous_val * 1664525
u + 1013904223 };
858 if (92017 <= rate)
return 0;
859 else if (75132 <= rate)
return 1;
860 else if (55426 <= rate)
return 2;
861 else if (46009 <= rate)
return 3;
862 else if (37566 <= rate)
return 4;
863 else if (27713 <= rate)
return 5;
864 else if (23004 <= rate)
return 6;
865 else if (18783 <= rate)
return 7;
866 else if (13856 <= rate)
return 8;
867 else if (11502 <= rate)
return 9;
868 else if (9391 <= rate)
return 10;
879 #define AAC_INIT_VLC_STATIC(num, size) \
880 INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
881 ff_aac_spectral_bits[num], sizeof( ff_aac_spectral_bits[num][0]), sizeof( ff_aac_spectral_bits[num][0]), \
882 ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), sizeof(ff_aac_spectral_codes[num][0]), \
905 uint8_t layout_map[MAX_ELEM_ID*4][3];
1048 for (i = 0; i < 7; i++) {
1086 "Number of scalefactor bands in group (%d) exceeds limit (%d).\n",
1113 while (k < ics->max_sfb) {
1116 int sect_band_type =
get_bits(gb, 4);
1117 if (sect_band_type == 12) {
1122 sect_len_incr =
get_bits(gb, bits);
1123 sect_end += sect_len_incr;
1128 if (sect_end > ics->
max_sfb) {
1130 "Number of bands (%d) exceeds limit (%d).\n",
1134 }
while (sect_len_incr == (1 << bits) - 1);
1135 for (; k < sect_end; k++) {
1136 band_type [idx] = sect_band_type;
1137 band_type_run_end[idx++] = sect_end;
1155 unsigned int global_gain,
1158 int band_type_run_end[120])
1161 int offset[3] = { global_gain, global_gain - 90, 0 };
1165 for (i = 0; i < ics->
max_sfb;) {
1166 int run_end = band_type_run_end[idx];
1167 if (band_type[idx] ==
ZERO_BT) {
1168 for (; i < run_end; i++, idx++)
1171 for (; i < run_end; i++, idx++) {
1172 offset[2] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1173 clipped_offset = av_clip(offset[2], -155, 100);
1174 if (offset[2] != clipped_offset) {
1176 "position clipped (%d -> %d).\nIf you heard an "
1177 "audible artifact, there may be a bug in the "
1178 "decoder. ", offset[2], clipped_offset);
1182 }
else if (band_type[idx] ==
NOISE_BT) {
1183 for (; i < run_end; i++, idx++) {
1184 if (noise_flag-- > 0)
1185 offset[1] +=
get_bits(gb, 9) - 256;
1187 offset[1] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1188 clipped_offset = av_clip(offset[1], -100, 155);
1189 if (offset[1] != clipped_offset) {
1191 "(%d -> %d).\nIf you heard an audible "
1192 "artifact, there may be a bug in the decoder. ",
1193 offset[1], clipped_offset);
1198 for (; i < run_end; i++, idx++) {
1199 offset[0] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1200 if (offset[0] > 255
U) {
1202 "Scalefactor (%d) out of range.\n", offset[0]);
1217 const uint16_t *swb_offset,
int num_swb)
1222 if (pulse_swb >= num_swb)
1224 pulse->
pos[0] = swb_offset[pulse_swb];
1226 if (pulse->
pos[0] > 1023)
1229 for (i = 1; i < pulse->
num_pulse; i++) {
1231 if (pulse->
pos[i] > 1023)
1246 int w,
filt, i, coef_len, coef_res, coef_compress;
1253 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
1257 if ((tns->
order[w][filt] =
get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
1259 tns->
order[w][filt], tns_max_order);
1263 if (tns->
order[w][filt]) {
1266 coef_len = coef_res + 3 - coef_compress;
1267 tmp2_idx = 2 * coef_compress + coef_res;
1269 for (i = 0; i < tns->
order[w][
filt]; i++)
1289 if (ms_present == 1) {
1292 }
else if (ms_present == 2) {
1298 static inline float *
VMUL2(
float *
dst,
const float *
v,
unsigned idx,
1302 *dst++ = v[idx & 15] * s;
1303 *dst++ = v[idx>>4 & 15] * s;
1309 static inline float *
VMUL4(
float *
dst,
const float *
v,
unsigned idx,
1313 *dst++ = v[idx & 3] * s;
1314 *dst++ = v[idx>>2 & 3] * s;
1315 *dst++ = v[idx>>4 & 3] * s;
1316 *dst++ = v[idx>>6 & 3] * s;
1322 static inline float *
VMUL2S(
float *
dst,
const float *
v,
unsigned idx,
1323 unsigned sign,
const float *
scale)
1328 s0.
i ^= sign >> 1 << 31;
1331 *dst++ = v[idx & 15] * s0.
f;
1332 *dst++ = v[idx>>4 & 15] * s1.
f;
1339 static inline float *
VMUL4S(
float *
dst,
const float *
v,
unsigned idx,
1340 unsigned sign,
const float *
scale)
1342 unsigned nz = idx >> 12;
1346 t.
i = s.
i ^ (sign & 1
U<<31);
1347 *dst++ = v[idx & 3] * t.
f;
1349 sign <<= nz & 1; nz >>= 1;
1350 t.
i = s.
i ^ (sign & 1
U<<31);
1351 *dst++ = v[idx>>2 & 3] * t.
f;
1353 sign <<= nz & 1; nz >>= 1;
1354 t.
i = s.
i ^ (sign & 1
U<<31);
1355 *dst++ = v[idx>>4 & 3] * t.
f;
1358 t.
i = s.
i ^ (sign & 1
U<<31);
1359 *dst++ = v[idx>>6 & 3] * t.
f;
1379 int pulse_present,
const Pulse *pulse,
1383 int i, k,
g, idx = 0;
1386 float *coef_base = coef;
1389 memset(coef + g * 128 + offsets[ics->
max_sfb], 0,
sizeof(
float) * (c - offsets[ics->
max_sfb]));
1394 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1395 const unsigned cbt_m1 = band_type[idx] - 1;
1396 float *cfo = coef + offsets[
i];
1397 int off_len = offsets[i + 1] - offsets[
i];
1401 for (group = 0; group < g_len; group++, cfo+=128) {
1402 memset(cfo, 0, off_len *
sizeof(
float));
1404 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1405 for (group = 0; group < g_len; group++, cfo+=128) {
1409 for (k = 0; k < off_len; k++) {
1415 scale = sf[idx] / sqrtf(band_energy);
1424 switch (cbt_m1 >> 1) {
1426 for (group = 0; group < g_len; group++, cfo+=128) {
1436 cb_idx = cb_vector_idx[code];
1437 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1443 for (group = 0; group < g_len; group++, cfo+=128) {
1455 cb_idx = cb_vector_idx[code];
1456 nnz = cb_idx >> 8 & 15;
1459 cf =
VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1465 for (group = 0; group < g_len; group++, cfo+=128) {
1475 cb_idx = cb_vector_idx[code];
1476 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1483 for (group = 0; group < g_len; group++, cfo+=128) {
1495 cb_idx = cb_vector_idx[code];
1496 nnz = cb_idx >> 8 & 15;
1497 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1499 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1505 for (group = 0; group < g_len; group++, cfo+=128) {
1507 uint32_t *icf = (uint32_t *) cf;
1526 cb_idx = cb_vector_idx[code];
1532 for (j = 0; j < 2; j++) {
1554 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1555 *icf++ = (bits & 1
U<<31) | v;
1572 if (pulse_present) {
1574 for (i = 0; i < pulse->
num_pulse; i++) {
1575 float co = coef_base[ pulse->
pos[
i] ];
1576 while (offsets[idx + 1] <= pulse->
pos[i])
1578 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
1579 float ico = -pulse->
amp[
i];
1582 ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1584 coef_base[ pulse->
pos[
i] ] =
cbrtf(fabsf(ico)) * ico * sf[idx];
1595 tmp.
i = (tmp.
i + 0x00008000
U) & 0xFFFF0000U;
1603 tmp.
i = (tmp.
i + 0x00007FFF
U + (tmp.
i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
1611 pun.
i &= 0xFFFF0000
U;
1618 const float a = 0.953125;
1619 const float alpha = 0.90625;
1623 float r0 = ps->
r0, r1 = ps->
r1;
1624 float cor0 = ps->
cor0, cor1 = ps->
cor1;
1625 float var0 = ps->
var0, var1 = ps->
var1;
1627 k1 = var0 > 1 ? cor0 *
flt16_even(a / var0) : 0;
1628 k2 = var1 > 1 ? cor1 *
flt16_even(a / var1) : 0;
1660 for (k = sce->
ics.
swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1686 int global_gain, pulse_present = 0;
1695 if (!common_window && !scale_flag) {
1742 int g,
i, group, idx = 0;
1745 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1748 for (group = 0; group < ics->
group_len[
g]; group++) {
1750 ch1 + group * 128 + offsets[i],
1751 offsets[i+1] - offsets[i]);
1773 int g, group,
i, idx = 0;
1777 for (i = 0; i < ics->
max_sfb;) {
1780 for (; i < bt_run_end; i++, idx++) {
1781 c = -1 + 2 * (sce1->
band_type[idx] - 14);
1783 c *= 1 - 2 * cpe->
ms_mask[idx];
1784 scale = c * sce1->
sf[idx];
1785 for (group = 0; group < ics->
group_len[
g]; group++)
1787 coef0 + group * 128 + offsets[i],
1789 offsets[i + 1] - offsets[i]);
1793 idx += bt_run_end -
i;
1809 int i, ret, common_window, ms_present = 0;
1812 if (common_window) {
1822 if (ms_present == 3) {
1825 }
else if (ms_present)
1828 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
1830 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
1833 if (common_window) {
1847 1.09050773266525765921,
1848 1.18920711500272106672,
1883 scale = cce_scale[
get_bits(gb, 2)];
1888 for (c = 0; c < num_gain; c++) {
1892 float gain_cache = 1.;
1895 gain = cge ?
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60: 0;
1896 gain_cache =
powf(scale, -gain);
1899 coup->
gain[
c][0] = gain_cache;
1902 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
1913 gain_cache =
powf(scale, -t) * s;
1916 coup->
gain[
c][idx] = gain_cache;
1934 int num_excl_chan = 0;
1937 for (i = 0; i < 7; i++)
1941 return num_excl_chan / 7;
1953 int drc_num_bands = 1;
1974 for (i = 0; i < drc_num_bands; i++) {
1987 for (i = 0; i < drc_num_bands; i++) {
1998 int i, major, minor;
2005 for(i=0; i+1<
sizeof(buf) && len>=8; i++, len-=8)
2012 if (sscanf(buf,
"libfaac %d.%d", &major, &minor) == 2){
2085 int bottom, top, order, start,
end,
size, inc;
2091 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
2103 if ((size = end - start) <= 0)
2115 for (m = 0; m <
size; m++, start += inc)
2116 for (i = 1; i <=
FFMIN(m, order); i++)
2117 coef[start] -= coef[start - i * inc] * lpc[i - 1];
2120 for (m = 0; m <
size; m++, start += inc) {
2121 tmp[0] = coef[start];
2122 for (i = 1; i <=
FFMIN(m, order); i++)
2123 coef[start] += tmp[i] * lpc[i - 1];
2124 for (i = order; i > 0; i--)
2125 tmp[i] = tmp[i - 1];
2147 memset(in, 0, 448 *
sizeof(
float));
2154 memset(in + 1024 + 576, 0, 448 *
sizeof(
float));
2169 float *predTime = sce->
ret;
2171 int16_t num_samples = 2048;
2173 if (ltp->
lag < 1024)
2174 num_samples = ltp->
lag + 1024;
2175 for (i = 0; i < num_samples; i++)
2177 memset(&predTime[i], 0, (2048 - i) *
sizeof(
float));
2186 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
2187 sce->
coeffs[i] += predFreq[i];
2197 float *saved = sce->
saved;
2198 float *saved_ltp = sce->
coeffs;
2204 memcpy(saved_ltp, saved, 512 *
sizeof(
float));
2205 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2207 for (i = 0; i < 64; i++)
2208 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2210 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(
float));
2211 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2213 for (i = 0; i < 64; i++)
2214 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2217 for (i = 0; i < 512; i++)
2218 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * lwindow[511 - i];
2234 float *saved = sce->
saved;
2244 for (i = 0; i < 1024; i += 128)
2259 memcpy( out, saved, 448 *
sizeof(
float));
2267 memcpy( out + 448 + 4*128, temp, 64 *
sizeof(
float));
2270 memcpy( out + 576, buf + 64, 448 *
sizeof(
float));
2276 memcpy( saved, temp + 64, 64 *
sizeof(
float));
2280 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2282 memcpy( saved, buf + 512, 448 *
sizeof(
float));
2283 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2285 memcpy( saved, buf + 512, 512 *
sizeof(
float));
2300 float *dest = target->
coeffs;
2301 const float *src = cce->
ch[0].
coeffs;
2302 int g,
i, group, k, idx = 0;
2305 "Dependent coupling is not supported together with LTP\n");
2309 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2312 for (group = 0; group < ics->
group_len[
g]; group++) {
2313 for (k = offsets[i]; k < offsets[i + 1]; k++) {
2315 dest[group * 128 + k] += gain * src[group * 128 + k];
2336 const float *src = cce->
ch[0].
ret;
2337 float *dest = target->
ret;
2340 for (i = 0; i <
len; i++)
2341 dest[i] += gain * src[i];
2364 if (coup->
type[c] == type && coup->
id_select[c] == elem_id) {
2366 apply_coupling_method(ac, &cc->
ch[0], cce, index);
2371 apply_coupling_method(ac, &cc->
ch[1], cce, index++);
2385 for (type = 3; type >= 0; type--) {
2429 uint8_t layout_map[MAX_ELEM_ID*4][3];
2430 int layout_map_tags;
2457 layout_map_tags = 2;
2458 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
2460 layout_map[0][1] = 0;
2461 layout_map[1][1] = 1;
2489 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
2490 int is_dmono, sce_count = 0;
2518 if (!(che=
get_che(ac, elem_type, elem_id))) {
2520 elem_type, elem_id);
2527 switch (elem_type) {
2554 uint8_t layout_map[MAX_ELEM_ID*4][3];
2564 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
2593 elem_type_prev = elem_type;
2608 samples <<= multiplier;
2610 is_dmono = ac->
dmono_mode && sce_count == 2 &&
2624 if (ac->
oc[1].
status && audio_found) {
2633 if (side && side_size>=4)
2643 int *got_frame_ptr,
AVPacket *avpkt)
2647 int buf_size = avpkt->
size;
2652 int new_extradata_size;
2655 &new_extradata_size);
2656 int jp_dualmono_size;
2661 if (new_extradata && 0) {
2668 memcpy(avctx->
extradata, new_extradata, new_extradata_size);
2679 if (jp_dualmono && jp_dualmono_size > 0)
2684 if (INT_MAX / 8 <= buf_size)
2693 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
2694 if (buf[buf_offset])
2697 return buf_size > buf_offset ? buf_consumed : buf_size;
2706 for (type = 0; type < 4; type++) {
2707 if (ac->
che[type][i])
2720 #define LOAS_SYNC_WORD 0x2b7
2746 int sync_extension = 0;
2747 int bits_consumed, esize;
2755 if (config_start_bit % 8) {
2757 "Non-byte-aligned audio-specific config", 1);
2763 gb->
buffer + (config_start_bit / 8),
2764 asclen, sync_extension);
2766 if (bits_consumed < 0)
2780 esize = (bits_consumed+7) / 8;
2795 return bits_consumed;
2801 int ret, audio_mux_version =
get_bits(gb, 1);
2804 if (audio_mux_version)
2809 if (audio_mux_version)
2817 "Multiple programs", 1);
2826 "Multiple layers", 1);
2831 if (!audio_mux_version) {
2862 if (audio_mux_version) {
2885 int mux_slot_length = 0;
2888 mux_slot_length += tmp;
2889 }
while (tmp == 255);
2890 return mux_slot_length;
2906 if (!use_same_mux) {
2911 "no decoder config found\n");
2919 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
2921 "frame length mismatch %d << %d\n",
2931 int *got_frame_ptr,
AVPacket *avpkt)
2946 if (muxlength > avpkt->
size)
2970 "ADTS header detected, probably as result of configuration "
3006 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
3008 {
"dual_mono_mode",
"Select the channel to decode for dual mono",