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;
193 #if FF_API_REQUEST_CHANNELS 210 s->xcfptr[i] = s->transform_coeffs[i];
211 s->dlyptr[i] = s->delay[i];
228 i = !s->channel_mode;
242 if (s->bitstream_id != 6) {
249 s->preferred_downmix =
get_bits(gbc, 2);
250 s->center_mix_level_ltrt =
get_bits(gbc, 3);
251 s->surround_mix_level_ltrt = av_clip(
get_bits(gbc, 3), 3, 7);
252 s->center_mix_level =
get_bits(gbc, 3);
253 s->surround_mix_level = av_clip(
get_bits(gbc, 3), 3, 7);
256 s->dolby_surround_ex_mode =
get_bits(gbc, 2);
257 s->dolby_headphone_mode =
get_bits(gbc, 2);
286 s->bit_alloc_params.sr_code = hdr.
sr_code;
291 s->bit_alloc_params.sr_shift = hdr.
sr_shift;
295 s->fbw_channels = s->channels - s->lfe_on;
296 s->lfe_ch = s->fbw_channels + 1;
300 s->center_mix_level_ltrt = 4;
302 s->surround_mix_level_ltrt = 4;
303 s->lfe_mix_level_exists = 0;
312 s->start_freq[s->lfe_ch] = 0;
313 s->end_freq[s->lfe_ch] = 7;
314 s->num_exp_groups[s->lfe_ch] = 2;
315 s->channel_in_cpl[s->lfe_ch] = 0;
318 if (s->bitstream_id <= 10) {
320 s->snr_offset_strategy = 2;
321 s->block_switch_syntax = 1;
322 s->dither_flag_syntax = 1;
323 s->bit_allocation_syntax = 1;
324 s->fast_gain_syntax = 0;
325 s->first_cpl_leak = 0;
328 memset(s->channel_uses_aht, 0,
sizeof(s->channel_uses_aht));
350 for (i = 0; i < s->fbw_channels; i++) {
352 s->downmix_coeffs[i][1] =
gain_levels[ac3_default_coeffs[s->channel_mode][i][1]];
354 if (s->channel_mode > 1 && s->channel_mode & 1) {
355 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
358 int nf = s->channel_mode - 2;
359 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix *
LEVEL_MINUS_3DB;
362 int nf = s->channel_mode - 4;
363 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
368 for (i = 0; i < s->fbw_channels; i++) {
369 norm0 += s->downmix_coeffs[i][0];
370 norm1 += s->downmix_coeffs[i][1];
372 norm0 = 1.0f / norm0;
373 norm1 = 1.0f / norm1;
374 for (i = 0; i < s->fbw_channels; i++) {
375 s->downmix_coeffs[i][0] *= norm0;
376 s->downmix_coeffs[i][1] *= norm1;
380 for (i = 0; i < s->fbw_channels; i++)
381 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] +
393 int i, j, grp, group_size;
398 group_size = exp_strategy + (exp_strategy ==
EXP_D45);
399 for (grp = 0, i = 0; grp < ngrps; grp++) {
408 for (i = 0, j = 0; i < ngrps * 3; i++) {
409 prevexp += dexp[i] - 2;
412 switch (group_size) {
413 case 4: dexps[j++] = prevexp;
414 dexps[j++] = prevexp;
415 case 2: dexps[j++] = prevexp;
416 case 1: dexps[j++] = prevexp;
431 bin = s->start_freq[
CPL_CH];
432 for (band = 0; band < s->num_cpl_bands; band++) {
433 int band_start = bin;
434 int band_end = bin + s->cpl_band_sizes[band];
435 for (ch = 1; ch <= s->fbw_channels; ch++) {
436 if (s->channel_in_cpl[ch]) {
437 int cpl_coord = s->cpl_coords[ch][band] << 5;
438 for (bin = band_start; bin < band_end; bin++) {
439 s->fixed_coeffs[ch][bin] =
440 MULH(s->fixed_coeffs[
CPL_CH][bin] << 4, cpl_coord);
442 if (ch == 2 && s->phase_flags[band]) {
443 for (bin = band_start; bin < band_end; bin++)
444 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
470 int start_freq = s->start_freq[ch_index];
471 int end_freq = s->end_freq[ch_index];
472 uint8_t *baps = s->bap[ch_index];
473 int8_t *exps = s->dexps[ch_index];
474 int32_t *coeffs = s->fixed_coeffs[ch_index];
475 int dither = (ch_index ==
CPL_CH) || s->dither_flag[ch_index];
479 for (freq = start_freq; freq < end_freq; freq++) {
480 int bap = baps[freq];
486 mantissa = (
av_lfg_get(&s->dith_state) / 362) - 5932275;
537 coeffs[freq] = mantissa >> exps[freq];
549 for (ch = 1; ch <= s->fbw_channels; ch++) {
550 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
551 for (i = s->start_freq[
CPL_CH]; i < s->end_freq[
CPL_CH]; i++) {
553 s->fixed_coeffs[ch][i] = 0;
562 if (!s->channel_uses_aht[ch]) {
570 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
571 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][
blk] >> s->dexps[ch][bin];
587 for (ch = 1; ch <= s->channels; ch++) {
592 if (s->channel_in_cpl[ch]) {
598 end = s->end_freq[
CPL_CH];
600 end = s->end_freq[ch];
603 s->fixed_coeffs[ch][end] = 0;
620 end =
FFMIN(s->end_freq[1], s->end_freq[2]);
622 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
623 if (s->rematrixing_flags[bnd]) {
626 int tmp0 = s->fixed_coeffs[1][i];
627 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
628 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
639 static inline void do_imdct(AC3DecodeContext *s,
int channels)
643 for (ch = 1; ch <= channels; ch++) {
644 if (s->block_switch[ch]) {
646 float *x = s->tmp_output + 128;
647 for (i = 0; i < 128; i++)
648 x[i] = s->transform_coeffs[ch][2 * i];
649 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
650 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
651 s->tmp_output, s->window, 128);
652 for (i = 0; i < 128; i++)
653 x[i] = s->transform_coeffs[ch][2 * i + 1];
654 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
656 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
657 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
658 s->tmp_output, s->window, 128);
659 memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 *
sizeof(
float));
669 int channel_data_size =
sizeof(s->delay[0]);
670 switch (s->channel_mode) {
674 memcpy(s->delay[1], s->delay[0], channel_data_size);
677 memset(s->delay[3], 0, channel_data_size);
679 memset(s->delay[2], 0, channel_data_size);
682 memset(s->delay[4], 0, channel_data_size);
684 memset(s->delay[3], 0, channel_data_size);
686 memcpy(s->delay[2], s->delay[1], channel_data_size);
687 memset(s->delay[1], 0, channel_data_size);
709 int ecpl,
int start_subband,
int end_subband,
710 const uint8_t *default_band_struct,
711 int *num_bands,
uint8_t *band_sizes)
713 int subbnd, bnd, n_subbands, n_bands=0;
718 n_subbands = end_subband - start_subband;
722 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
723 coded_band_struct[subbnd] =
get_bits1(gbc);
725 band_struct = coded_band_struct;
727 band_struct = &default_band_struct[start_subband+1];
736 if (num_bands || band_sizes ) {
737 n_bands = n_subbands;
738 bnd_sz[0] = ecpl ? 6 : 12;
739 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
740 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
741 if (band_struct[subbnd - 1]) {
743 bnd_sz[bnd] += subbnd_size;
745 bnd_sz[++bnd] = subbnd_size;
752 *num_bands = n_bands;
754 memcpy(band_sizes, bnd_sz, n_bands);
762 int fbw_channels = s->fbw_channels;
763 int channel_mode = s->channel_mode;
765 int different_transforms;
772 different_transforms = 0;
773 if (s->block_switch_syntax) {
774 for (ch = 1; ch <= fbw_channels; ch++) {
776 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
777 different_transforms = 1;
782 if (s->dither_flag_syntax) {
783 for (ch = 1; ch <= fbw_channels; ch++) {
789 i = !s->channel_mode;
795 if (range > 1.0 || s->drc_scale <= 1.0)
796 s->dynamic_range[i] =
powf(range, s->drc_scale);
798 s->dynamic_range[i] = range;
799 }
else if (blk == 0) {
800 s->dynamic_range[i] = 1.0f;
805 if (s->eac3 && (!blk ||
get_bits1(gbc))) {
808 int dst_start_freq, dst_end_freq, src_start_freq,
809 start_subband, end_subband;
813 s->channel_uses_spx[1] = 1;
815 for (ch = 1; ch <= fbw_channels; ch++)
816 s->channel_uses_spx[ch] =
get_bits1(gbc);
822 start_subband =
get_bits(gbc, 3) + 2;
823 if (start_subband > 7)
824 start_subband += start_subband - 7;
827 end_subband += end_subband - 7;
828 dst_start_freq = dst_start_freq * 12 + 25;
829 src_start_freq = start_subband * 12 + 25;
830 dst_end_freq = end_subband * 12 + 25;
833 if (start_subband >= end_subband) {
835 "range (%d >= %d)\n", start_subband, end_subband);
838 if (dst_start_freq >= src_start_freq) {
840 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
844 s->spx_dst_start_freq = dst_start_freq;
845 s->spx_src_start_freq = src_start_freq;
846 s->spx_dst_end_freq = dst_end_freq;
849 start_subband, end_subband,
854 for (ch = 1; ch <= fbw_channels; ch++) {
855 s->channel_uses_spx[ch] = 0;
856 s->first_spx_coords[ch] = 1;
863 for (ch = 1; ch <= fbw_channels; ch++) {
864 if (s->channel_uses_spx[ch]) {
865 if (s->first_spx_coords[ch] ||
get_bits1(gbc)) {
867 int bin, master_spx_coord;
869 s->first_spx_coords[ch] = 0;
870 spx_blend =
get_bits(gbc, 5) * (1.0f/32);
871 master_spx_coord =
get_bits(gbc, 2) * 3;
873 bin = s->spx_src_start_freq;
874 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
876 int spx_coord_exp, spx_coord_mant;
877 float nratio, sblend, nblend, spx_coord;
880 bandsize = s->spx_band_sizes[bnd];
881 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
882 nratio = av_clipf(nratio, 0.0f, 1.0f);
883 nblend = sqrtf(3.0f * nratio);
885 sblend = sqrtf(1.0f - nratio);
891 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
892 else spx_coord_mant += 4;
893 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
894 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
897 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
898 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
902 s->first_spx_coords[ch] = 1;
908 if (s->eac3 ? s->cpl_strategy_exists[blk] :
get_bits1(gbc)) {
912 if (s->cpl_in_use[blk]) {
914 int cpl_start_subband, cpl_end_subband;
930 s->channel_in_cpl[1] = 1;
931 s->channel_in_cpl[2] = 1;
933 for (ch = 1; ch <= fbw_channels; ch++)
942 cpl_start_subband =
get_bits(gbc, 4);
943 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
945 if (cpl_start_subband >= cpl_end_subband) {
947 cpl_start_subband, cpl_end_subband);
950 s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
951 s->end_freq[
CPL_CH] = cpl_end_subband * 12 + 37;
956 &s->num_cpl_bands, s->cpl_band_sizes);
959 for (ch = 1; ch <= fbw_channels; ch++) {
960 s->channel_in_cpl[ch] = 0;
961 s->first_cpl_coords[ch] = 1;
963 s->first_cpl_leak = s->eac3;
964 s->phase_flags_in_use = 0;
966 }
else if (!s->eac3) {
969 "be present in block 0\n");
972 s->cpl_in_use[
blk] = s->cpl_in_use[blk-1];
975 cpl_in_use = s->cpl_in_use[
blk];
979 int cpl_coords_exist = 0;
981 for (ch = 1; ch <= fbw_channels; ch++) {
982 if (s->channel_in_cpl[ch]) {
983 if ((s->eac3 && s->first_cpl_coords[ch]) ||
get_bits1(gbc)) {
984 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
985 s->first_cpl_coords[ch] = 0;
986 cpl_coords_exist = 1;
987 master_cpl_coord = 3 *
get_bits(gbc, 2);
988 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
991 if (cpl_coord_exp == 15)
992 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
994 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
995 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
999 "be present in block 0\n");
1004 s->first_cpl_coords[ch] = 1;
1009 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
1010 s->phase_flags[bnd] = s->phase_flags_in_use?
get_bits1(gbc) : 0;
1017 if ((s->eac3 && !blk) ||
get_bits1(gbc)) {
1018 s->num_rematrixing_bands = 4;
1019 if (cpl_in_use && s->start_freq[
CPL_CH] <= 61) {
1020 s->num_rematrixing_bands -= 1 + (s->start_freq[
CPL_CH] == 37);
1021 }
else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1022 s->num_rematrixing_bands--;
1024 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1025 s->rematrixing_flags[bnd] =
get_bits1(gbc);
1028 "new rematrixing strategy not present in block 0\n");
1029 s->num_rematrixing_bands = 0;
1034 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1036 s->exp_strategy[
blk][ch] =
get_bits(gbc, 2 - (ch == s->lfe_ch));
1037 if (s->exp_strategy[blk][ch] !=
EXP_REUSE)
1038 bit_alloc_stages[ch] = 3;
1042 for (ch = 1; ch <= fbw_channels; ch++) {
1043 s->start_freq[ch] = 0;
1044 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1046 int prev = s->end_freq[ch];
1047 if (s->channel_in_cpl[ch])
1048 s->end_freq[ch] = s->start_freq[
CPL_CH];
1049 else if (s->channel_uses_spx[ch])
1050 s->end_freq[ch] = s->spx_src_start_freq;
1052 int bandwidth_code =
get_bits(gbc, 6);
1053 if (bandwidth_code > 60) {
1057 s->end_freq[ch] = bandwidth_code * 3 + 73;
1059 group_size = 3 << (s->exp_strategy[
blk][ch] - 1);
1060 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1061 if (blk > 0 && s->end_freq[ch] != prev)
1067 (3 << (s->exp_strategy[blk][
CPL_CH] - 1));
1071 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1072 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1073 s->dexps[ch][0] =
get_bits(gbc, 4) << !ch;
1075 s->num_exp_groups[ch], s->dexps[ch][0],
1076 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1080 if (ch !=
CPL_CH && ch != s->lfe_ch)
1086 if (s->bit_allocation_syntax) {
1093 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1094 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1097 "be present in block 0\n");
1103 if (!s->eac3 || !blk) {
1104 if (s->snr_offset_strategy &&
get_bits1(gbc)) {
1107 csnr = (
get_bits(gbc, 6) - 15) << 4;
1108 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1110 if (ch == i || s->snr_offset_strategy == 2)
1111 snr = (csnr +
get_bits(gbc, 4)) << 2;
1113 if (blk && s->snr_offset[ch] != snr) {
1114 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 1);
1116 s->snr_offset[ch] = snr;
1120 int prev = s->fast_gain[ch];
1123 if (blk && prev != s->fast_gain[ch])
1124 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1127 }
else if (!s->eac3 && !blk) {
1134 if (s->fast_gain_syntax &&
get_bits1(gbc)) {
1135 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1136 int prev = s->fast_gain[ch];
1139 if (blk && prev != s->fast_gain[ch])
1140 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1142 }
else if (s->eac3 && !blk) {
1143 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1154 if (s->first_cpl_leak ||
get_bits1(gbc)) {
1159 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1160 sl != s->bit_alloc_params.cpl_slow_leak)) {
1163 s->bit_alloc_params.cpl_fast_leak = fl;
1164 s->bit_alloc_params.cpl_slow_leak = sl;
1165 }
else if (!s->eac3 && !blk) {
1167 "be present in block 0\n");
1170 s->first_cpl_leak = 0;
1176 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1177 s->dba_mode[ch] =
get_bits(gbc, 2);
1182 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1185 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1186 if (s->dba_mode[ch] ==
DBA_NEW) {
1187 s->dba_nsegs[ch] =
get_bits(gbc, 3) + 1;
1188 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1189 s->dba_offsets[ch][seg] =
get_bits(gbc, 5);
1190 s->dba_lengths[ch][seg] =
get_bits(gbc, 4);
1191 s->dba_values[ch][seg] =
get_bits(gbc, 3);
1194 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1197 }
else if (blk == 0) {
1198 for (ch = 0; ch <= s->channels; ch++) {
1204 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1205 if (bit_alloc_stages[ch] > 2) {
1208 s->start_freq[ch], s->end_freq[ch],
1209 s->psd[ch], s->band_psd[ch]);
1211 if (bit_alloc_stages[ch] > 1) {
1215 s->start_freq[ch], s->end_freq[ch],
1216 s->fast_gain[ch], (ch == s->lfe_ch),
1217 s->dba_mode[ch], s->dba_nsegs[ch],
1218 s->dba_offsets[ch], s->dba_lengths[ch],
1219 s->dba_values[ch], s->mask[ch])) {
1224 if (bit_alloc_stages[ch] > 0) {
1226 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1228 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1229 s->start_freq[ch], s->end_freq[ch],
1231 s->bit_alloc_params.floor,
1232 bap_tab, s->bap[ch]);
1254 for (ch = 1; ch <= s->channels; ch++) {
1255 float gain = 1.0 / 4194304.0f;
1257 gain *= s->dynamic_range[2 - ch];
1259 gain *= s->dynamic_range[0];
1261 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1262 s->fixed_coeffs[ch], gain, 256);
1273 downmix_output = s->channels != s->out_channels &&
1274 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1275 s->fbw_channels == s->out_channels);
1276 if (different_transforms) {
1286 if (downmix_output) {
1287 s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
1288 s->out_channels, s->fbw_channels, 256);
1291 if (downmix_output) {
1292 s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs,
1293 s->out_channels, s->fbw_channels, 256);
1296 if (downmix_output && !s->downmixed) {
1298 s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels,
1299 s->fbw_channels, 128);
1312 int *got_frame_ptr,
AVPacket *avpkt)
1316 int buf_size = avpkt->
size;
1318 int blk, ch, err, ret;
1326 if (buf_size >= 2 &&
AV_RB16(buf) == 0x770B) {
1328 int cnt =
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1329 s->bdsp.bswap16_buf((uint16_t *) s->input_buffer,
1330 (
const uint16_t *) buf, cnt);
1332 memcpy(s->input_buffer, buf,
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1333 buf = s->input_buffer;
1359 "skipping frame\n");
1375 if (s->frame_size > buf_size) {
1381 s->frame_size - 2)) {
1397 if (!err || (s->channels && s->out_channels != s->channels)) {
1398 s->out_channels = s->channels;
1399 s->output_mode = s->channel_mode;
1401 s->output_mode |= AC3_OUTPUT_LFEON;
1402 if (s->channels > 1 &&
1404 s->out_channels = 1;
1406 }
else if (s->channels > 2 &&
1408 s->out_channels = 2;
1413 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1414 s->fbw_channels == s->out_channels)) {
1417 }
else if (!s->channels) {
1423 if (s->output_mode & AC3_OUTPUT_LFEON)
1428 if (s->bitstream_mode == 0x7 && s->channels > 1)
1440 for (ch = 0; ch < s->channels; ch++) {
1441 if (ch < s->out_channels)
1442 s->outptr[channel_map[ch]] = (
float *)frame->
data[ch];
1444 s->outptr[ch] = s->output[ch];
1445 output[ch] = s->output[ch];
1447 for (blk = 0; blk < s->num_blocks; blk++) {
1453 for (ch = 0; ch < s->out_channels; ch++)
1454 memcpy(s->outptr[channel_map[ch]], output[ch],
sizeof(**output) *
AC3_BLOCK_SIZE);
1455 for (ch = 0; ch < s->out_channels; ch++)
1456 output[ch] = s->outptr[channel_map[ch]];
1457 for (ch = 0; ch < s->out_channels; ch++)
1458 s->outptr[ch] += AC3_BLOCK_SIZE;
1462 for (ch = 0; ch < s->out_channels; ch++)
1463 memcpy(s->output[ch], output[ch],
sizeof(**output) *
AC3_BLOCK_SIZE);
1473 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1479 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1480 switch (s->dolby_surround_ex_mode) {
1496 switch (s->preferred_downmix) {
1514 if (s->lfe_mix_level_exists)
1523 return FFMIN(buf_size, s->frame_size);
1538 #define OFFSET(x) offsetof(AC3DecodeContext, x) 1539 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) 1541 {
"drc_scale",
"percentage of dynamic range compression to apply",
OFFSET(drc_scale),
AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 6.0,
PAR },
1557 .priv_data_size =
sizeof (AC3DecodeContext),
1567 #if CONFIG_EAC3_DECODER 1580 .priv_data_size =
sizeof (AC3DecodeContext),
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.
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.
attribute_deprecated int request_channels
Decoder should decode to this many channels if it can (0 for default)
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.
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)
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...
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
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
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
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 CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#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 AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
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.
void av_log(void *avcl, int level, const char *fmt,...)
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.
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
int bit_rate
the average bitrate
audio channel layout utility functions
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)
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)
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.
static void close(AVCodecParserContext *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.
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 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.
#define FF_DISABLE_DEPRECATION_WARNINGS
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...
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.
#define FF_ENABLE_DEPRECATION_WARNINGS
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
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 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
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.