122 enum OCStatus oc_type,
int get_new_frame);
124 #define overread_err "Input buffer exhausted before END element found\n"
129 for (i = 0; i < tags; i++) {
130 int syn_ele =
layout[i][0];
132 sum += (1 + (syn_ele ==
TYPE_CPE)) *
152 int type,
int id,
int *channels)
157 if (!ac->
che[type][
id]) {
174 if (ac->
che[type][
id])
187 for (type = 0; type < 4; type++) {
207 for (ch = 0; ch < avctx->
channels; ch++) {
224 uint64_t right,
int pos)
226 if (layout_map[offset][0] ==
TYPE_CPE) {
228 .av_position = left | right,
230 .elem_id = layout_map[
offset][1],
238 .elem_id = layout_map[
offset][1],
242 .av_position = right,
244 .elem_id = layout_map[offset + 1][1],
254 int num_pos_channels = 0;
258 for (i = *current; i < tags; i++) {
259 if (layout_map[i][2] != pos)
269 num_pos_channels += 2;
280 return num_pos_channels;
285 int i,
n, total_non_cc_elements;
287 int num_front_channels, num_side_channels, num_back_channels;
296 if (num_front_channels < 0)
300 if (num_side_channels < 0)
304 if (num_back_channels < 0)
308 if (num_front_channels & 1) {
312 .elem_id = layout_map[i][1],
316 num_front_channels--;
318 if (num_front_channels >= 4) {
323 num_front_channels -= 2;
325 if (num_front_channels >= 2) {
330 num_front_channels -= 2;
332 while (num_front_channels >= 2) {
337 num_front_channels -= 2;
340 if (num_side_channels >= 2) {
345 num_side_channels -= 2;
347 while (num_side_channels >= 2) {
352 num_side_channels -= 2;
355 while (num_back_channels >= 4) {
360 num_back_channels -= 2;
362 if (num_back_channels >= 2) {
367 num_back_channels -= 2;
369 if (num_back_channels) {
373 .elem_id = layout_map[i][1],
384 .elem_id = layout_map[i][1],
393 .elem_id = layout_map[i][1],
400 total_non_cc_elements = n = i;
403 for (i = 1; i <
n; i++)
404 if (e2c_vec[i - 1].av_position > e2c_vec[i].av_position) {
412 for (i = 0; i < total_non_cc_elements; i++) {
413 layout_map[i][0] = e2c_vec[i].
syn_ele;
414 layout_map[i][1] = e2c_vec[i].
elem_id;
416 if (e2c_vec[i].av_position != UINT64_MAX) {
429 ac->
oc[0] = ac->
oc[1];
440 ac->
oc[1] = ac->
oc[0];
455 uint8_t layout_map[MAX_ELEM_ID * 4][3],
int tags,
456 enum OCStatus oc_type,
int get_new_frame)
459 int i, channels = 0,
ret;
463 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
471 for (i = 0; i < tags; i++) {
472 int type = layout_map[i][0];
473 int id = layout_map[i][1];
474 int position = layout_map[i][2];
481 if (ac->
oc[1].
m4ac.
ps == 1 && channels == 2) {
508 for (type = 3; type >= 0; type--) {
512 for (j = 0; j <= 1; j++) {
531 if (channel_config < 1 || channel_config > 7) {
533 "invalid default channel configuration (%d)\n",
539 *tags *
sizeof(*layout_map));
554 " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
572 uint8_t layout_map[MAX_ELEM_ID*4][3];
579 &layout_map_tags, 2) < 0)
591 uint8_t layout_map[MAX_ELEM_ID * 4][3];
598 &layout_map_tags, 1) < 0)
626 "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
627 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
648 "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
649 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
709 layout_map[0][0] = syn_ele;
711 layout_map[0][2] =
type;
725 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
735 "Sample rate index in program config element does not "
736 "match the sample rate index configured by the container.\n");
753 if (
get_bits_left(gb) < 4 * (num_front + num_side + num_back + num_lfe + num_assoc_data + num_cc)) {
796 int extension_flag,
ret, ep_config, res_flags;
797 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;
889 "AAC data resilience (flags %x)",
900 while (
get_bits(gb, 4) != ELDEXT_TERM) {
914 &tags, channel_config)))
923 "epConfig %d", ep_config);
950 av_dlog(avctx,
"audio specific config size %d\n", bit_size >> 3);
951 for (i = 0; i < bit_size >> 3; i++)
952 av_dlog(avctx,
"%02x ", data[i]);
959 sync_extension)) < 0)
963 "invalid sampling rate index %d\n",
970 "invalid low delay sampling rate index %d\n",
994 "Audio object type %s%d",
995 m4ac->
sbr == 1 ?
"SBR+" :
"",
1001 "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1018 union {
unsigned u;
int s; }
v = { previous_val * 1664525
u + 1013904223 };
1041 if (92017 <= rate)
return 0;
1042 else if (75132 <= rate)
return 1;
1043 else if (55426 <= rate)
return 2;
1044 else if (46009 <= rate)
return 3;
1045 else if (37566 <= rate)
return 4;
1046 else if (27713 <= rate)
return 5;
1047 else if (23004 <= rate)
return 6;
1048 else if (18783 <= rate)
return 7;
1049 else if (13856 <= rate)
return 8;
1050 else if (11502 <= rate)
return 9;
1051 else if (9391 <= rate)
return 10;
1062 #define AAC_INIT_VLC_STATIC(num, size) \
1063 INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
1064 ff_aac_spectral_bits[num], sizeof(ff_aac_spectral_bits[num][0]), \
1065 sizeof(ff_aac_spectral_bits[num][0]), \
1066 ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), \
1067 sizeof(ff_aac_spectral_codes[num][0]), \
1092 uint8_t layout_map[MAX_ELEM_ID*4][3];
1093 int layout_map_tags;
1204 "Invalid Predictor Reset Group.\n");
1245 "AAC LD is only defined for ONLY_LONG_SEQUENCE but "
1258 for (i = 0; i < 7; i++) {
1297 "Prediction is not allowed in AAC-LC.\n");
1302 "LTP in ER AAC LD not yet implemented.\n");
1313 "Number of scalefactor bands in group (%d) "
1314 "exceeds limit (%d).\n",
1341 while (k < ics->max_sfb) {
1344 int sect_band_type =
get_bits(gb, 4);
1345 if (sect_band_type == 12) {
1350 sect_len_incr =
get_bits(gb, bits);
1351 sect_end += sect_len_incr;
1356 if (sect_end > ics->
max_sfb) {
1358 "Number of bands (%d) exceeds limit (%d).\n",
1362 }
while (sect_len_incr == (1 << bits) - 1);
1363 for (; k < sect_end; k++) {
1364 band_type [idx] = sect_band_type;
1365 band_type_run_end[idx++] = sect_end;
1383 unsigned int global_gain,
1386 int band_type_run_end[120])
1389 int offset[3] = { global_gain, global_gain - 90, 0 };
1393 for (i = 0; i < ics->
max_sfb;) {
1394 int run_end = band_type_run_end[idx];
1395 if (band_type[idx] ==
ZERO_BT) {
1396 for (; i < run_end; i++, idx++)
1400 for (; i < run_end; i++, idx++) {
1401 offset[2] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1402 clipped_offset = av_clip(offset[2], -155, 100);
1403 if (offset[2] != clipped_offset) {
1405 "If you heard an audible artifact, there may be a bug in the decoder. "
1406 "Clipped intensity stereo position (%d -> %d)",
1407 offset[2], clipped_offset);
1411 }
else if (band_type[idx] ==
NOISE_BT) {
1412 for (; i < run_end; i++, idx++) {
1413 if (noise_flag-- > 0)
1414 offset[1] +=
get_bits(gb, 9) - 256;
1416 offset[1] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1417 clipped_offset = av_clip(offset[1], -100, 155);
1418 if (offset[1] != clipped_offset) {
1420 "If you heard an audible artifact, there may be a bug in the decoder. "
1421 "Clipped noise gain (%d -> %d)",
1422 offset[1], clipped_offset);
1427 for (; i < run_end; i++, idx++) {
1428 offset[0] +=
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60;
1429 if (offset[0] > 255
U) {
1431 "Scalefactor (%d) out of range.\n", offset[0]);
1446 const uint16_t *swb_offset,
int num_swb)
1451 if (pulse_swb >= num_swb)
1453 pulse->
pos[0] = swb_offset[pulse_swb];
1455 if (pulse->
pos[0] >= swb_offset[num_swb])
1458 for (i = 1; i < pulse->
num_pulse; i++) {
1460 if (pulse->
pos[i] >= swb_offset[num_swb])
1475 int w,
filt, i, coef_len, coef_res, coef_compress;
1482 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
1486 if ((tns->
order[w][filt] =
get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
1488 "TNS filter order %d is greater than maximum %d.\n",
1489 tns->
order[w][filt], tns_max_order);
1493 if (tns->
order[w][filt]) {
1496 coef_len = coef_res + 3 - coef_compress;
1497 tmp2_idx = 2 * coef_compress + coef_res;
1499 for (i = 0; i < tns->
order[w][
filt]; i++)
1520 if (ms_present == 1) {
1521 for (idx = 0; idx < max_idx; idx++)
1523 }
else if (ms_present == 2) {
1529 static inline float *
VMUL2(
float *dst,
const float *
v,
unsigned idx,
1533 *dst++ = v[idx & 15] *
s;
1534 *dst++ = v[idx>>4 & 15] *
s;
1540 static inline float *
VMUL4(
float *dst,
const float *
v,
unsigned idx,
1544 *dst++ = v[idx & 3] *
s;
1545 *dst++ = v[idx>>2 & 3] *
s;
1546 *dst++ = v[idx>>4 & 3] *
s;
1547 *dst++ = v[idx>>6 & 3] *
s;
1553 static inline float *
VMUL2S(
float *dst,
const float *
v,
unsigned idx,
1554 unsigned sign,
const float *scale)
1558 s0.
f = s1.
f = *scale;
1559 s0.
i ^= sign >> 1 << 31;
1562 *dst++ = v[idx & 15] * s0.
f;
1563 *dst++ = v[idx>>4 & 15] * s1.
f;
1570 static inline float *
VMUL4S(
float *dst,
const float *
v,
unsigned idx,
1571 unsigned sign,
const float *scale)
1573 unsigned nz = idx >> 12;
1577 t.
i = s.
i ^ (sign & 1
U<<31);
1578 *dst++ = v[idx & 3] * t.
f;
1580 sign <<= nz & 1; nz >>= 1;
1581 t.
i = s.
i ^ (sign & 1
U<<31);
1582 *dst++ = v[idx>>2 & 3] * t.
f;
1584 sign <<= nz & 1; nz >>= 1;
1585 t.
i = s.
i ^ (sign & 1
U<<31);
1586 *dst++ = v[idx>>4 & 3] * t.
f;
1589 t.
i = s.
i ^ (sign & 1
U<<31);
1590 *dst++ = v[idx>>6 & 3] * t.
f;
1610 int pulse_present,
const Pulse *pulse,
1614 int i, k,
g, idx = 0;
1617 float *coef_base = coef;
1620 memset(coef + g * 128 + offsets[ics->
max_sfb], 0,
1621 sizeof(
float) * (c - offsets[ics->
max_sfb]));
1626 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1627 const unsigned cbt_m1 = band_type[idx] - 1;
1628 float *cfo = coef + offsets[
i];
1629 int off_len = offsets[i + 1] - offsets[
i];
1633 for (group = 0; group < g_len; group++, cfo+=128) {
1634 memset(cfo, 0, off_len *
sizeof(
float));
1636 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1637 for (group = 0; group < g_len; group++, cfo+=128) {
1641 for (k = 0; k < off_len; k++) {
1647 scale = sf[idx] / sqrtf(band_energy);
1656 switch (cbt_m1 >> 1) {
1658 for (group = 0; group < g_len; group++, cfo+=128) {
1668 cb_idx = cb_vector_idx[code];
1669 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1675 for (group = 0; group < g_len; group++, cfo+=128) {
1687 cb_idx = cb_vector_idx[code];
1688 nnz = cb_idx >> 8 & 15;
1691 cf =
VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1697 for (group = 0; group < g_len; group++, cfo+=128) {
1707 cb_idx = cb_vector_idx[code];
1708 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1715 for (group = 0; group < g_len; group++, cfo+=128) {
1727 cb_idx = cb_vector_idx[code];
1728 nnz = cb_idx >> 8 & 15;
1729 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1731 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1737 for (group = 0; group < g_len; group++, cfo+=128) {
1739 uint32_t *icf = (uint32_t *) cf;
1758 cb_idx = cb_vector_idx[code];
1764 for (j = 0; j < 2; j++) {
1786 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1787 *icf++ = (bits & 1
U<<31) | v;
1804 if (pulse_present) {
1806 for (i = 0; i < pulse->
num_pulse; i++) {
1807 float co = coef_base[ pulse->
pos[
i] ];
1808 while (offsets[idx + 1] <= pulse->
pos[i])
1810 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
1811 float ico = -pulse->
amp[
i];
1814 ico = co / sqrtf(sqrtf(fabsf(co))) + (co > 0 ? -ico : ico);
1816 coef_base[ pulse->
pos[
i] ] =
cbrtf(fabsf(ico)) * ico * sf[idx];
1827 tmp.
i = (tmp.
i + 0x00008000
U) & 0xFFFF0000U;
1835 tmp.
i = (tmp.
i + 0x00007FFF
U + (tmp.
i & 0x00010000
U >> 16)) & 0xFFFF0000
U;
1843 pun.
i &= 0xFFFF0000
U;
1850 const float a = 0.953125;
1851 const float alpha = 0.90625;
1855 float r0 = ps->
r0, r1 = ps->
r1;
1856 float cor0 = ps->
cor0, cor1 = ps->
cor1;
1857 float var0 = ps->
var0, var1 = ps->
var1;
1859 k1 = var0 > 1 ? cor0 *
flt16_even(a / var0) : 0;
1860 k2 = var1 > 1 ? cor1 *
flt16_even(a / var1) : 0;
1895 k < sce->ics.swb_offset[sfb + 1];
1924 int global_gain, eld_syntax, er_syntax, pulse_present = 0;
1940 if (!common_window && !scale_flag) {
1954 if (!eld_syntax && (pulse_present =
get_bits1(gb))) {
1957 "Pulse tool not allowed in eight short sequence.\n");
1962 "Pulse data corrupt or invalid.\n");
1967 if (tns->
present && !er_syntax)
1976 if (tns->
present && er_syntax)
1999 int g,
i, group, idx = 0;
2002 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2006 for (group = 0; group < ics->
group_len[
g]; group++) {
2008 ch1 + group * 128 + offsets[i],
2009 offsets[i+1] - offsets[i]);
2032 int g, group,
i, idx = 0;
2036 for (i = 0; i < ics->
max_sfb;) {
2040 for (; i < bt_run_end; i++, idx++) {
2041 c = -1 + 2 * (sce1->
band_type[idx] - 14);
2043 c *= 1 - 2 * cpe->
ms_mask[idx];
2044 scale = c * sce1->
sf[idx];
2045 for (group = 0; group < ics->
group_len[
g]; group++)
2047 coef0 + group * 128 + offsets[i],
2049 offsets[i + 1] - offsets[i]);
2053 idx += bt_run_end -
i;
2069 int i,
ret, common_window, ms_present = 0;
2072 common_window = eld_syntax ||
get_bits1(gb);
2073 if (common_window) {
2084 if (ms_present == 3) {
2087 }
else if (ms_present)
2090 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
2092 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
2095 if (common_window) {
2109 1.09050773266525765921,
2110 1.18920711500272106672,
2145 scale = cce_scale[
get_bits(gb, 2)];
2150 for (c = 0; c < num_gain; c++) {
2154 float gain_cache = 1.0;
2157 gain = cge ?
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60: 0;
2158 gain_cache =
powf(scale, -gain);
2161 coup->
gain[
c][0] = gain_cache;
2164 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
2175 gain_cache =
powf(scale, -t) *
s;
2178 coup->
gain[
c][idx] = gain_cache;
2196 int num_excl_chan = 0;
2199 for (i = 0; i < 7; i++)
2203 return num_excl_chan / 7;
2215 int drc_num_bands = 1;
2236 for (i = 0; i < drc_num_bands; i++) {
2249 for (i = 0; i < drc_num_bands; i++) {
2260 int i, major, minor;
2267 for(i=0; i+1<
sizeof(
buf) && len>=8; i++, len-=8)
2274 if (sscanf(buf,
"libfaac %d.%d", &major, &minor) == 2){
2360 for (filt = 0; filt < tns->
n_filt[w]; filt++) {
2372 if ((size = end - start) <= 0)
2384 for (m = 0; m <
size; m++, start += inc)
2385 for (i = 1; i <=
FFMIN(m, order); i++)
2386 coef[start] -= coef[start - i * inc] * lpc[i - 1];
2389 for (m = 0; m <
size; m++, start += inc) {
2390 tmp[0] = coef[
start];
2391 for (i = 1; i <=
FFMIN(m, order); i++)
2392 coef[start] += tmp[i] * lpc[i - 1];
2393 for (i = order; i > 0; i--)
2394 tmp[i] = tmp[i - 1];
2416 memset(in, 0, 448 *
sizeof(
float));
2423 memset(in + 1024 + 576, 0, 448 *
sizeof(
float));
2438 float *predTime = sce->
ret;
2440 int16_t num_samples = 2048;
2442 if (ltp->
lag < 1024)
2443 num_samples = ltp->
lag + 1024;
2444 for (i = 0; i < num_samples; i++)
2446 memset(&predTime[i], 0, (2048 - i) *
sizeof(
float));
2455 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
2456 sce->
coeffs[i] += predFreq[i];
2466 float *saved = sce->
saved;
2467 float *saved_ltp = sce->
coeffs;
2473 memcpy(saved_ltp, saved, 512 *
sizeof(
float));
2474 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2476 for (i = 0; i < 64; i++)
2477 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2479 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(
float));
2480 memset(saved_ltp + 576, 0, 448 *
sizeof(
float));
2482 for (i = 0; i < 64; i++)
2483 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * swindow[63 - i];
2486 for (i = 0; i < 512; i++)
2487 saved_ltp[i + 512] = ac->
buf_mdct[1023 - i] * lwindow[511 - i];
2503 float *saved = sce->
saved;
2513 for (i = 0; i < 1024; i += 128)
2528 memcpy( out, saved, 448 *
sizeof(
float));
2536 memcpy( out + 448 + 4*128, temp, 64 *
sizeof(
float));
2539 memcpy( out + 576, buf + 64, 448 *
sizeof(
float));
2545 memcpy( saved, temp + 64, 64 *
sizeof(
float));
2549 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2551 memcpy( saved, buf + 512, 448 *
sizeof(
float));
2552 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(
float));
2554 memcpy( saved, buf + 512, 512 *
sizeof(
float));
2563 float *saved = sce->
saved;
2572 memcpy(out, saved, 192 *
sizeof(
float));
2574 memcpy( out + 320, buf + 64, 192 *
sizeof(
float));
2580 memcpy(saved, buf + 256, 256 *
sizeof(
float));
2587 float *saved = sce->
saved;
2592 const int n2 = n >> 1;
2593 const int n4 = n >> 2;
2600 for (i = 0; i < n2; i+=2) {
2602 temp = in[
i ]; in[
i ] = -in[n - 1 -
i]; in[n - 1 -
i] =
temp;
2603 temp = -in[i + 1]; in[i + 1] = in[n - 2 -
i]; in[n - 2 -
i] =
temp;
2606 for (i = 0; i <
n; i+=2) {
2616 for (i = n4; i < n2; i ++) {
2617 out[i - n4] = buf[n2 - 1 -
i] * window[i - n4] +
2618 saved[ i + n2] * window[i + n - n4] +
2619 -saved[ n + n2 - 1 -
i] * window[i + 2*n - n4] +
2620 -saved[2*n + n2 +
i] * window[i + 3*n - n4];
2622 for (i = 0; i < n2; i ++) {
2623 out[n4 +
i] = buf[
i] * window[i + n2 - n4] +
2624 -saved[ n - 1 -
i] * window[i + n2 + n - n4] +
2625 -saved[ n +
i] * window[i + n2 + 2*n - n4] +
2626 saved[2*n + n - 1 -
i] * window[i + n2 + 3*n - n4];
2628 for (i = 0; i < n4; i ++) {
2629 out[n2 + n4 +
i] = buf[ i + n2] * window[i + n - n4] +
2630 -saved[ n2 - 1 -
i] * window[i + 2*n - n4] +
2631 -saved[ n + n2 +
i] * window[i + 3*n - n4];
2635 memmove(saved + n, saved, 2 * n *
sizeof(
float));
2636 memcpy( saved, buf, n *
sizeof(
float));
2650 float *dest = target->
coeffs;
2652 int g,
i, group, k, idx = 0;
2655 "Dependent coupling is not supported together with LTP\n");
2659 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2662 for (group = 0; group < ics->
group_len[
g]; group++) {
2663 for (k = offsets[i]; k < offsets[i + 1]; k++) {
2665 dest[group * 128 + k] += gain * src[group * 128 + k];
2687 float *dest = target->
ret;
2690 for (i = 0; i <
len; i++)
2691 dest[i] += gain * src[i];
2714 if (coup->
type[c] == type && coup->
id_select[c] == elem_id) {
2716 apply_coupling_method(ac, &cc->
ch[0], cce, index);
2721 apply_coupling_method(ac, &cc->
ch[1], cce, index++);
2746 for (type = 3; type >= 0; type--) {
2793 uint8_t layout_map[MAX_ELEM_ID*4][3];
2794 int layout_map_tags,
ret;
2802 "More than one AAC RDB per ADTS frame");
2825 layout_map_tags = 2;
2826 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
2828 layout_map[0][1] = 0;
2829 layout_map[1][1] = 1;
2874 if (chan_config < 0 || chan_config >= 8) {
2882 if (!(che=
get_che(ac, elem_type, elem_id))) {
2884 "channel element %d.%d is not allocated\n",
2885 elem_type, elem_id);
2891 switch (elem_type) {
2923 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
2924 int is_dmono, sce_count = 0;
2956 if (!(che=
get_che(ac, elem_type, elem_id))) {
2958 elem_type, elem_id);
2966 switch (elem_type) {
2993 uint8_t layout_map[MAX_ELEM_ID*4][3];
3003 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
3032 elem_type_prev = elem_type;
3047 samples <<= multiplier;
3058 if (side && side_size>=4)
3062 *got_frame_ptr = !!samples;
3068 *got_frame_ptr = !!samples;
3071 is_dmono = ac->
dmono_mode && sce_count == 2 &&
3087 int *got_frame_ptr,
AVPacket *avpkt)
3091 int buf_size = avpkt->
size;
3096 int new_extradata_size;
3099 &new_extradata_size);
3100 int jp_dualmono_size;
3105 if (new_extradata && 0) {
3112 memcpy(avctx->
extradata, new_extradata, new_extradata_size);
3123 if (jp_dualmono && jp_dualmono_size > 0)
3128 if (INT_MAX / 8 <= buf_size)
3148 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
3149 if (buf[buf_offset])
3152 return buf_size > buf_offset ? buf_consumed : buf_size;
3161 for (type = 0; type < 4; type++) {
3162 if (ac->
che[type][i])
3177 #define LOAS_SYNC_WORD 0x2b7
3203 int sync_extension = 0;
3204 int bits_consumed, esize;
3212 if (config_start_bit % 8) {
3214 "Non-byte-aligned audio-specific config");
3220 gb->
buffer + (config_start_bit / 8),
3221 asclen, sync_extension);
3223 if (bits_consumed < 0)
3237 esize = (bits_consumed+7) / 8;
3252 return bits_consumed;
3261 if (audio_mux_version)
3266 if (audio_mux_version)
3286 if (!audio_mux_version) {
3317 if (audio_mux_version) {
3340 int mux_slot_length = 0;
3343 mux_slot_length += tmp;
3344 }
while (tmp == 255);
3345 return mux_slot_length;
3361 if (!use_same_mux) {
3366 "no decoder config found\n");
3374 }
else if (mux_slot_length_bytes * 8 + 256 <
get_bits_left(gb)) {
3376 "frame length mismatch %d << %d\n",
3386 int *got_frame_ptr,
AVPacket *avpkt)
3401 if (muxlength > avpkt->
size)
3425 "ADTS header detected, probably as result of configuration "
3461 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
3463 {
"dual_mono_mode",
"Select the channel to decode for dual mono",