63 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
87 3.162275, 2.818382, 2.511886, 2.238719, 1.995261, 1.778278, 1.584893,
88 1.412536, 1.258924, 1.122018, 1.000000, 0.891251, 0.794328, 0.707946,
89 0.630957, 0.562341, 0.501187, 0.446683, 0.398107, 0.354813, 0.316227,
90 0.281838, 0.251188, 0.223872, 0.199526, 0.177828, 0.158489, 0.141253,
91 0.125892, 0.112201, 0.100000, 0.089125
99 { { 2, 7 }, { 7, 2 }, },
101 { { 2, 7 }, { 7, 2 }, },
102 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
103 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
104 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
105 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
106 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
136 return ((code - (levels >> 1)) * (1 << 24)) / levels;
148 for (i = 0; i < 128; i++) {
156 for (i = 0; i < 32; i++) {
162 for (i = 0; i < 128; i++) {
174 for (i = 0; i < 7; i++) {
178 for (i = 0; i < 15; i++) {
186 for (i = 0; i < 256; i++) {
187 int v = (i >> 5) - ((i >> 7) << 3) - 5;
193 for (i = 0; i < 256; i++) {
194 int v = (i >> 4) - ((i >> 7) << 4) - 4;
241 s->xcfptr[i] = s->transform_coeffs[i];
242 s->dlyptr[i] = s->delay[i];
259 i = !s->channel_mode;
261 s->dialog_normalization[(!s->channel_mode)-i] = -
get_bits(gbc, 5);
262 if (s->dialog_normalization[(!s->channel_mode)-i] == 0) {
263 s->dialog_normalization[(!s->channel_mode)-i] = -31;
265 if (s->target_level != 0) {
266 s->level_gain[(!s->channel_mode)-i] =
powf(2.0f,
267 (
float)(s->target_level -
268 s->dialog_normalization[(!s->channel_mode)-i])/6.0f);
270 if (s->compression_exists[(!s->channel_mode)-i] =
get_bits1(gbc)) {
271 s->heavy_dynamic_range[(!s->channel_mode)-i] =
283 if (s->bitstream_id != 6) {
290 s->preferred_downmix =
get_bits(gbc, 2);
291 s->center_mix_level_ltrt =
get_bits(gbc, 3);
292 s->surround_mix_level_ltrt = av_clip(
get_bits(gbc, 3), 3, 7);
293 s->center_mix_level =
get_bits(gbc, 3);
294 s->surround_mix_level = av_clip(
get_bits(gbc, 3), 3, 7);
297 s->dolby_surround_ex_mode =
get_bits(gbc, 2);
298 s->dolby_headphone_mode =
get_bits(gbc, 2);
327 s->bit_alloc_params.sr_code = hdr.
sr_code;
332 s->bit_alloc_params.sr_shift = hdr.
sr_shift;
336 s->fbw_channels = s->channels - s->lfe_on;
337 s->lfe_ch = s->fbw_channels + 1;
342 s->center_mix_level_ltrt = 4;
344 s->surround_mix_level_ltrt = 4;
345 s->lfe_mix_level_exists = 0;
354 s->start_freq[s->lfe_ch] = 0;
355 s->end_freq[s->lfe_ch] = 7;
356 s->num_exp_groups[s->lfe_ch] = 2;
357 s->channel_in_cpl[s->lfe_ch] = 0;
360 if (s->bitstream_id <= 10) {
362 s->snr_offset_strategy = 2;
363 s->block_switch_syntax = 1;
364 s->dither_flag_syntax = 1;
365 s->bit_allocation_syntax = 1;
366 s->fast_gain_syntax = 0;
367 s->first_cpl_leak = 0;
370 memset(s->channel_uses_aht, 0,
sizeof(s->channel_uses_aht));
393 if (!s->downmix_coeffs[0]) {
395 sizeof(**s->downmix_coeffs));
396 if (!s->downmix_coeffs[0])
401 for (i = 0; i < s->fbw_channels; i++) {
403 downmix_coeffs[1][i] =
gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
405 if (s->channel_mode > 1 && s->channel_mode & 1) {
406 downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
409 int nf = s->channel_mode - 2;
410 downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix *
LEVEL_MINUS_3DB;
413 int nf = s->channel_mode - 4;
414 downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
419 for (i = 0; i < s->fbw_channels; i++) {
420 norm0 += downmix_coeffs[0][i];
421 norm1 += downmix_coeffs[1][i];
423 norm0 = 1.0f / norm0;
424 norm1 = 1.0f / norm1;
425 for (i = 0; i < s->fbw_channels; i++) {
426 downmix_coeffs[0][i] *= norm0;
427 downmix_coeffs[1][i] *= norm1;
431 for (i = 0; i < s->fbw_channels; i++)
432 downmix_coeffs[0][i] = (downmix_coeffs[0][i] +
435 for (i = 0; i < s->fbw_channels; i++) {
436 s->downmix_coeffs[0][i] =
FIXR12(downmix_coeffs[0][i]);
437 s->downmix_coeffs[1][i] =
FIXR12(downmix_coeffs[1][i]);
451 int i, j, grp, group_size;
456 group_size = exp_strategy + (exp_strategy ==
EXP_D45);
457 for (grp = 0, i = 0; grp < ngrps; grp++) {
470 for (i = 0, j = 0; i < ngrps * 3; i++) {
471 prevexp += dexp[i] - 2;
476 switch (group_size) {
477 case 4: dexps[j++] = prevexp;
478 dexps[j++] = prevexp;
479 case 2: dexps[j++] = prevexp;
480 case 1: dexps[j++] = prevexp;
495 bin = s->start_freq[
CPL_CH];
496 for (band = 0; band < s->num_cpl_bands; band++) {
497 int band_start = bin;
498 int band_end = bin + s->cpl_band_sizes[band];
499 for (ch = 1; ch <= s->fbw_channels; ch++) {
500 if (s->channel_in_cpl[ch]) {
501 int cpl_coord = s->cpl_coords[
ch][band] << 5;
502 for (bin = band_start; bin < band_end; bin++) {
503 s->fixed_coeffs[
ch][bin] =
504 MULH(s->fixed_coeffs[
CPL_CH][bin] * (1 << 4), cpl_coord);
506 if (ch == 2 && s->phase_flags[band]) {
507 for (bin = band_start; bin < band_end; bin++)
508 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
534 int start_freq = s->start_freq[ch_index];
535 int end_freq = s->end_freq[ch_index];
536 uint8_t *baps = s->bap[ch_index];
537 int8_t *exps = s->dexps[ch_index];
539 int dither = (ch_index ==
CPL_CH) || s->dither_flag[ch_index];
543 for (freq = start_freq; freq < end_freq; freq++) {
544 int bap = baps[freq];
550 mantissa = (((
av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
604 coeffs[freq] = mantissa >> exps[freq];
616 for (ch = 1; ch <= s->fbw_channels; ch++) {
617 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
618 for (i = s->start_freq[
CPL_CH]; i < s->end_freq[
CPL_CH]; i++) {
620 s->fixed_coeffs[
ch][i] = 0;
629 if (!s->channel_uses_aht[ch]) {
637 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
638 s->fixed_coeffs[
ch][bin] = s->pre_mantissa[
ch][bin][
blk] >> s->dexps[
ch][bin];
654 for (ch = 1; ch <= s->channels; ch++) {
659 if (s->channel_in_cpl[ch]) {
665 end = s->end_freq[
CPL_CH];
667 end = s->end_freq[
ch];
670 s->fixed_coeffs[
ch][
end] = 0;
687 end =
FFMIN(s->end_freq[1], s->end_freq[2]);
689 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
690 if (s->rematrixing_flags[bnd]) {
693 int tmp0 = s->fixed_coeffs[1][i];
694 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
695 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
710 for (ch = 1; ch <=
channels; ch++) {
711 if (s->block_switch[ch]) {
714 for (i = 0; i < 128; i++)
715 x[i] = s->transform_coeffs[ch][2 * i];
716 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
718 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
719 s->tmp_output, s->window, 128, 8);
721 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
722 s->tmp_output, s->window, 128);
724 for (i = 0; i < 128; i++)
725 x[i] = s->transform_coeffs[ch][2 * i + 1];
726 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1 + offset], x);
728 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
730 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
731 s->tmp_output, s->window, 128, 8);
733 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
734 s->tmp_output, s->window, 128);
736 memcpy(s->delay[ch - 1 + offset], s->tmp_output + 128, 128 *
sizeof(
FFTSample));
746 int channel_data_size =
sizeof(s->delay[0]);
747 switch (s->channel_mode) {
751 memcpy(s->delay[1], s->delay[0], channel_data_size);
754 memset(s->delay[3], 0, channel_data_size);
756 memset(s->delay[2], 0, channel_data_size);
759 memset(s->delay[4], 0, channel_data_size);
761 memset(s->delay[3], 0, channel_data_size);
763 memcpy(s->delay[2], s->delay[1], channel_data_size);
764 memset(s->delay[1], 0, channel_data_size);
787 int ecpl,
int start_subband,
int end_subband,
788 const uint8_t *default_band_struct,
789 int *num_bands,
uint8_t *band_sizes,
790 uint8_t *band_struct,
int band_struct_size)
792 int subbnd, bnd, n_subbands, n_bands=0;
795 n_subbands = end_subband - start_subband;
798 memcpy(band_struct, default_band_struct, band_struct_size);
800 av_assert0(band_struct_size >= start_subband + n_subbands);
802 band_struct += start_subband + 1;
806 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
814 if (num_bands || band_sizes ) {
815 n_bands = n_subbands;
816 bnd_sz[0] = ecpl ? 6 : 12;
817 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
818 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
819 if (band_struct[subbnd - 1]) {
821 bnd_sz[bnd] += subbnd_size;
823 bnd_sz[++bnd] = subbnd_size;
830 *num_bands = n_bands;
832 memcpy(band_sizes, bnd_sz, n_bands);
838 int fbw_channels = s->fbw_channels;
839 int dst_start_freq, dst_end_freq, src_start_freq,
840 start_subband, end_subband,
ch;
844 s->channel_uses_spx[1] = 1;
846 for (ch = 1; ch <= fbw_channels; ch++)
853 start_subband =
get_bits(bc, 3) + 2;
854 if (start_subband > 7)
855 start_subband += start_subband - 7;
861 end_subband += end_subband - 7;
862 dst_start_freq = dst_start_freq * 12 + 25;
863 src_start_freq = start_subband * 12 + 25;
864 dst_end_freq = end_subband * 12 + 25;
867 if (start_subband >= end_subband) {
869 "range (%d >= %d)\n", start_subband, end_subband);
872 if (dst_start_freq >= src_start_freq) {
874 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
878 s->spx_dst_start_freq = dst_start_freq;
879 s->spx_src_start_freq = src_start_freq;
881 s->spx_dst_end_freq = dst_end_freq;
884 start_subband, end_subband,
888 s->spx_band_struct,
sizeof(s->spx_band_struct));
895 int fbw_channels = s->fbw_channels;
898 for (ch = 1; ch <= fbw_channels; ch++) {
899 if (s->channel_uses_spx[ch]) {
900 if (s->first_spx_coords[ch] ||
get_bits1(bc)) {
902 int bin, master_spx_coord;
904 s->first_spx_coords[
ch] = 0;
906 master_spx_coord =
get_bits(bc, 2) * 3;
908 bin = s->spx_src_start_freq;
909 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
910 int bandsize = s->spx_band_sizes[bnd];
911 int spx_coord_exp, spx_coord_mant;
915 int64_t accu = ((bin << 23) + (bandsize << 22))
916 * (int64_t)s->spx_dst_end_freq;
917 nratio = (
int)(accu >> 32);
918 nratio -= spx_blend << 18;
923 }
else if (nratio > 0x7fffff) {
928 accu = (int64_t)nblend * 1859775393;
929 nblend = (
int)((accu + (1<<29)) >> 30);
936 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
937 nratio = av_clipf(nratio, 0.0f, 1.0f);
938 nblend = sqrtf(3.0f * nratio);
940 sblend = sqrtf(1.0f - nratio);
947 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
948 else spx_coord_mant += 4;
949 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
953 accu = (int64_t)nblend * spx_coord_mant;
954 s->spx_noise_blend[
ch][bnd] = (
int)((accu + (1<<22)) >> 23);
955 accu = (int64_t)sblend * spx_coord_mant;
956 s->spx_signal_blend[
ch][bnd] = (
int)((accu + (1<<22)) >> 23);
958 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
959 s->spx_noise_blend [
ch][bnd] = nblend * spx_coord;
960 s->spx_signal_blend[
ch][bnd] = sblend * spx_coord;
965 s->first_spx_coords[
ch] = 1;
974 int fbw_channels = s->fbw_channels;
975 int channel_mode = s->channel_mode;
981 if (s->cpl_in_use[blk]) {
983 int cpl_start_subband, cpl_end_subband;
999 s->channel_in_cpl[1] = 1;
1000 s->channel_in_cpl[2] = 1;
1002 for (ch = 1; ch <= fbw_channels; ch++)
1011 cpl_start_subband =
get_bits(bc, 4);
1012 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
1014 if (cpl_start_subband >= cpl_end_subband) {
1016 cpl_start_subband, cpl_end_subband);
1019 s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
1020 s->end_freq[
CPL_CH] = cpl_end_subband * 12 + 37;
1025 &s->num_cpl_bands, s->cpl_band_sizes,
1026 s->cpl_band_struct,
sizeof(s->cpl_band_struct));
1029 for (ch = 1; ch <= fbw_channels; ch++) {
1030 s->channel_in_cpl[
ch] = 0;
1031 s->first_cpl_coords[
ch] = 1;
1033 s->first_cpl_leak = s->eac3;
1034 s->phase_flags_in_use = 0;
1043 int fbw_channels = s->fbw_channels;
1045 int cpl_coords_exist = 0;
1047 for (ch = 1; ch <= fbw_channels; ch++) {
1048 if (s->channel_in_cpl[ch]) {
1049 if ((s->eac3 && s->first_cpl_coords[ch]) ||
get_bits1(bc)) {
1050 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
1051 s->first_cpl_coords[
ch] = 0;
1052 cpl_coords_exist = 1;
1053 master_cpl_coord = 3 *
get_bits(bc, 2);
1054 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1057 if (cpl_coord_exp == 15)
1058 s->cpl_coords[
ch][bnd] = cpl_coord_mant << 22;
1060 s->cpl_coords[
ch][bnd] = (cpl_coord_mant + 16) << 21;
1061 s->cpl_coords[
ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
1065 "be present in block 0\n");
1070 s->first_cpl_coords[
ch] = 1;
1075 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1076 s->phase_flags[bnd] = s->phase_flags_in_use ?
get_bits1(bc) : 0;
1088 int fbw_channels = s->fbw_channels;
1089 int channel_mode = s->channel_mode;
1090 int i, bnd, seg,
ch, ret;
1091 int different_transforms;
1098 different_transforms = 0;
1099 if (s->block_switch_syntax) {
1100 for (ch = 1; ch <= fbw_channels; ch++) {
1102 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
1103 different_transforms = 1;
1108 if (s->dither_flag_syntax) {
1109 for (ch = 1; ch <= fbw_channels; ch++) {
1115 i = !s->channel_mode;
1122 if (range_bits <= 127 || s->drc_scale <= 1.0)
1125 s->dynamic_range[i] = range;
1126 }
else if (blk == 0) {
1132 if (s->eac3 && (!blk ||
get_bits1(gbc))) {
1134 if (s->spx_in_use) {
1139 if (!s->eac3 || !s->spx_in_use) {
1141 for (ch = 1; ch <= fbw_channels; ch++) {
1142 s->channel_uses_spx[
ch] = 0;
1143 s->first_spx_coords[
ch] = 1;
1152 if (s->eac3 ? s->cpl_strategy_exists[blk] :
get_bits1(gbc)) {
1155 }
else if (!s->eac3) {
1158 "be present in block 0\n");
1161 s->cpl_in_use[
blk] = s->cpl_in_use[blk-1];
1164 cpl_in_use = s->cpl_in_use[
blk];
1174 if ((s->eac3 && !blk) ||
get_bits1(gbc)) {
1175 s->num_rematrixing_bands = 4;
1176 if (cpl_in_use && s->start_freq[
CPL_CH] <= 61) {
1177 s->num_rematrixing_bands -= 1 + (s->start_freq[
CPL_CH] == 37);
1178 }
else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1179 s->num_rematrixing_bands--;
1181 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1182 s->rematrixing_flags[bnd] =
get_bits1(gbc);
1185 "new rematrixing strategy not present in block 0\n");
1186 s->num_rematrixing_bands = 0;
1191 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1193 s->exp_strategy[
blk][
ch] =
get_bits(gbc, 2 - (ch == s->lfe_ch));
1194 if (s->exp_strategy[blk][ch] !=
EXP_REUSE)
1195 bit_alloc_stages[
ch] = 3;
1199 for (ch = 1; ch <= fbw_channels; ch++) {
1200 s->start_freq[
ch] = 0;
1201 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1203 int prev = s->end_freq[
ch];
1204 if (s->channel_in_cpl[ch])
1205 s->end_freq[
ch] = s->start_freq[
CPL_CH];
1206 else if (s->channel_uses_spx[ch])
1207 s->end_freq[
ch] = s->spx_src_start_freq;
1209 int bandwidth_code =
get_bits(gbc, 6);
1210 if (bandwidth_code > 60) {
1214 s->end_freq[
ch] = bandwidth_code * 3 + 73;
1216 group_size = 3 << (s->exp_strategy[
blk][
ch] - 1);
1217 s->num_exp_groups[
ch] = (s->end_freq[
ch] + group_size-4) / group_size;
1218 if (blk > 0 && s->end_freq[ch] != prev)
1224 (3 << (s->exp_strategy[blk][
CPL_CH] - 1));
1228 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1229 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1232 s->num_exp_groups[ch], s->dexps[ch][0],
1233 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1236 if (ch !=
CPL_CH && ch != s->lfe_ch)
1242 if (s->bit_allocation_syntax) {
1249 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1250 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1253 "be present in block 0\n");
1259 if (!s->eac3 || !blk) {
1260 if (s->snr_offset_strategy &&
get_bits1(gbc)) {
1263 csnr = (
get_bits(gbc, 6) - 15) << 4;
1264 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1266 if (ch == i || s->snr_offset_strategy == 2)
1267 snr = (csnr +
get_bits(gbc, 4)) << 2;
1269 if (blk && s->snr_offset[ch] != snr) {
1270 bit_alloc_stages[
ch] =
FFMAX(bit_alloc_stages[ch], 1);
1272 s->snr_offset[
ch] = snr;
1276 int prev = s->fast_gain[
ch];
1279 if (blk && prev != s->fast_gain[ch])
1280 bit_alloc_stages[
ch] =
FFMAX(bit_alloc_stages[ch], 2);
1283 }
else if (!s->eac3 && !blk) {
1290 if (s->fast_gain_syntax &&
get_bits1(gbc)) {
1291 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1292 int prev = s->fast_gain[
ch];
1295 if (blk && prev != s->fast_gain[ch])
1296 bit_alloc_stages[
ch] =
FFMAX(bit_alloc_stages[ch], 2);
1298 }
else if (s->eac3 && !blk) {
1299 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1310 if (s->first_cpl_leak ||
get_bits1(gbc)) {
1315 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1316 sl != s->bit_alloc_params.cpl_slow_leak)) {
1319 s->bit_alloc_params.cpl_fast_leak = fl;
1320 s->bit_alloc_params.cpl_slow_leak = sl;
1321 }
else if (!s->eac3 && !blk) {
1323 "be present in block 0\n");
1326 s->first_cpl_leak = 0;
1332 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1338 bit_alloc_stages[
ch] =
FFMAX(bit_alloc_stages[ch], 2);
1341 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1342 if (s->dba_mode[ch] ==
DBA_NEW) {
1344 for (seg = 0; seg < s->dba_nsegs[
ch]; seg++) {
1350 bit_alloc_stages[
ch] =
FFMAX(bit_alloc_stages[ch], 2);
1353 }
else if (blk == 0) {
1354 for (ch = 0; ch <= s->channels; ch++) {
1360 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1361 if (bit_alloc_stages[ch] > 2) {
1364 s->start_freq[ch], s->end_freq[ch],
1365 s->psd[ch], s->band_psd[ch]);
1367 if (bit_alloc_stages[ch] > 1) {
1371 s->start_freq[ch], s->end_freq[ch],
1372 s->fast_gain[ch], (ch == s->lfe_ch),
1373 s->dba_mode[ch], s->dba_nsegs[ch],
1374 s->dba_offsets[ch], s->dba_lengths[ch],
1375 s->dba_values[ch], s->mask[ch])) {
1380 if (bit_alloc_stages[ch] > 0) {
1384 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1385 s->start_freq[ch], s->end_freq[ch],
1387 s->bit_alloc_params.floor,
1388 bap_tab, s->bap[ch]);
1409 for (ch = 1; ch <= s->channels; ch++) {
1410 int audio_channel = 0;
1413 audio_channel = 2-
ch;
1414 if (s->heavy_compression && s->compression_exists[audio_channel])
1415 gain = s->heavy_dynamic_range[audio_channel];
1417 gain = s->dynamic_range[audio_channel];
1420 scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1422 if (s->target_level != 0)
1423 gain = gain * s->level_gain[audio_channel];
1424 gain *= 1.0 / 4194304.0f;
1425 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1426 s->fixed_coeffs[ch], gain, 256);
1438 downmix_output = s->channels != s->out_channels &&
1439 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1440 s->fbw_channels == s->out_channels);
1441 if (different_transforms) {
1451 if (downmix_output) {
1454 s->out_channels, s->fbw_channels, 256);
1457 s->out_channels, s->fbw_channels, 256);
1461 if (downmix_output) {
1463 s->out_channels, s->fbw_channels, 256);
1466 if (downmix_output && !s->downmixed) {
1469 s->out_channels, s->fbw_channels, 128);
1472 do_imdct(s, s->out_channels, offset);
1482 int *got_frame_ptr,
AVPacket *avpkt)
1486 int buf_size, full_buf_size = avpkt->
size;
1489 int got_independent_frame = 0;
1496 s->superframe_size = 0;
1498 buf_size = full_buf_size;
1501 if (buf_size >= 2 &&
AV_RB16(buf) == 0x770B) {
1503 int cnt =
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1504 s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1505 (
const uint16_t *) buf, cnt);
1507 memcpy(s->input_buffer, buf,
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1512 if (s->consistent_noise_generation)
1515 buf = s->input_buffer;
1541 if (s->substreamid) {
1543 "unsupported substream %d: skipping frame\n",
1560 if (s->frame_size > buf_size) {
1566 s->frame_size - 2)) {
1578 return FFMIN(full_buf_size, s->frame_size);
1582 if (!err || (s->channels && s->out_channels != s->channels)) {
1583 s->out_channels = s->channels;
1584 s->output_mode = s->channel_mode;
1586 s->output_mode |= AC3_OUTPUT_LFEON;
1587 if (s->channels > 1 &&
1589 s->out_channels = 1;
1591 }
else if (s->channels > 2 &&
1593 s->out_channels = 2;
1597 s->loro_center_mix_level =
gain_levels[s-> center_mix_level];
1598 s->loro_surround_mix_level =
gain_levels[s->surround_mix_level];
1602 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1603 s->fbw_channels == s->out_channels)) {
1609 }
else if (!s->channels) {
1615 if (s->output_mode & AC3_OUTPUT_LFEON)
1620 if (s->bitstream_mode == 0x7 && s->channels > 1)
1627 output[
ch] = s->output[ch +
offset];
1628 s->outptr[
ch] = s->output[ch +
offset];
1630 for (ch = 0; ch < s->channels; ch++) {
1631 if (ch < s->out_channels)
1632 s->outptr[channel_map[
ch]] = s->output_buffer[ch +
offset];
1634 for (blk = 0; blk < s->num_blocks; blk++) {
1640 for (ch = 0; ch < s->out_channels; ch++)
1642 for (ch = 0; ch < s->out_channels; ch++)
1643 output[ch] = s->outptr[channel_map[ch]];
1644 for (ch = 0; ch < s->out_channels; ch++) {
1645 if (!ch || channel_map[ch])
1651 for (ch = 0; ch < s->out_channels; ch++)
1655 if (buf_size > s->frame_size) {
1659 if ((ret =
init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0)
1670 buf += s->frame_size;
1671 buf_size -= s->frame_size;
1672 s->prev_output_mode = s->output_mode;
1673 s->prev_bit_rate = s->bit_rate;
1674 got_independent_frame = 1;
1675 goto dependent_frame;
1685 avctx->
bit_rate = s->bit_rate + s->prev_bit_rate;
1689 extended_channel_map[ch] = ch;
1693 uint64_t channel_layout;
1696 if (s->prev_output_mode & AC3_OUTPUT_LFEON)
1699 channel_layout = ich_layout;
1700 for (ch = 0; ch < 16; ch++) {
1701 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1710 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1716 extended_channel_map[
index] = offset + channel_map[extend++];
1720 for (i = 0; i < 64; i++) {
1726 extended_channel_map[
index] = offset + channel_map[extend++];
1739 for (ch = 0; ch < avctx->
channels; ch++) {
1740 int map = extended_channel_map[
ch];
1753 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1759 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1760 switch (s->dolby_surround_ex_mode) {
1776 switch (s->preferred_downmix) {
1794 if (s->lfe_mix_level_exists)
1803 return FFMIN(full_buf_size, s->superframe_size);
1820 #define OFFSET(x) offsetof(AC3DecodeContext, x) 1821 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
static const uint64_t custom_channel_map_locations[16][2]
static int coupling_strategy(AC3DecodeContext *s, int blk, uint8_t *bit_alloc_stages)
void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix, int out_ch, int in_ch, int len)
const uint8_t ff_ac3_bap_tab[64]
static const uint8_t ac3_default_coeffs[8][5][2]
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channel...
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
#define AV_CH_TOP_FRONT_RIGHT
static int spx_strategy(AC3DecodeContext *s, int blk)
const uint8_t ff_eac3_default_spx_band_struct[17]
Table E2.15 Default Spectral Extension Banding Structure.
const uint8_t ff_ac3_slow_decay_tab[4]
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.
int64_t bit_rate
the average bitrate
const uint8_t ff_ac3_ungroup_3_in_5_bits_tab[32][3]
Table used to ungroup 3 values stored in 5 bits.
static int ff_eac3_parse_header(AC3DecodeContext *s)
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define CONFIG_EAC3_DECODER
double center_mix_level_ltrt
Absolute scale factor representing the nominal level of the center channel during an Lt/Rt compatible...
#define AV_CH_TOP_FRONT_LEFT
static const uint8_t bap_tab[64]
#define LEVEL_PLUS_1POINT5DB
AVDownmixInfo * av_downmix_info_update_side_data(AVFrame *frame)
Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
#define AV_CH_TOP_FRONT_CENTER
static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
Decode the transform coefficients for a particular channel reference: Section 7.3 Quantization and De...
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(INT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={ FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){ in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);} ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map) { switch(av_get_bytes_per_sample(in_fmt)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } if(HAVE_X86ASM &&HAVE_MMX) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;} if(ctx->out_simd_align_mask) { int planes=out->planar ? out->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;} if(ctx->simd_f &&!ctx->ch_map &&!misaligned){ off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){ if(out->planar==in->planar){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out-> ch ch
#define AV_CH_LOW_FREQUENCY_2
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
#define AV_CH_SURROUND_DIRECT_RIGHT
#define AV_CH_LAYOUT_STEREO
const uint16_t ff_ac3_slow_gain_tab[4]
static int get_sbits(GetBitContext *s, int n)
static void spx_coordinates(AC3DecodeContext *s)
static void scale_coefs(int32_t *dst, const int32_t *src, int dynrng, int len)
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
enum AVSampleFormat sample_fmt
audio sample format
#define AV_CH_TOP_BACK_LEFT
static av_cold int end(AVCodecContext *avctx)
static av_cold int ac3_decode_end(AVCodecContext *avctx)
Uninitialize the AC-3 decoder.
static uint8_t ungroup_3_in_7_bits_tab[128][3]
table for ungrouping 3 values in 7 bits.
#define AV_CH_LOW_FREQUENCY
Public header for CRC hash function implementation.
double surround_mix_level_ltrt
Absolute scale factor representing the nominal level of the surround channels during an Lt/Rt compati...
static int b1_mantissas[32][3]
tables for ungrouping mantissas
Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible.
#define LEVEL_MINUS_1POINT5DB
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
static void do_imdct(AC3DecodeContext *s, int channels, int offset)
Inverse MDCT Transform.
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
Grouped mantissas for 3-level 5-level and 11-level quantization.
const uint16_t avpriv_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
This structure describes optional metadata relevant to a downmix procedure.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AC3_DYNAMIC_RANGE1
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
const uint8_t ff_ac3_fast_decay_tab[4]
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
static const uint8_t dither[8][8]
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
int flags
AV_CODEC_FLAG_*.
int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, int start, int end, int fast_gain, int is_lfe, int dba_mode, int dba_nsegs, uint8_t *dba_offsets, uint8_t *dba_lengths, uint8_t *dba_values, int16_t *mask)
Calculate the masking curve.
static const uint8_t offset[127][2]
static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
Decode a single audio block from the AC-3 bitstream.
static int ac3_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Decode a single AC-3 frame.
uint64_t channel_layout
Audio channel layout.
#define LEVEL_MINUS_4POINT5DB
static int b3_mantissas[8]
static int set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
static float dynamic_range_tab[256]
dynamic range table.
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
#define AC3_HEAVY_RANGE(x)
audio channel layout utility functions
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
static int b5_mantissas[16]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Lt/Rt 2-channel downmix, Dolby Surround compatible.
av_cold void ff_ac3dsp_init(AC3DSPContext *c, int bit_exact)
const uint16_t ff_ac3_fast_gain_tab[8]
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
static int b2_mantissas[128][3]
Lo/Ro 2-channel downmix (Stereo).
#define AV_CH_FRONT_LEFT_OF_CENTER
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define AV_CH_FRONT_CENTER
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
static int b4_mantissas[128][2]
static void decode_band_structure(GetBitContext *gbc, int blk, int eac3, int ecpl, int start_subband, int end_subband, const uint8_t *default_band_struct, int *num_bands, uint8_t *band_sizes, uint8_t *band_struct, int band_struct_size)
Decode band structure for coupling, spectral extension, or enhanced coupling.
#define AV_CH_FRONT_RIGHT_OF_CENTER
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length)
Seed the state of the ALFG using binary data.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
double surround_mix_level
Absolute scale factor representing the nominal level of the surround channels during a regular downmi...
#define CPL_CH
coupling channel index
const uint8_t ff_eac3_default_cpl_band_struct[18]
Table E2.16 Default Coupling Banding Structure.
int sample_rate
samples per second
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
static const float gain_levels[9]
Adjustments in dB gain.
#define AV_EF_CAREFUL
consider things that violate the spec, are fast to calculate and have not been seen in the wild as er...
static unsigned int get_bits1(GetBitContext *s)
static const int end_freq_inv_tab[8]
#define AV_CH_TOP_BACK_RIGHT
static void skip_bits(GetBitContext *s, int n)
static int decode_exponents(AC3DecodeContext *s, GetBitContext *gbc, int exp_strategy, int ngrps, uint8_t absexp, int8_t *dexps)
Decode the grouped exponents according to exponent strategy.
static const uint8_t quantization_tab[16]
Quantization table: levels for symmetric.
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data...
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
const VDPAUPixFmtMap * map
#define FF_DECODE_ERROR_INVALID_BITSTREAM
const int16_t ff_ac3_floor_tab[8]
int decode_error_flags
decode error flags of the frame, set to a combination of FF_DECODE_ERROR_xxx flags if the decoder pro...
int av_get_channel_layout_channel_index(uint64_t channel_layout, uint64_t channel)
Get the index of a channel in channel_layout.
static int coupling_coordinates(AC3DecodeContext *s, int blk)
static int ac3_parse_header(AC3DecodeContext *s)
Parse the 'sync info' and 'bit stream info' from the AC-3 bitstream.
#define AV_CH_BACK_CENTER
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
#define AC3_DYNAMIC_RANGE(x)
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
common internal api header.
static void ac3_downmix_c_fixed16(int16_t **samples, int16_t **matrix, int out_ch, int in_ch, int len)
Downmix samples from original signal to stereo or mono (this is for 16-bit samples and fixed point de...
static av_cold void ac3_tables_init(void)
double center_mix_level
Absolute scale factor representing the nominal level of the center channel during a regular downmix...
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd, int16_t *band_psd)
Calculate the log power-spectral density of the input signal.
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
static int parse_frame_header(AC3DecodeContext *s)
Common function to parse AC-3 or E-AC-3 frame header.
static const int16_t coeffs[]
int channels
number of audio channels
static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
Generate transform coefficients for each coupled channel in the coupling range using the coupling coe...
static const float gain_levels_lfe[32]
Adjustments in dB gain (LFE, +10 to -21 dB)
#define AV_CH_SURROUND_DIRECT_LEFT
#define AV_CH_FRONT_RIGHT
static int symmetric_dequant(int code, int levels)
Symmetrical Dequantization reference: Section 7.3.3 Expansion of Mantissas for Symmetrical Quantizati...
static void ac3_upmix_delay(AC3DecodeContext *s)
Upmix delay samples from stereo to original channel layout.
const uint8_t ff_ac3_rematrix_band_tab[5]
Table of bin locations for rematrixing bands reference: Section 7.5.2 Rematrixing : Frequency Band De...
const uint8_t ff_eac3_hebap_tab[64]
#define av_malloc_array(a, b)
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from AC-3 order to SMPTE order.
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
const uint16_t ff_ac3_db_per_bit_tab[4]
#define AV_CH_LAYOUT_MONO
uint64_t request_channel_layout
Request decoder to use this channel layout if it can (0 for default)
static void remove_dithering(AC3DecodeContext *s)
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels...
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
float ff_ac3_heavy_dynamic_range_tab[256]
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.