99 enum OCStatus oc_type,
int get_new_frame);
101 #define overread_err "Input buffer exhausted before END element found\n" 106 for (i = 0; i < tags; i++) {
109 sum += (1 + (syn_ele ==
TYPE_CPE)) *
134 if (!ac->
che[type][
id]) {
151 if (ac->
che[type][
id])
164 for (type = 0; type < 4; type++) {
184 for (ch = 0; ch < avctx->
channels; ch++) {
201 uint64_t right,
int pos, uint64_t *
layout)
203 if (layout_map[offset][0] ==
TYPE_CPE) {
205 .av_position = left | right,
207 .elem_id = layout_map[
offset][1],
211 *layout |= e2c_vec[
offset].av_position;
218 .elem_id = layout_map[
offset][1],
222 .av_position = right,
224 .elem_id = layout_map[offset + 1][1],
227 if (left != UINT64_MAX)
230 if (right != UINT64_MAX)
240 int num_pos_channels = 0;
244 for (i = *current; i < tags; i++) {
245 if (layout_map[i][2] != pos)
255 num_pos_channels += 2;
266 return num_pos_channels;
269 #define PREFIX_FOR_22POINT2 (AV_CH_LAYOUT_7POINT1_WIDE_BACK|AV_CH_BACK_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_LOW_FREQUENCY_2) 272 int i, n, total_non_cc_elements;
274 int num_front_channels, num_side_channels, num_back_channels;
283 if (num_front_channels < 0)
287 if (num_side_channels < 0)
291 if (num_back_channels < 0)
294 if (num_side_channels == 0 && num_back_channels >= 4) {
295 num_side_channels = 2;
296 num_back_channels -= 2;
300 if (num_front_channels & 1) {
304 .elem_id = layout_map[
i][1],
309 num_front_channels--;
311 if (num_front_channels >= 4) {
316 num_front_channels -= 2;
318 if (num_front_channels >= 2) {
323 num_front_channels -= 2;
325 while (num_front_channels >= 2) {
330 num_front_channels -= 2;
333 if (num_side_channels >= 2) {
338 num_side_channels -= 2;
340 while (num_side_channels >= 2) {
345 num_side_channels -= 2;
348 while (num_back_channels >= 4) {
353 num_back_channels -= 2;
355 if (num_back_channels >= 2) {
360 num_back_channels -= 2;
362 if (num_back_channels) {
366 .elem_id = layout_map[
i][1],
378 .elem_id = layout_map[
i][1],
388 .elem_id = layout_map[
i][1],
398 .elem_id = layout_map[
i][1],
407 for (
int j = 0; j < tags; j++) {
408 if (layout_map[j][0] != reference_layout_map[j][0] ||
409 layout_map[j][2] != reference_layout_map[j][2])
410 goto end_of_layout_definition;
415 .syn_ele = layout_map[
i][0],
416 .elem_id = layout_map[
i][1],
417 .aac_position = layout_map[
i][2]
431 .syn_ele = layout_map[
i][0],
432 .elem_id = layout_map[
i][1],
433 .aac_position = layout_map[
i][2]
442 .syn_ele = layout_map[
i][0],
443 .elem_id = layout_map[
i][1],
444 .aac_position = layout_map[
i][2]
448 .syn_ele = layout_map[
i][0],
449 .elem_id = layout_map[
i][1],
450 .aac_position = layout_map[
i][2]
459 end_of_layout_definition:
461 total_non_cc_elements = n =
i;
479 for (i = 1; i < n; i++)
489 for (i = 0; i < total_non_cc_elements; i++) {
505 ac->
oc[0] = ac->
oc[1];
518 ac->
oc[1] = ac->
oc[0];
533 uint8_t layout_map[MAX_ELEM_ID * 4][3],
int tags,
534 enum OCStatus oc_type,
int get_new_frame)
543 memcpy(ac->
oc[1].
layout_map, layout_map, tags *
sizeof(layout_map[0]));
546 for (i = 0; i < tags; i++) {
547 int type = layout_map[
i][0];
548 int id = layout_map[
i][1];
550 if (id_map[type][
id] >= MAX_ELEM_ID) {
559 for (i = 0; i < tags; i++) {
560 int type = layout_map[
i][0];
561 int id = layout_map[
i][1];
562 int iid = id_map[
type][
id];
563 int position = layout_map[
i][2];
571 if (ac->
oc[1].
m4ac.
ps == 1 && channels == 2) {
597 for (type = 3; type >= 0; type--) {
601 for (j = 0; j <= 1; j++) {
620 if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
621 channel_config > 13) {
623 "invalid default channel configuration (%d)\n",
629 *tags *
sizeof(*layout_map));
644 " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode" 662 uint8_t layout_map[MAX_ELEM_ID*4][3];
669 &layout_map_tags, 2) < 0)
681 uint8_t layout_map[MAX_ELEM_ID * 4][3];
688 &layout_map_tags, 1) < 0)
703 (type ==
TYPE_SCE && elem_id < 6) ||
704 (type ==
TYPE_LFE && elem_id < 2))) {
731 "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n",
732 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
753 "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n",
754 type ==
TYPE_SCE ?
"SCE" :
"LFE", elem_id);
816 layout_map[0][2] =
type;
822 int reference_position) {
837 int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
847 "Sample rate index in program config element does not " 848 "match the sample rate index configured by the container.\n");
865 if (
get_bits_left(gb) < 5 * (num_front + num_side + num_back + num_cc) + 4 *(num_lfe + num_assoc_data + num_cc)) {
905 int get_bit_alignment,
909 int extension_flag,
ret, ep_config, res_flags;
910 uint8_t layout_map[MAX_ELEM_ID*4][3];
937 if (channel_config == 0) {
939 tags =
decode_pce(avctx, m4ac, layout_map, gb, get_bit_alignment);
944 &tags, channel_config)))
950 }
else if (m4ac->
sbr == 1 && m4ac->
ps == -1)
956 if (extension_flag) {
969 "AAC data resilience (flags %x)",
985 "epConfig %d", ep_config);
997 int ret, ep_config, res_flags;
998 uint8_t layout_map[MAX_ELEM_ID*4][3];
1000 const int ELDEXT_TERM = 0;
1015 "AAC data resilience (flags %x)",
1026 while (
get_bits(gb, 4) != ELDEXT_TERM) {
1030 if (len == 15 + 255)
1040 &tags, channel_config)))
1049 "epConfig %d", ep_config);
1071 int get_bit_alignment,
1082 "invalid sampling rate index %d\n",
1089 "invalid low delay sampling rate index %d\n",
1114 "Audio object type %s%d",
1115 m4ac->
sbr == 1 ?
"SBR+" :
"",
1121 "AOT %d chan config %d sampling index %d (%d) SBR %d PS %d\n",
1138 if (bit_size < 0 || bit_size > INT_MAX) {
1143 ff_dlog(avctx,
"audio specific config size %d\n", (
int)bit_size >> 3);
1144 for (i = 0; i < bit_size >> 3; i++)
1145 ff_dlog(avctx,
"%02x ", data[i]);
1164 union {
unsigned u;
int s; } v = { previous_val * 1664525
u + 1013904223 };
1177 if (92017 <= rate)
return 0;
1178 else if (75132 <= rate)
return 1;
1179 else if (55426 <= rate)
return 2;
1180 else if (46009 <= rate)
return 3;
1181 else if (37566 <= rate)
return 4;
1182 else if (27713 <= rate)
return 5;
1183 else if (23004 <= rate)
return 6;
1184 else if (18783 <= rate)
return 7;
1185 else if (13856 <= rate)
return 8;
1186 else if (11502 <= rate)
return 9;
1187 else if (9391 <= rate)
return 10;
1203 294 + 306 + 268 + 510 + 366 + 462][2];
1204 for (
unsigned i = 0,
offset = 0;
i < 11;
i++) {
1282 uint8_t layout_map[MAX_ELEM_ID*4][3];
1283 int layout_map_tags;
1374 "Invalid Predictor Reset Group.\n");
1420 "AAC LD is only defined for ONLY_LONG_SEQUENCE but " 1433 for (i = 0; i < 7; i++) {
1490 "Prediction is not allowed in AAC-LC.\n");
1495 "LTP in ER AAC LD not yet implemented.\n");
1507 "Number of scalefactor bands in group (%d) " 1508 "exceeds limit (%d).\n",
1535 while (k < ics->max_sfb) {
1538 int sect_band_type =
get_bits(gb, 4);
1539 if (sect_band_type == 12) {
1544 sect_len_incr =
get_bits(gb, bits);
1545 sect_end += sect_len_incr;
1550 if (sect_end > ics->
max_sfb) {
1552 "Number of bands (%d) exceeds limit (%d).\n",
1556 }
while (sect_len_incr == (1 << bits) - 1);
1557 for (; k < sect_end; k++) {
1558 band_type [idx] = sect_band_type;
1559 band_type_run_end[idx++] = sect_end;
1577 unsigned int global_gain,
1580 int band_type_run_end[120])
1587 for (i = 0; i < ics->
max_sfb;) {
1588 int run_end = band_type_run_end[idx];
1589 if (band_type[idx] ==
ZERO_BT) {
1590 for (; i < run_end; i++, idx++)
1594 for (; i < run_end; i++, idx++) {
1596 clipped_offset = av_clip(offset[2], -155, 100);
1597 if (offset[2] != clipped_offset) {
1599 "If you heard an audible artifact, there may be a bug in the decoder. " 1600 "Clipped intensity stereo position (%d -> %d)",
1601 offset[2], clipped_offset);
1604 sf[idx] = 100 - clipped_offset;
1609 }
else if (band_type[idx] ==
NOISE_BT) {
1610 for (; i < run_end; i++, idx++) {
1611 if (noise_flag-- > 0)
1615 clipped_offset = av_clip(offset[1], -100, 155);
1616 if (offset[1] != clipped_offset) {
1618 "If you heard an audible artifact, there may be a bug in the decoder. " 1619 "Clipped noise gain (%d -> %d)",
1620 offset[1], clipped_offset);
1623 sf[idx] = -(100 + clipped_offset);
1629 for (; i < run_end; i++, idx++) {
1631 if (offset[0] > 255
U) {
1633 "Scalefactor (%d) out of range.\n", offset[0]);
1637 sf[idx] = -offset[0];
1652 const uint16_t *swb_offset,
int num_swb)
1657 if (pulse_swb >= num_swb)
1659 pulse->
pos[0] = swb_offset[pulse_swb];
1661 if (pulse->
pos[0] >= swb_offset[num_swb])
1664 for (i = 1; i < pulse->
num_pulse; i++) {
1666 if (pulse->
pos[i] >= swb_offset[num_swb])
1681 int w,
filt,
i, coef_len, coef_res, coef_compress;
1688 for (filt = 0; filt < tns->
n_filt[
w]; filt++) {
1692 if ((tns->
order[w][filt] =
get_bits(gb, 5 - 2 * is8)) > tns_max_order) {
1694 "TNS filter order %d is greater than maximum %d.\n",
1695 tns->
order[w][filt], tns_max_order);
1699 if (tns->
order[w][filt]) {
1702 coef_len = coef_res + 3 - coef_compress;
1703 tmp2_idx = 2 * coef_compress + coef_res;
1726 if (ms_present == 1) {
1727 for (idx = 0; idx < max_idx; idx++)
1729 }
else if (ms_present == 2) {
1748 int pulse_present,
const Pulse *pulse,
1752 int i, k,
g, idx = 0;
1758 memset(coef + g * 128 + offsets[ics->
max_sfb], 0,
1764 for (i = 0; i < ics->
max_sfb; i++, idx++) {
1765 const unsigned cbt_m1 = band_type[idx] - 1;
1767 int off_len = offsets[i + 1] - offsets[
i];
1771 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1772 memset(cfo, 0, off_len *
sizeof(*cfo));
1774 }
else if (cbt_m1 ==
NOISE_BT - 1) {
1775 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1778 for (k = 0; k < off_len; k++) {
1783 band_energy = ac->
fdsp->scalarproduct_fixed(cfo, cfo, off_len);
1789 for (k = 0; k < off_len; k++) {
1795 scale = sf[idx] / sqrtf(band_energy);
1806 switch (cbt_m1 >> 1) {
1808 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1822 cf =
VMUL4(cf, vq, cb_idx, sf + idx);
1829 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1842 nnz = cb_idx >> 8 & 15;
1848 cf =
VMUL4S(cf, vq, cb_idx, bits, sf + idx);
1855 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1869 cf =
VMUL2(cf, vq, cb_idx, sf + idx);
1877 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1890 nnz = cb_idx >> 8 & 15;
1891 sign = nnz ?
SHOW_UBITS(
re, gb, nnz) << (cb_idx >> 12) : 0;
1896 cf =
VMUL2S(cf, vq, cb_idx, sign, sf + idx);
1903 for (group = 0; group < (
AAC_SIGNE)g_len; group++, cfo+=128) {
1909 uint32_t *icf = (uint32_t *) cf;
1924 if (cb_idx == 0x0000) {
1935 for (j = 0; j < 2; j++) {
1970 unsigned v = ((
const uint32_t*)vq)[cb_idx & 15];
1971 *icf++ = (bits & 1
U<<31) | v;
1990 if (pulse_present) {
1992 for (i = 0; i < pulse->
num_pulse; i++) {
1994 while (offsets[idx + 1] <= pulse->
pos[i])
1996 if (band_type[idx] !=
NOISE_BT && sf[idx]) {
2000 ico = co + (co > 0 ? -ico : ico);
2002 coef_base[ pulse->
pos[
i] ] = ico;
2006 ico = co / sqrtf(sqrtf(
fabsf(co))) + (co > 0 ? -ico : ico);
2019 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2020 const unsigned cbt_m1 = band_type[idx] - 1;
2021 int *cfo = coef + offsets[
i];
2022 int off_len = offsets[i + 1] - offsets[
i];
2026 for (group = 0; group < (
int)g_len; group++, cfo+=128) {
2055 k < sce->ics.swb_offset[sfb + 1];
2072 static const uint8_t gain_mode[4][3] = {
2084 for (bd = 0; bd < max_band; bd++) {
2085 for (wd = 0; wd < gain_mode[
mode][0]; wd++) {
2087 for (ad = 0; ad < adjust_num; ad++) {
2088 skip_bits(gb, 4 + ((wd == 0 && gain_mode[mode][1])
2090 : gain_mode[mode][2]));
2111 int global_gain, eld_syntax, er_syntax, pulse_present = 0;
2127 if (!common_window && !scale_flag) {
2142 if (!eld_syntax && (pulse_present =
get_bits1(gb))) {
2145 "Pulse tool not allowed in eight short sequence.\n");
2151 "Pulse data corrupt or invalid.\n");
2157 if (tns->
present && !er_syntax) {
2171 if (tns->
present && er_syntax) {
2200 int g,
i, group, idx = 0;
2203 for (i = 0; i < ics->
max_sfb; i++, idx++) {
2208 for (group = 0; group < ics->
group_len[
g]; group++) {
2209 ac->
fdsp->butterflies_fixed(ch0 + group * 128 + offsets[i],
2210 ch1 + group * 128 + offsets[i],
2211 offsets[i+1] - offsets[i]);
2213 for (group = 0; group < ics->
group_len[
g]; group++) {
2215 ch1 + group * 128 + offsets[i],
2216 offsets[i+1] - offsets[i]);
2240 int g, group,
i, idx = 0;
2244 for (i = 0; i < ics->
max_sfb;) {
2248 for (; i < bt_run_end; i++, idx++) {
2249 c = -1 + 2 * (sce1->
band_type[idx] - 14);
2251 c *= 1 - 2 * cpe->
ms_mask[idx];
2252 scale = c * sce1->
sf[idx];
2253 for (group = 0; group < ics->
group_len[
g]; group++)
2256 coef0 + group * 128 + offsets[i],
2259 offsets[i + 1] - offsets[i] ,ac->
avctx);
2262 coef0 + group * 128 + offsets[i],
2264 offsets[i + 1] - offsets[i]);
2269 idx += bt_run_end -
i;
2285 int i,
ret, common_window, ms_present = 0;
2288 common_window = eld_syntax ||
get_bits1(gb);
2289 if (common_window) {
2300 if (ms_present == 3) {
2303 }
else if (ms_present)
2306 if ((ret =
decode_ics(ac, &cpe->
ch[0], gb, common_window, 0)))
2308 if ((ret =
decode_ics(ac, &cpe->
ch[1], gb, common_window, 0)))
2311 if (common_window) {
2325 1.09050773266525765921,
2326 1.18920711500272106672,
2364 scale = cce_scale[
get_bits(gb, 2)];
2370 for (c = 0; c < num_gain; c++) {
2377 gain = cge ?
get_vlc2(gb, vlc_scalefactors.
table, 7, 3) - 60: 0;
2378 gain_cache =
GET_GAIN(scale, gain);
2380 if ((
abs(gain_cache)-1024) >> 3 > 30)
2385 coup->
gain[
c][0] = gain_cache;
2388 for (sfb = 0; sfb < sce->
ics.
max_sfb; sfb++, idx++) {
2401 if ((
abs(gain_cache)-1024) >> 3 > 30)
2406 coup->
gain[
c][idx] = gain_cache;
2424 int num_excl_chan = 0;
2427 for (i = 0; i < 7; i++)
2431 return num_excl_chan / 7;
2443 int drc_num_bands = 1;
2464 for (i = 0; i < drc_num_bands; i++) {
2477 for (i = 0; i < drc_num_bands; i++) {
2495 for(i=0; i+1<
sizeof(buf) && len>=8; i++, len-=8)
2502 if (sscanf(buf,
"libfaac %d.%d", &major, &minor) == 2){
2539 "SBR with 960 frame length");
2589 int bottom, top, order, start,
end,
size, inc;
2599 for (filt = 0; filt < tns->
n_filt[
w]; filt++) {
2611 if ((size = end - start) <= 0)
2623 for (m = 0; m <
size; m++, start += inc)
2624 for (i = 1; i <=
FFMIN(m, order); i++)
2628 for (m = 0; m <
size; m++, start += inc) {
2629 tmp[0] = coef[start];
2630 for (i = 1; i <=
FFMIN(m, order); i++)
2631 coef[start] +=
AAC_MUL26(tmp[i], lpc[i - 1]);
2632 for (i = order; i > 0; i--)
2633 tmp[i] = tmp[i - 1];
2655 memset(in, 0, 448 *
sizeof(*in));
2662 memset(in + 1024 + 576, 0, 448 *
sizeof(*in));
2679 int16_t num_samples = 2048;
2681 if (ltp->
lag < 1024)
2682 num_samples = ltp->
lag + 1024;
2683 for (i = 0; i < num_samples; i++)
2685 memset(&predTime[i], 0, (2048 - i) *
sizeof(*predTime));
2694 for (i = offsets[sfb]; i < offsets[sfb + 1]; i++)
2712 memcpy(saved_ltp, saved, 512 *
sizeof(*saved_ltp));
2713 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2716 for (i = 0; i < 64; i++)
2719 memcpy(saved_ltp, ac->
buf_mdct + 512, 448 *
sizeof(*saved_ltp));
2720 memset(saved_ltp + 576, 0, 448 *
sizeof(*saved_ltp));
2723 for (i = 0; i < 64; i++)
2728 for (i = 0; i < 512; i++)
2755 for (i = 0; i < 1024; i += 128)
2760 for (i=0; i<1024; i++)
2761 buf[i] = (buf[i] + 4LL) >> 3;
2775 memcpy( out, saved, 448 *
sizeof(*out));
2783 memcpy( out + 448 + 4*128, temp, 64 *
sizeof(*out));
2786 memcpy( out + 576, buf + 64, 448 *
sizeof(*out));
2792 memcpy( saved, temp + 64, 64 *
sizeof(*saved));
2796 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2798 memcpy( saved, buf + 512, 448 *
sizeof(*saved));
2799 memcpy( saved + 448, buf + 7*128 + 64, 64 *
sizeof(*saved));
2801 memcpy( saved, buf + 512, 512 *
sizeof(*saved));
2824 for (i = 0; i < 8; i++)
2841 memcpy( out, saved, 420 *
sizeof(*out));
2849 memcpy( out + 420 + 4*120, temp, 60 *
sizeof(*out));
2852 memcpy( out + 540, buf + 60, 420 *
sizeof(*out));
2858 memcpy( saved, temp + 60, 60 *
sizeof(*saved));
2862 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2864 memcpy( saved, buf + 480, 420 *
sizeof(*saved));
2865 memcpy( saved + 420, buf + 7*120 + 60, 60 *
sizeof(*saved));
2867 memcpy( saved, buf + 480, 480 *
sizeof(*saved));
2886 for (i = 0; i < 1024; i++)
2887 buf[i] = (buf[i] + 2) >> 2;
2893 memcpy(out, saved, 192 *
sizeof(*out));
2895 memcpy( out + 320, buf + 64, 192 *
sizeof(*out));
2901 memcpy(saved, buf + 256, 256 *
sizeof(*saved));
2912 const int n2 = n >> 1;
2913 const int n4 = n >> 2;
2922 for (i = 0; i < n2; i+=2) {
2924 temp = in[
i ]; in[
i ] = -in[n - 1 -
i]; in[n - 1 -
i] =
temp;
2925 temp = -in[i + 1]; in[i + 1] = in[n - 2 -
i]; in[n - 2 -
i] =
temp;
2935 for (i = 0; i < 1024; i++)
2936 buf[i] = (buf[i] + 1) >> 1;
2939 for (i = 0; i < n; i+=2) {
2949 for (i = n4; i < n2; i ++) {
2950 out[i - n4] =
AAC_MUL31( buf[ n2 - 1 - i] , window[i - n4]) +
2951 AAC_MUL31( saved[ i + n2] , window[i + n - n4]) +
2952 AAC_MUL31(-saved[n + n2 - 1 - i] , window[i + 2*n - n4]) +
2953 AAC_MUL31(-saved[ 2*n + n2 + i] , window[i + 3*n - n4]);
2955 for (i = 0; i < n2; i ++) {
2956 out[n4 +
i] =
AAC_MUL31( buf[ i] , window[i + n2 - n4]) +
2957 AAC_MUL31(-saved[ n - 1 - i] , window[i + n2 + n - n4]) +
2958 AAC_MUL31(-saved[ n + i] , window[i + n2 + 2*n - n4]) +
2959 AAC_MUL31( saved[2*n + n - 1 - i] , window[i + n2 + 3*n - n4]);
2961 for (i = 0; i < n4; i ++) {
2962 out[n2 + n4 +
i] =
AAC_MUL31( buf[ i + n2] , window[i + n - n4]) +
2963 AAC_MUL31(-saved[n2 - 1 - i] , window[i + 2*n - n4]) +
2964 AAC_MUL31(-saved[n + n2 + i] , window[i + 3*n - n4]);
2968 memmove(saved + n, saved, 2 * n *
sizeof(*saved));
2969 memcpy( saved, buf, n *
sizeof(*saved));
2992 if (coup->
type[c] == type && coup->
id_select[c] == elem_id) {
2994 apply_coupling_method(ac, &cc->
ch[0], cce, index);
2999 apply_coupling_method(ac, &cc->
ch[1], cce, index++);
3027 for (type = 3; type >= 0; type--) {
3068 che->
ch[0].
ret[j] = (
int32_t)av_clip64((int64_t)che->
ch[0].
ret[j]*128, INT32_MIN, INT32_MAX-0x8000)+0x8000;
3070 che->
ch[1].
ret[j] = (
int32_t)av_clip64((int64_t)che->
ch[1].
ret[j]*128, INT32_MIN, INT32_MAX-0x8000)+0x8000;
3086 uint8_t layout_map[MAX_ELEM_ID*4][3];
3087 int layout_map_tags,
ret;
3095 "More than one AAC RDB per ADTS frame");
3118 layout_map_tags = 2;
3119 layout_map[0][0] = layout_map[1][0] =
TYPE_SCE;
3121 layout_map[0][1] = 0;
3122 layout_map[1][1] = 1;
3169 if (chan_config < 0 || (chan_config >= 8 && chan_config < 11) || chan_config >= 13) {
3177 if (!(che=
get_che(ac, elem_type, elem_id))) {
3179 "channel element %d.%d is not allocated\n",
3180 elem_type, elem_id);
3186 switch (elem_type) {
3223 int samples = 0, multiplier, audio_found = 0, pce_found = 0;
3224 int is_dmono, sce_count = 0;
3225 int payload_alignment;
3264 if (che_presence[elem_type][elem_id]) {
3267 elem_type, elem_id);
3273 che_presence[elem_type][
elem_id]++;
3275 if (!(che=
get_che(ac, elem_type, elem_id))) {
3277 elem_type, elem_id);
3285 switch (elem_type) {
3312 uint8_t layout_map[MAX_ELEM_ID*4][3] = {{0}};
3316 if (pce_found && !pushed) {
3329 "Not evaluating a further program_config_element as this construct is dubious at best.\n");
3349 while (elem_id > 0) {
3366 che_prev_type = elem_type;
3385 samples <<= multiplier;
3389 if (ac->
oc[1].
status && audio_found) {
3412 is_dmono = ac->
dmono_mode && sce_count == 2 &&
3428 int *got_frame_ptr,
AVPacket *avpkt)
3432 int buf_size = avpkt->
size;
3437 int new_extradata_size;
3440 &new_extradata_size);
3441 int jp_dualmono_size;
3446 if (new_extradata) {
3451 new_extradata_size * 8LL, 1);
3458 if (jp_dualmono && jp_dualmono_size > 0)
3463 if (INT_MAX / 8 <= buf_size)
3483 for (buf_offset = buf_consumed; buf_offset < buf_size; buf_offset++)
3484 if (buf[buf_offset])
3487 return buf_size > buf_offset ? buf_consumed : buf_size;
3496 for (type = 0; type < 4; type++) {
3497 if (ac->
che[type][i])
3536 #define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM 3538 {
"dual_mono_mode",
"Select the channel to decode for dual mono",
int predictor_initialized
static float * VMUL4S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
Apply AAC-Main style frequency domain prediction.
float(* scalarproduct_float)(const float *v1, const float *v2, int len)
Calculate the scalar product of two vectors of floats.
static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
static void apply_ltp(AACContext *ac, SingleChannelElement *sce)
Apply the long term prediction.
static INTFLOAT sine_120[120]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int decode_pulses(Pulse *pulse, GetBitContext *gb, const uint16_t *swb_offset, int num_swb)
Decode pulse data; reference: table 4.7.
uint8_t use_kb_window[2]
If set, use Kaiser-Bessel window, otherwise use a sine window.
static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx, uint8_t(*layout_map)[3], int *tags, int channel_config)
Set up channel positions based on a default channel configuration as specified in table 1...
This structure describes decoded (raw) audio or video data.
#define AV_CH_TOP_FRONT_RIGHT
void ff_aac_tableinit(void)
ptrdiff_t const GLvoid * data
static void flush(AVCodecContext *avctx)
static const int8_t tags_per_config[16]
static int * DEC_UPAIR(int *dst, unsigned idx, unsigned sign)
static AVOnce aac_table_init
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
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference
static const float cce_scale[]
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_CH_TOP_SIDE_LEFT
static float * VMUL2S(float *dst, const float *v, unsigned idx, unsigned sign, const float *scale)
#define AACDEC_FLAGS
AVOptions for Japanese DTV specific extensions (ADTS only)
static void imdct_and_windowing_eld(AACContext *ac, SingleChannelElement *sce)
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
static void aacdec_init(AACContext *ac)
#define avpriv_request_sample(...)
#define AV_CH_TOP_FRONT_LEFT
static int * DEC_SQUAD(int *dst, unsigned idx)
static int decode_audio_specific_config_gb(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, GetBitContext *gb, int get_bit_alignment, int sync_extension)
Decode audio specific configuration; reference: table 1.13.
ChannelElement * che[4][MAX_ELEM_ID]
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
#define AV_CH_TOP_FRONT_CENTER
const char * av_default_item_name(void *ptr)
Return the context name.
#define AV_CH_LOW_FREQUENCY_2
static const uint8_t aac_channel_layout_map[16][16][3]
INTFLOAT * ret
PCM output.
static INTFLOAT aac_kbd_long_960[960]
static void update_ltp(AACContext *ac, SingleChannelElement *sce)
Update the LTP buffer for next frame.
static void vector_pow43(int *coefs, int len)
static INTFLOAT sine_960[960]
INTFLOAT sf[120]
scalefactors
#define AV_EF_BITSTREAM
detect bitstream specification deviations
static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, int get_bit_alignment, MPEG4AudioConfig *m4ac, int channel_config)
Decode GA "General Audio" specific configuration; reference: table 4.1.
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band.
static void apply_independent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply independent channel coupling (applied after IMDCT).
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Dynamic Range Control - decoded from the bitstream but not processed further.
static void error(const char *err)
static av_cold int che_configure(AACContext *ac, enum ChannelPosition che_pos, int type, int id, int *channels)
Check for the channel element in the current channel position configuration.
static VLC vlc_scalefactors
#define NOISE_PRE
preamble for NOISE_BT, put in bitstream with the first noise band
#define FF_PROFILE_AAC_HE_V2
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.
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 void decode_channel_map(uint8_t layout_map[][3], enum ChannelPosition type, GetBitContext *gb, int n)
Decode an array of 4 bit element IDs, optionally interleaved with a stereo/mono switching bit...
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static int aac_decode_er_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb)
Spectral data are scaled white noise not coded in the bitstream.
static int decode_cce(AACContext *ac, GetBitContext *gb, ChannelElement *che)
Decode coupling_channel_element; reference: table 4.8.
static av_always_inline int lcg_random(unsigned previous_val)
linear congruential pseudorandom number generator
int band_incr
Number of DRC bands greater than 1 having DRC info.
const uint8_t ff_aac_num_swb_128[]
void ff_cbrt_tableinit(void)
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.
static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
Decode Individual Channel Stream info; reference: table 4.6.
enum AVSampleFormat sample_fmt
audio sample format
uint8_t layout_map[MAX_ELEM_ID *4][3]
Output configuration under trial specified by an inband PCE.
const uint16_t *const ff_swb_offset_480[]
const uint8_t ff_mpeg4audio_channels[14]
#define FF_DEBUG_PICT_INFO
SingleChannelElement ch[2]
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
const uint16_t *const ff_swb_offset_512[]
#define AV_CH_TOP_BACK_LEFT
const uint8_t ff_tns_max_bands_480[]
static av_cold int end(AVCodecContext *avctx)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats and store the result in a vector of floats...
#define AV_CH_BOTTOM_FRONT_LEFT
N Error Resilient Low Delay.
#define AV_CH_TOP_BACK_CENTER
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.
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 u(width, name, range_min, range_max)
#define AV_CH_LOW_FREQUENCY
av_cold int ff_mdct15_init(MDCT15Context **ps, int inverse, int N, double scale)
int exclude_mask[MAX_CHANNELS]
Channels to be excluded from DRC processing.
SingleChannelElement * output_element[MAX_CHANNELS]
Points to each SingleChannelElement.
static av_cold int aac_decode_init(AVCodecContext *avctx)
static int get_bits_count(const GetBitContext *s)
static int count_channels(uint8_t(*layout)[3], int tags)
Scalefactor data are intensity stereo positions (in phase).
#define AV_LOG_VERBOSE
Detailed information.
static int sample_rate_idx(int rate)
static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns, GetBitContext *gb, const IndividualChannelStream *ics)
Decode Temporal Noise Shaping data; reference: table 4.48.
int id_select[8]
element id
const float *const ff_aac_codebook_vector_vals[]
void ff_aac_float_common_init(void)
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
N Error Resilient Low Complexity.
ChannelElement * tag_che_map[4][MAX_ELEM_ID]
static __device__ float fabsf(float a)
Output configuration set in a global header but not yet locked.
static void spectral_to_sample(AACContext *ac, int samples)
Convert spectral data to samples, applying all supported tools as appropriate.
static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
static int get_bits_left(GetBitContext *gb)
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
#define AV_CH_LAYOUT_22POINT2
int dyn_rng_sgn[17]
DRC sign information; 0 - positive, 1 - negative.
void AAC_RENAME() ff_sbr_apply(AACContext *ac, SpectralBandReplication *sbr, int id_aac, INTFLOAT *L, INTFLOAT *R)
Apply one SBR element to one AAC element.
uint32_t ff_cbrt_tab[1<< 13]
static void pop_output_configuration(AACContext *ac)
Restore the previous output configuration if and only if the current configuration is unlocked...
static int decode_fill(AACContext *ac, GetBitContext *gb, int len)
#define UPDATE_CACHE(name, gb)
PredictorState predictor_state[MAX_PREDICTORS]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
const uint8_t ff_aac_num_swb_960[]
static void relative_align_get_bits(GetBitContext *gb, int reference_position)
SpectralBandReplication sbr
enum CouplingPoint coupling_point
The point during decoding at which coupling is applied.
const uint16_t *const ff_swb_offset_120[]
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
const uint8_t ff_aac_num_swb_1024[]
static void imdct_and_windowing_960(AACContext *ac, SingleChannelElement *sce)
Conduct IMDCT and windowing.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
const uint16_t ff_aac_spectral_sizes[11]
int flags
AV_CODEC_FLAG_*.
static int decode_eld_specific_config(AACContext *ac, AVCodecContext *avctx, GetBitContext *gb, MPEG4AudioConfig *m4ac, int channel_config)
void(* mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
void(* apply_ltp)(AACContext *ac, SingleChannelElement *sce)
uint8_t max_sfb
number of scalefactor bands per group
#define AV_CH_TOP_SIDE_RIGHT
const float ff_aac_eld_window_512[1920]
#define CLOSE_READER(name, gb)
int num_swb
number of scalefactor window bands
static int count_paired_channels(uint8_t(*layout_map)[3], int tags, int pos, int *current)
int prog_ref_level
A reference level for the long-term program audio level for all channels combined.
Output configuration locked in place.
float ff_aac_pow2sf_tab[428]
uint64_t channel_layout
Audio channel layout.
#define SKIP_BITS(name, gb, num)
#define AV_CH_BOTTOM_FRONT_CENTER
int warned_remapping_once
INTFLOAT ret_buf[2048]
PCM output buffer.
N Error Resilient Scalable.
static SDL_Window * window
static void reset_predictor_group(PredictorState *ps, int group_num)
void(* apply_tns)(INTFLOAT coef[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
static ChannelElement * get_che(AACContext *ac, int type, int elem_id)
enum WindowSequence window_sequence[2]
INTFLOAT ltp_state[3072]
time signal for LTP
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
const uint8_t ff_aac_num_swb_512[]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
static int aac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
int predictor_reset_group
const uint8_t *const ff_aac_spectral_bits[11]
static int frame_configure_elements(AVCodecContext *avctx)
int dyn_rng_ctl[17]
DRC magnitude information.
int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a potentially unaligned GetBitContext to retrieve audio configura...
static const INTFLOAT ltp_coef[8]
static void decode_mid_side_stereo(ChannelElement *cpe, GetBitContext *gb, int ms_present)
Decode Mid/Side data; reference: table 4.54.
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
static void apply_intensity_stereo(AACContext *ac, ChannelElement *cpe, int ms_present)
intensity stereo decoding; reference: 4.6.8.2.3
static INTFLOAT aac_kbd_short_120[120]
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define PREFIX_FOR_22POINT2
void ff_aacdec_init_mips(AACContext *c)
int AAC_RENAME() ff_decode_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, GetBitContext *gb, int crc, int cnt, int id_aac)
Decode one SBR element.
#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.
static av_cold void aac_static_table_init(void)
void AAC_RENAME() ff_aac_sbr_ctx_close(SpectralBandReplication *sbr)
Close one SBR context.
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
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_EF_EXPLODE
abort decoding on minor error detection
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.
static int AAC_RENAME() compute_lpc_coefs(const LPC_TYPE *autoc, int max_order, LPC_TYPE *lpc, int lpc_stride, int fail, int normalize)
Levinson-Durbin recursion.
#define AV_CH_FRONT_CENTER
static void decode_ltp(LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb)
Decode Long Term Prediction data; reference: table 4.xx.
static int aac_decode_frame_int(AVCodecContext *avctx, void *data, int *got_frame_ptr, GetBitContext *gb, AVPacket *avpkt)
static void apply_dependent_coupling(AACContext *ac, SingleChannelElement *target, ChannelElement *cce, int index)
Apply dependent channel coupling (applied before IMDCT).
static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024], GetBitContext *gb, const INTFLOAT sf[120], int pulse_present, const Pulse *pulse, const IndividualChannelStream *ics, enum BandType band_type[120])
Decode spectral data; reference: table 4.50.
void AAC_RENAME() ff_aac_sbr_init(void)
Initialize SBR.
int pce_instance_tag
Indicates with which program the DRC info is associated.
N (code in SoC repo) Scalable Sample Rate.
static void windowing_and_mdct_ltp(AACContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
Apply windowing and MDCT to obtain the spectral coefficient from the predicted sample by LTP...
static const INTFLOAT *const tns_tmp2_map[4]
#define SHOW_UBITS(name, gb, num)
static int push_output_configuration(AACContext *ac)
Save current output configuration if and only if it has been locked.
#define FF_ARRAY_ELEMS(a)
#define AV_CH_FRONT_RIGHT_OF_CENTER
int interpolation_scheme
Indicates the interpolation scheme used in the SBR QMF domain.
static void reset_all_predictors(PredictorState *ps)
static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
Skip data_stream_element; reference: table 4.10.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int ch_select[8]
[0] shared list of gains; [1] list of gains for right channel; [2] list of gains for left channel; [3...
int frame_size
Number of samples per channel in an audio frame.
int force_dmono_mode
0->not dmono, 1->use first channel, 2->use second channel
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t(*layout_map)[3], int offset, uint64_t left, uint64_t right, int pos, uint64_t *layout)
#define AV_LOG_INFO
Standard information.
int warned_num_aac_frames
void(* imdct_half)(struct MDCT15Context *s, float *dst, const float *src, ptrdiff_t stride)
int sample_rate
samples per second
void AAC_RENAME() ff_sine_window_init(INTFLOAT *window, int n)
Generate a sine window.
static const AVOption options[]
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 ...
static int decode_scalefactors(AACContext *ac, INTFLOAT sf[120], GetBitContext *gb, unsigned int global_gain, IndividualChannelStream *ics, enum BandType band_type[120], int band_type_run_end[120])
Decode scalefactors; reference: table 4.47.
static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
Decode a channel_pair_element; reference: table 4.4.
static void apply_tns(INTFLOAT coef_param[1024], TemporalNoiseShaping *tns, IndividualChannelStream *ics, int decode)
Decode Temporal Noise Shaping filter coefficients and apply all-pole filters; reference: 4...
main external API structure.
int skip_samples_multiplier
#define NOISE_PRE_BITS
length of preamble
#define OPEN_READER(name, gb)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
IndividualChannelStream ics
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2]...the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so...,+,-,+,-,+,+,-,+,-,+,...hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32-hcoeff[1]-hcoeff[2]-...a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2}an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||.........intra?||||:Block01:yes no||||:Block02:.................||||:Block03::y DC::ref index:||||:Block04::cb DC::motion x:||||.........:cr DC::motion y:||||.................|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------------------------------|||Y subbands||Cb subbands||Cr subbands||||------||------||------|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||------||------||------||||------||------||------|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||------||------||------||||------||------||------|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||------||------||------||||------||------||------|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------------------------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction------------|\Dequantization-------------------\||Reference frames|\IDWT|--------------|Motion\|||Frame 0||Frame 1||Compensation.OBMC v-------|--------------|--------------.\------> Frame n output Frame Frame<----------------------------------/|...|-------------------Range Coder:============Binary Range Coder:-------------------The implemented range coder is an adapted version based upon"Range encoding: an algorithm for removing redundancy from a digitised message."by G.N.N.Martin.The symbols encoded by the Snow range coder are bits(0|1).The associated probabilities are not fix but change depending on the symbol mix seen so far.bit seen|new state---------+-----------------------------------------------0|256-state_transition_table[256-old_state];1|state_transition_table[old_state];state_transition_table={0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:-------------------------FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1.the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats.
static av_always_inline float cbrtf(float x)
void AAC_RENAME() ff_aac_sbr_ctx_init(AACContext *ac, SpectralBandReplication *sbr, int id_aac)
Initialize one SBR context.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
static unsigned int get_bits1(GetBitContext *s)
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
static void skip_bits1(GetBitContext *s)
#define AV_CH_TOP_BACK_RIGHT
Describe the class of an AVClass context structure.
int sample_rate
Sample rate of the audio data.
static av_cold int aac_decode_close(AVCodecContext *avctx)
static void skip_bits(GetBitContext *s, int n)
static int decode_audio_specific_config(AACContext *ac, AVCodecContext *avctx, MPEG4AudioConfig *m4ac, const uint8_t *data, int64_t bit_size, int sync_extension)
static uint64_t sniff_channel_order(uint8_t(*layout_map)[3], int tags)
#define AAC_KBD_RENAME(x)
const uint16_t *const ff_swb_offset_960[]
static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc, GetBitContext *gb)
Parse whether channels are to be excluded from Dynamic Range Compression; reference: table 4...
static void noise_scale(int *coefs, int scale, int band_energy, int len)
static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac, uint8_t(*layout_map)[3], GetBitContext *gb, int byte_align_ref)
Decode program configuration element; reference: table 4.2.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define GET_CACHE(name, gb)
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
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.
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
const uint32_t ff_aac_scalefactor_code[121]
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
Output configuration under trial specified by a frame header.
static int decode_prediction(AACContext *ac, IndividualChannelStream *ics, GetBitContext *gb)
const uint8_t ff_tns_max_bands_128[]
#define NOISE_OFFSET
subtracted from global gain, used as offset for the preamble
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype, int wtype, float *in, float *prev, int ch)
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.
#define AV_CH_BOTTOM_FRONT_RIGHT
int band_type_run_end[120]
band type run end points
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
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.
#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.
INTFLOAT coeffs[1024]
coefficients for IMDCT, maybe processed
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
static VLC vlc_spectral[11]
Scalefactor data are intensity stereo positions (out of phase).
N Error Resilient Enhanced Low Delay.
INTFLOAT coef[8][4][TNS_MAX_ORDER]
const uint8_t ff_aac_num_swb_120[]
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[]
uint8_t prediction_used[41]
static const int8_t filt[NUMTAPS *2]
const float ff_aac_eld_window_480[1800]
INTFLOAT saved[1536]
overlap
Single Channel Element - used for both SCE and LFE elements.
const uint8_t ff_aac_num_swb_480[]
const uint16_t *const ff_swb_offset_1024[]
void(* vector_pow43)(int *coefs, int len)
Individual Channel Stream.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
const uint16_t *const ff_aac_codebook_vector_idx[]
void(* update_ltp)(AACContext *ac, SingleChannelElement *sce)
av_cold void ff_mdct15_uninit(MDCT15Context **ps)
channel element - generic struct for SCE/CPE/CCE/LFE
static void decode_gain_control(SingleChannelElement *sce, GetBitContext *gb)
const uint16_t *const ff_aac_spectral_codes[11]
static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context)
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_DEBUG_STARTCODE
const uint8_t ff_tns_max_bands_512[]
Scalefactors and spectral data are all zero.
int channels
number of audio channels
static int * DEC_SPAIR(int *dst, unsigned idx)
struct AVCodecInternal * internal
Private context used for internal data.
static int ff_thread_once(char *control, void(*routine)(void))
VLC_TYPE(* table)[2]
code, bits
void(* subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context)
static const uint8_t * align_get_bits(GetBitContext *s)
#define FF_PROFILE_AAC_HE
enum BandType band_type[128]
band types
static int decode_dynamic_range(DynamicRangeControl *che_drc, GetBitContext *gb)
Decode dynamic range information; reference: table 4.52.
static VLC_TYPE vlc_buf[16716][2]
#define AV_CH_FRONT_RIGHT
#define POW_SF2_ZERO
ff_aac_pow2sf_tab index corresponding to pow(2, 0);
static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
void(* windowing_and_mdct_ltp)(AACContext *ac, INTFLOAT *out, INTFLOAT *in, IndividualChannelStream *ics)
Filter the word “frame” indicates either a video frame or a group of audio samples
int sbr
-1 implicit, 1 presence
static void apply_mid_side_stereo(AACContext *ac, ChannelElement *cpe)
Mid/Side stereo decoding; reference: 4.6.8.1.3.
void(* imdct_and_windowing)(AACContext *ac, SingleChannelElement *sce)
#define FFSWAP(type, a, b)
int ps
-1 implicit, 1 presence
int8_t used[MAX_LTP_LONG_SFB]
const uint16_t *const ff_swb_offset_128[]
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
static const AVClass aac_decoder_class
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)
#define INIT_VLC_STATIC_OVERLONG
This structure stores compressed data.
mode
Use these values in ebur128_init (or'ed).
int nb_samples
number of audio samples (per channel) described by this frame
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
void AAC_RENAME() ff_init_ff_sine_windows(int index)
initialize the specified entry of ff_sine_windows
static int * DEC_UQUAD(int *dst, unsigned idx, unsigned sign)
static float * VMUL4(float *dst, const float *v, unsigned idx, const float *scale)
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats, and store the result in a vector of floats...