63 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
84 3.162275, 2.818382, 2.511886, 2.238719, 1.995261, 1.778278, 1.584893,
85 1.412536, 1.258924, 1.122018, 1.000000, 0.891251, 0.794328, 0.707946,
86 0.630957, 0.562341, 0.501187, 0.446683, 0.398107, 0.354813, 0.316227,
87 0.281838, 0.251188, 0.223872, 0.199526, 0.177828, 0.158489, 0.141253,
88 0.125892, 0.112201, 0.100000, 0.089125
96 { { 2, 7 }, { 7, 2 }, },
98 { { 2, 7 }, { 7, 2 }, },
99 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
100 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
101 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
102 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
103 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
114 return ((code - (levels >> 1)) << 24) / levels;
126 for (i = 0; i < 128; i++) {
134 for (i = 0; i < 32; i++) {
140 for (i = 0; i < 128; i++) {
152 for (i = 0; i < 7; i++) {
156 for (i = 0; i < 15; i++) {
163 for (i = 0; i < 256; i++) {
164 int v = (i >> 5) - ((i >> 7) << 3) - 5;
202 s->xcfptr[i] = s->transform_coeffs[i];
203 s->dlyptr[i] = s->delay[i];
220 i = !s->channel_mode;
234 if (s->bitstream_id != 6) {
241 s->preferred_downmix =
get_bits(gbc, 2);
242 s->center_mix_level_ltrt =
get_bits(gbc, 3);
243 s->surround_mix_level_ltrt = av_clip(
get_bits(gbc, 3), 3, 7);
244 s->center_mix_level =
get_bits(gbc, 3);
245 s->surround_mix_level = av_clip(
get_bits(gbc, 3), 3, 7);
248 s->dolby_surround_ex_mode =
get_bits(gbc, 2);
249 s->dolby_headphone_mode =
get_bits(gbc, 2);
278 s->bit_alloc_params.sr_code = hdr.
sr_code;
283 s->bit_alloc_params.sr_shift = hdr.
sr_shift;
287 s->fbw_channels = s->channels - s->lfe_on;
288 s->lfe_ch = s->fbw_channels + 1;
292 s->center_mix_level_ltrt = 4;
294 s->surround_mix_level_ltrt = 4;
295 s->lfe_mix_level_exists = 0;
304 s->start_freq[s->lfe_ch] = 0;
305 s->end_freq[s->lfe_ch] = 7;
306 s->num_exp_groups[s->lfe_ch] = 2;
307 s->channel_in_cpl[s->lfe_ch] = 0;
310 if (s->bitstream_id <= 10) {
312 s->snr_offset_strategy = 2;
313 s->block_switch_syntax = 1;
314 s->dither_flag_syntax = 1;
315 s->bit_allocation_syntax = 1;
316 s->fast_gain_syntax = 0;
317 s->first_cpl_leak = 0;
320 memset(s->channel_uses_aht, 0,
sizeof(s->channel_uses_aht));
342 for (i = 0; i < s->fbw_channels; i++) {
344 s->downmix_coeffs[i][1] =
gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
346 if (s->channel_mode > 1 && s->channel_mode & 1) {
347 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
350 int nf = s->channel_mode - 2;
351 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix *
LEVEL_MINUS_3DB;
354 int nf = s->channel_mode - 4;
355 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
360 for (i = 0; i < s->fbw_channels; i++) {
361 norm0 += s->downmix_coeffs[i][0];
362 norm1 += s->downmix_coeffs[i][1];
364 norm0 = 1.0f / norm0;
365 norm1 = 1.0f / norm1;
366 for (i = 0; i < s->fbw_channels; i++) {
367 s->downmix_coeffs[i][0] *= norm0;
368 s->downmix_coeffs[i][1] *= norm1;
372 for (i = 0; i < s->fbw_channels; i++)
373 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] +
385 int i, j, grp, group_size;
390 group_size = exp_strategy + (exp_strategy ==
EXP_D45);
391 for (grp = 0, i = 0; grp < ngrps; grp++) {
400 for (i = 0, j = 0; i < ngrps * 3; i++) {
401 prevexp += dexp[i] - 2;
404 switch (group_size) {
405 case 4: dexps[j++] = prevexp;
406 dexps[j++] = prevexp;
407 case 2: dexps[j++] = prevexp;
408 case 1: dexps[j++] = prevexp;
423 bin = s->start_freq[
CPL_CH];
424 for (band = 0; band < s->num_cpl_bands; band++) {
425 int band_start = bin;
426 int band_end = bin + s->cpl_band_sizes[band];
427 for (ch = 1; ch <= s->fbw_channels; ch++) {
428 if (s->channel_in_cpl[ch]) {
429 int cpl_coord = s->cpl_coords[ch][band] << 5;
430 for (bin = band_start; bin < band_end; bin++) {
431 s->fixed_coeffs[ch][bin] =
432 MULH(s->fixed_coeffs[
CPL_CH][bin] << 4, cpl_coord);
434 if (ch == 2 && s->phase_flags[band]) {
435 for (bin = band_start; bin < band_end; bin++)
436 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
462 int start_freq = s->start_freq[ch_index];
463 int end_freq = s->end_freq[ch_index];
464 uint8_t *baps = s->bap[ch_index];
465 int8_t *exps = s->dexps[ch_index];
466 int32_t *coeffs = s->fixed_coeffs[ch_index];
467 int dither = (ch_index ==
CPL_CH) || s->dither_flag[ch_index];
471 for (freq = start_freq; freq < end_freq; freq++) {
472 int bap = baps[freq];
478 mantissa = (
av_lfg_get(&s->dith_state) / 362) - 5932275;
529 coeffs[freq] = mantissa >> exps[freq];
541 for (ch = 1; ch <= s->fbw_channels; ch++) {
542 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
543 for (i = s->start_freq[
CPL_CH]; i < s->end_freq[
CPL_CH]; i++) {
545 s->fixed_coeffs[ch][i] = 0;
554 if (!s->channel_uses_aht[ch]) {
562 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
563 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][
blk] >> s->dexps[ch][bin];
579 for (ch = 1; ch <= s->channels; ch++) {
584 if (s->channel_in_cpl[ch]) {
590 end = s->end_freq[
CPL_CH];
592 end = s->end_freq[ch];
595 s->fixed_coeffs[ch][end] = 0;
612 end =
FFMIN(s->end_freq[1], s->end_freq[2]);
614 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
615 if (s->rematrixing_flags[bnd]) {
618 int tmp0 = s->fixed_coeffs[1][i];
619 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
620 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
631 static inline void do_imdct(AC3DecodeContext *s,
int channels)
635 for (ch = 1; ch <= channels; ch++) {
636 if (s->block_switch[ch]) {
638 float *x = s->tmp_output + 128;
639 for (i = 0; i < 128; i++)
640 x[i] = s->transform_coeffs[ch][2 * i];
641 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
642 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
643 s->tmp_output, s->window, 128);
644 for (i = 0; i < 128; i++)
645 x[i] = s->transform_coeffs[ch][2 * i + 1];
646 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
648 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
649 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
650 s->tmp_output, s->window, 128);
651 memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 *
sizeof(
float));
661 int channel_data_size =
sizeof(s->delay[0]);
662 switch (s->channel_mode) {
666 memcpy(s->delay[1], s->delay[0], channel_data_size);
669 memset(s->delay[3], 0, channel_data_size);
671 memset(s->delay[2], 0, channel_data_size);
674 memset(s->delay[4], 0, channel_data_size);
676 memset(s->delay[3], 0, channel_data_size);
678 memcpy(s->delay[2], s->delay[1], channel_data_size);
679 memset(s->delay[1], 0, channel_data_size);
701 int ecpl,
int start_subband,
int end_subband,
702 const uint8_t *default_band_struct,
703 int *num_bands,
uint8_t *band_sizes)
705 int subbnd, bnd, n_subbands, n_bands=0;
710 n_subbands = end_subband - start_subband;
714 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
715 coded_band_struct[subbnd] =
get_bits1(gbc);
717 band_struct = coded_band_struct;
719 band_struct = &default_band_struct[start_subband+1];
728 if (num_bands || band_sizes ) {
729 n_bands = n_subbands;
730 bnd_sz[0] = ecpl ? 6 : 12;
731 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
732 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
733 if (band_struct[subbnd - 1]) {
735 bnd_sz[bnd] += subbnd_size;
737 bnd_sz[++bnd] = subbnd_size;
744 *num_bands = n_bands;
746 memcpy(band_sizes, bnd_sz, n_bands);
752 int fbw_channels = s->fbw_channels;
753 int dst_start_freq, dst_end_freq, src_start_freq,
754 start_subband, end_subband, ch;
758 s->channel_uses_spx[1] = 1;
760 for (ch = 1; ch <= fbw_channels; ch++)
767 start_subband =
get_bits(bc, 3) + 2;
768 if (start_subband > 7)
769 start_subband += start_subband - 7;
772 end_subband += end_subband - 7;
773 dst_start_freq = dst_start_freq * 12 + 25;
774 src_start_freq = start_subband * 12 + 25;
775 dst_end_freq = end_subband * 12 + 25;
778 if (start_subband >= end_subband) {
780 "range (%d >= %d)\n", start_subband, end_subband);
783 if (dst_start_freq >= src_start_freq) {
785 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
789 s->spx_dst_start_freq = dst_start_freq;
790 s->spx_src_start_freq = src_start_freq;
791 s->spx_dst_end_freq = dst_end_freq;
794 start_subband, end_subband,
805 int fbw_channels = s->fbw_channels;
808 for (ch = 1; ch <= fbw_channels; ch++) {
809 if (s->channel_uses_spx[ch]) {
810 if (s->first_spx_coords[ch] ||
get_bits1(bc)) {
812 int bin, master_spx_coord;
814 s->first_spx_coords[ch] = 0;
815 spx_blend =
get_bits(bc, 5) * (1.0f / 32);
816 master_spx_coord =
get_bits(bc, 2) * 3;
818 bin = s->spx_src_start_freq;
819 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
821 int spx_coord_exp, spx_coord_mant;
822 float nratio, sblend, nblend, spx_coord;
825 bandsize = s->spx_band_sizes[bnd];
826 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
827 nratio = av_clipf(nratio, 0.0f, 1.0f);
828 nblend = sqrtf(3.0f * nratio);
830 sblend = sqrtf(1.0f - nratio);
836 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
837 else spx_coord_mant += 4;
838 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
839 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
842 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
843 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
847 s->first_spx_coords[ch] = 1;
856 int fbw_channels = s->fbw_channels;
857 int channel_mode = s->channel_mode;
863 if (s->cpl_in_use[blk]) {
865 int cpl_start_subband, cpl_end_subband;
881 s->channel_in_cpl[1] = 1;
882 s->channel_in_cpl[2] = 1;
884 for (ch = 1; ch <= fbw_channels; ch++)
893 cpl_start_subband =
get_bits(bc, 4);
894 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
896 if (cpl_start_subband >= cpl_end_subband) {
898 cpl_start_subband, cpl_end_subband);
901 s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
902 s->end_freq[
CPL_CH] = cpl_end_subband * 12 + 37;
907 &s->num_cpl_bands, s->cpl_band_sizes);
910 for (ch = 1; ch <= fbw_channels; ch++) {
911 s->channel_in_cpl[ch] = 0;
912 s->first_cpl_coords[ch] = 1;
914 s->first_cpl_leak = s->eac3;
915 s->phase_flags_in_use = 0;
924 int fbw_channels = s->fbw_channels;
926 int cpl_coords_exist = 0;
928 for (ch = 1; ch <= fbw_channels; ch++) {
929 if (s->channel_in_cpl[ch]) {
930 if ((s->eac3 && s->first_cpl_coords[ch]) ||
get_bits1(bc)) {
931 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
932 s->first_cpl_coords[ch] = 0;
933 cpl_coords_exist = 1;
934 master_cpl_coord = 3 *
get_bits(bc, 2);
935 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
938 if (cpl_coord_exp == 15)
939 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
941 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
942 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
946 "be present in block 0\n");
951 s->first_cpl_coords[ch] = 1;
956 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
957 s->phase_flags[bnd] = s->phase_flags_in_use ?
get_bits1(bc) : 0;
969 int fbw_channels = s->fbw_channels;
970 int channel_mode = s->channel_mode;
971 int i, bnd, seg, ch, ret;
972 int different_transforms;
979 different_transforms = 0;
980 if (s->block_switch_syntax) {
981 for (ch = 1; ch <= fbw_channels; ch++) {
983 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
984 different_transforms = 1;
989 if (s->dither_flag_syntax) {
990 for (ch = 1; ch <= fbw_channels; ch++) {
996 i = !s->channel_mode;
1002 if (range > 1.0 || s->drc_scale <= 1.0)
1003 s->dynamic_range[i] =
powf(range, s->drc_scale);
1005 s->dynamic_range[i] = range;
1006 }
else if (blk == 0) {
1007 s->dynamic_range[i] = 1.0f;
1012 if (s->eac3 && (!blk ||
get_bits1(gbc))) {
1014 if (s->spx_in_use) {
1018 for (ch = 1; ch <= fbw_channels; ch++) {
1019 s->channel_uses_spx[ch] = 0;
1020 s->first_spx_coords[ch] = 1;
1030 if (s->eac3 ? s->cpl_strategy_exists[blk] :
get_bits1(gbc)) {
1033 }
else if (!s->eac3) {
1036 "be present in block 0\n");
1039 s->cpl_in_use[
blk] = s->cpl_in_use[blk-1];
1042 cpl_in_use = s->cpl_in_use[
blk];
1052 if ((s->eac3 && !blk) ||
get_bits1(gbc)) {
1053 s->num_rematrixing_bands = 4;
1054 if (cpl_in_use && s->start_freq[
CPL_CH] <= 61) {
1055 s->num_rematrixing_bands -= 1 + (s->start_freq[
CPL_CH] == 37);
1056 }
else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1057 s->num_rematrixing_bands--;
1059 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1060 s->rematrixing_flags[bnd] =
get_bits1(gbc);
1063 "new rematrixing strategy not present in block 0\n");
1064 s->num_rematrixing_bands = 0;
1069 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1071 s->exp_strategy[
blk][ch] =
get_bits(gbc, 2 - (ch == s->lfe_ch));
1072 if (s->exp_strategy[blk][ch] !=
EXP_REUSE)
1073 bit_alloc_stages[ch] = 3;
1077 for (ch = 1; ch <= fbw_channels; ch++) {
1078 s->start_freq[ch] = 0;
1079 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1081 int prev = s->end_freq[ch];
1082 if (s->channel_in_cpl[ch])
1083 s->end_freq[ch] = s->start_freq[
CPL_CH];
1084 else if (s->channel_uses_spx[ch])
1085 s->end_freq[ch] = s->spx_src_start_freq;
1087 int bandwidth_code =
get_bits(gbc, 6);
1088 if (bandwidth_code > 60) {
1092 s->end_freq[ch] = bandwidth_code * 3 + 73;
1094 group_size = 3 << (s->exp_strategy[
blk][ch] - 1);
1095 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1096 if (blk > 0 && s->end_freq[ch] != prev)
1102 (3 << (s->exp_strategy[blk][
CPL_CH] - 1));
1106 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1107 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1108 s->dexps[ch][0] =
get_bits(gbc, 4) << !ch;
1110 s->num_exp_groups[ch], s->dexps[ch][0],
1111 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1115 if (ch !=
CPL_CH && ch != s->lfe_ch)
1121 if (s->bit_allocation_syntax) {
1128 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1129 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1132 "be present in block 0\n");
1138 if (!s->eac3 || !blk) {
1139 if (s->snr_offset_strategy &&
get_bits1(gbc)) {
1142 csnr = (
get_bits(gbc, 6) - 15) << 4;
1143 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1145 if (ch == i || s->snr_offset_strategy == 2)
1146 snr = (csnr +
get_bits(gbc, 4)) << 2;
1148 if (blk && s->snr_offset[ch] != snr) {
1149 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 1);
1151 s->snr_offset[ch] = snr;
1155 int prev = s->fast_gain[ch];
1158 if (blk && prev != s->fast_gain[ch])
1159 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1162 }
else if (!s->eac3 && !blk) {
1169 if (s->fast_gain_syntax &&
get_bits1(gbc)) {
1170 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1171 int prev = s->fast_gain[ch];
1174 if (blk && prev != s->fast_gain[ch])
1175 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1177 }
else if (s->eac3 && !blk) {
1178 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1189 if (s->first_cpl_leak ||
get_bits1(gbc)) {
1194 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1195 sl != s->bit_alloc_params.cpl_slow_leak)) {
1198 s->bit_alloc_params.cpl_fast_leak = fl;
1199 s->bit_alloc_params.cpl_slow_leak = sl;
1200 }
else if (!s->eac3 && !blk) {
1202 "be present in block 0\n");
1205 s->first_cpl_leak = 0;
1211 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1212 s->dba_mode[ch] =
get_bits(gbc, 2);
1217 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1220 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1221 if (s->dba_mode[ch] ==
DBA_NEW) {
1222 s->dba_nsegs[ch] =
get_bits(gbc, 3) + 1;
1223 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1224 s->dba_offsets[ch][seg] =
get_bits(gbc, 5);
1225 s->dba_lengths[ch][seg] =
get_bits(gbc, 4);
1226 s->dba_values[ch][seg] =
get_bits(gbc, 3);
1229 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1232 }
else if (blk == 0) {
1233 for (ch = 0; ch <= s->channels; ch++) {
1239 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1240 if (bit_alloc_stages[ch] > 2) {
1243 s->start_freq[ch], s->end_freq[ch],
1244 s->psd[ch], s->band_psd[ch]);
1246 if (bit_alloc_stages[ch] > 1) {
1250 s->start_freq[ch], s->end_freq[ch],
1251 s->fast_gain[ch], (ch == s->lfe_ch),
1252 s->dba_mode[ch], s->dba_nsegs[ch],
1253 s->dba_offsets[ch], s->dba_lengths[ch],
1254 s->dba_values[ch], s->mask[ch])) {
1259 if (bit_alloc_stages[ch] > 0) {
1261 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1263 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1264 s->start_freq[ch], s->end_freq[ch],
1266 s->bit_alloc_params.floor,
1267 bap_tab, s->bap[ch]);
1288 for (ch = 1; ch <= s->channels; ch++) {
1289 float gain = 1.0 / 4194304.0f;
1291 gain *= s->dynamic_range[2 - ch];
1293 gain *= s->dynamic_range[0];
1295 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1296 s->fixed_coeffs[ch], gain, 256);
1307 downmix_output = s->channels != s->out_channels &&
1308 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1309 s->fbw_channels == s->out_channels);
1310 if (different_transforms) {
1320 if (downmix_output) {
1321 s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
1322 s->out_channels, s->fbw_channels, 256);
1325 if (downmix_output) {
1326 s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs,
1327 s->out_channels, s->fbw_channels, 256);
1330 if (downmix_output && !s->downmixed) {
1332 s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels,
1333 s->fbw_channels, 128);
1346 int *got_frame_ptr,
AVPacket *avpkt)
1350 int buf_size = avpkt->
size;
1352 int blk, ch, err, ret;
1360 if (buf_size >= 2 &&
AV_RB16(buf) == 0x770B) {
1362 int cnt =
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1363 s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1364 (
const uint16_t *) buf, cnt);
1366 memcpy(s->input_buffer, buf,
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1367 buf = s->input_buffer;
1393 "unsupported frame type %d: skipping frame\n",
1410 if (s->frame_size > buf_size) {
1416 s->frame_size - 2)) {
1432 if (!err || (s->channels && s->out_channels != s->channels)) {
1433 s->out_channels = s->channels;
1434 s->output_mode = s->channel_mode;
1436 s->output_mode |= AC3_OUTPUT_LFEON;
1437 if (s->channels > 1 &&
1439 s->out_channels = 1;
1441 }
else if (s->channels > 2 &&
1443 s->out_channels = 2;
1448 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1449 s->fbw_channels == s->out_channels)) {
1452 }
else if (!s->channels) {
1458 if (s->output_mode & AC3_OUTPUT_LFEON)
1463 if (s->bitstream_mode == 0x7 && s->channels > 1)
1475 for (ch = 0; ch < s->channels; ch++) {
1476 if (ch < s->out_channels)
1477 s->outptr[channel_map[ch]] = (
float *)frame->
data[ch];
1479 s->outptr[ch] = s->output[ch];
1480 output[ch] = s->output[ch];
1482 for (blk = 0; blk < s->num_blocks; blk++) {
1488 for (ch = 0; ch < s->out_channels; ch++)
1489 memcpy(s->outptr[channel_map[ch]], output[ch],
sizeof(**output) *
AC3_BLOCK_SIZE);
1490 for (ch = 0; ch < s->out_channels; ch++)
1491 output[ch] = s->outptr[channel_map[ch]];
1492 for (ch = 0; ch < s->out_channels; ch++)
1493 s->outptr[ch] += AC3_BLOCK_SIZE;
1497 for (ch = 0; ch < s->out_channels; ch++)
1498 memcpy(s->output[ch], output[ch],
sizeof(**output) *
AC3_BLOCK_SIZE);
1508 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1514 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1515 switch (s->dolby_surround_ex_mode) {
1531 switch (s->preferred_downmix) {
1549 if (s->lfe_mix_level_exists)
1558 return FFMIN(buf_size, s->frame_size);
1573 #define OFFSET(x) offsetof(AC3DecodeContext, x) 1574 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) 1576 {
"drc_scale",
"percentage of dynamic range compression to apply",
OFFSET(drc_scale),
AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 6.0,
PAR },
1592 .priv_data_size =
sizeof (AC3DecodeContext),
1602 #if CONFIG_EAC3_DECODER 1615 .priv_data_size =
sizeof (AC3DecodeContext),
static int coupling_strategy(AC3DecodeContext *s, int blk, uint8_t *bit_alloc_stages)
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...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
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)
Decode band structure for coupling, spectral extension, or enhanced coupling.
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 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.
const uint8_t ff_ac3_ungroup_3_in_5_bits_tab[32][3]
Table used to ungroup 3 values stored in 5 bits.
static void skip_bits_long(GetBitContext *s, int n)
#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...
av_cold void ff_ac3_common_init(void)
Initialize some tables.
#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.
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...
static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps, uint8_t absexp, int8_t *dexps)
Decode the grouped exponents according to exponent strategy.
av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (%s)\, len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic ? ac->func_descr_generic :ac->func_descr)
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
#define AV_CH_LAYOUT_STEREO
const uint16_t ff_ac3_slow_gain_tab[4]
static const AVClass eac3_decoder_class
static int get_sbits(GetBitContext *s, int n)
static void spx_coordinates(AC3DecodeContext *s)
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
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
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
static void do_imdct(AC3DecodeContext *s, int channels)
Inverse MDCT Transform.
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.
static const AVOption options[]
#define AV_CH_LOW_FREQUENCY
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
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
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.
static int decode_audio_block(AC3DecodeContext *s, int blk)
Decode a single audio block from the AC-3 bitstream.
const uint8_t ff_ac3_fast_decay_tab[4]
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#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.
const char * name
Name of the codec implementation.
static const AVClass ac3_decoder_class
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 float dynamic_range_tab[256]
dynamic range table.
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
int bit_rate
the average bitrate
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)
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
int avpriv_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
const uint16_t ff_ac3_fast_gain_tab[8]
void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
static int b2_mantissas[128][3]
Lo/Ro 2-channel downmix (Stereo).
int ff_eac3_parse_header(AC3DecodeContext *s)
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
static int b4_mantissas[128][2]
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
static const uint16_t dither[8][8]
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.
AVSampleFormat
Audio Sample Formats.
int sample_rate
samples per second
main external API structure.
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.
static unsigned int get_bits1(GetBitContext *s)
Describe the class of an AVClass context structure.
static void skip_bits(GetBitContext *s, int n)
static void set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
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 int16_t ff_ac3_floor_tab[8]
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.
av_cold void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
static av_cold int init(AVCodecParserContext *s)
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.
static int parse_frame_header(AC3DecodeContext *s)
Common function to parse AC-3 or E-AC-3 frame header.
int channels
number of audio channels
void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
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)
static enum AVSampleFormat sample_fmts[]
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]
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from 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
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.