60 5, 6, 7, 8, 9, 10, 11, 12, 14, 16
84 { { 2, 7 }, { 7, 2 }, },
86 { { 2, 7 }, { 7, 2 }, },
87 { { 2, 7 }, { 5, 5 }, { 7, 2 }, },
88 { { 2, 7 }, { 7, 2 }, { 6, 6 }, },
89 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 }, },
90 { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
91 { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
102 return ((code - (levels >> 1)) << 24) / levels;
114 for (i = 0; i < 128; i++) {
122 for (i = 0; i < 32; i++) {
128 for (i = 0; i < 128; i++) {
140 for (i = 0; i < 7; i++) {
144 for (i = 0; i < 15; i++) {
151 for (i = 0; i < 256; i++) {
152 int v = (i >> 5) - ((i >> 7) << 3) - 5;
181 if (avctx->
channels > 0 && avctx->request_channels > 0 &&
182 avctx->request_channels < avctx->
channels &&
183 avctx->request_channels <= 2) {
184 avctx->
channels = avctx->request_channels;
189 s->xcfptr[
i] = s->transform_coeffs[
i];
207 i = !s->channel_mode;
251 s->bit_alloc_params.sr_code = hdr.
sr_code;
256 s->bit_alloc_params.sr_shift = hdr.
sr_shift;
260 s->fbw_channels = s->channels - s->lfe_on;
261 s->lfe_ch = s->fbw_channels + 1;
270 s->start_freq[s->lfe_ch] = 0;
271 s->end_freq[s->lfe_ch] = 7;
272 s->num_exp_groups[s->lfe_ch] = 2;
273 s->channel_in_cpl[s->lfe_ch] = 0;
278 s->snr_offset_strategy = 2;
279 s->block_switch_syntax = 1;
280 s->dither_flag_syntax = 1;
281 s->bit_allocation_syntax = 1;
282 s->fast_gain_syntax = 0;
283 s->first_cpl_leak = 0;
286 memset(s->channel_uses_aht, 0,
sizeof(s->channel_uses_aht));
308 for (i = 0; i < s->fbw_channels; i++) {
310 s->downmix_coeffs[
i][1] =
gain_levels[ac3_default_coeffs[s->channel_mode][
i][1]];
312 if (s->channel_mode > 1 && s->channel_mode & 1) {
313 s->downmix_coeffs[1][0] = s->downmix_coeffs[1][1] = cmix;
316 int nf = s->channel_mode - 2;
317 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf][1] = smix *
LEVEL_MINUS_3DB;
320 int nf = s->channel_mode - 4;
321 s->downmix_coeffs[nf][0] = s->downmix_coeffs[nf+1][1] = smix;
326 for (i = 0; i < s->fbw_channels; i++) {
327 norm0 += s->downmix_coeffs[
i][0];
328 norm1 += s->downmix_coeffs[
i][1];
330 norm0 = 1.0f / norm0;
331 norm1 = 1.0f / norm1;
332 for (i = 0; i < s->fbw_channels; i++) {
333 s->downmix_coeffs[
i][0] *= norm0;
334 s->downmix_coeffs[
i][1] *= norm1;
338 for (i = 0; i < s->fbw_channels; i++)
339 s->downmix_coeffs[i][0] = (s->downmix_coeffs[i][0] +
351 int i, j, grp, group_size;
356 group_size = exp_strategy + (exp_strategy ==
EXP_D45);
357 for (grp = 0, i = 0; grp < ngrps; grp++) {
366 for (i = 0, j = 0; i < ngrps * 3; i++) {
367 prevexp += dexp[
i] - 2;
370 switch (group_size) {
371 case 4: dexps[j++] = prevexp;
372 dexps[j++] = prevexp;
373 case 2: dexps[j++] = prevexp;
374 case 1: dexps[j++] = prevexp;
389 bin = s->start_freq[
CPL_CH];
390 for (band = 0; band < s->num_cpl_bands; band++) {
391 int band_start = bin;
392 int band_end = bin + s->cpl_band_sizes[
band];
393 for (ch = 1; ch <= s->fbw_channels; ch++) {
394 if (s->channel_in_cpl[ch]) {
395 int cpl_coord = s->cpl_coords[ch][
band] << 5;
396 for (bin = band_start; bin < band_end; bin++) {
397 s->fixed_coeffs[ch][bin] =
398 MULH(s->fixed_coeffs[
CPL_CH][bin] << 4, cpl_coord);
400 if (ch == 2 && s->phase_flags[band]) {
401 for (bin = band_start; bin < band_end; bin++)
402 s->fixed_coeffs[2][bin] = -s->fixed_coeffs[2][bin];
428 int start_freq = s->start_freq[ch_index];
429 int end_freq = s->end_freq[ch_index];
430 uint8_t *baps = s->bap[ch_index];
431 int8_t *exps = s->dexps[ch_index];
432 int *coeffs = s->fixed_coeffs[ch_index];
433 int dither = (ch_index ==
CPL_CH) || s->dither_flag[ch_index];
437 for (freq = start_freq; freq < end_freq; freq++) {
438 int bap = baps[freq];
444 mantissa = (((
av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
495 coeffs[freq] = mantissa >> exps[freq];
507 for (ch = 1; ch <= s->fbw_channels; ch++) {
508 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
509 for (i = s->start_freq[
CPL_CH]; i < s->end_freq[
CPL_CH]; i++) {
511 s->fixed_coeffs[ch][
i] = 0;
520 if (!s->channel_uses_aht[ch]) {
528 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
529 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][
blk] >> s->dexps[ch][bin];
545 for (ch = 1; ch <= s->channels; ch++) {
550 if (s->channel_in_cpl[ch]) {
556 end = s->end_freq[
CPL_CH];
558 end = s->end_freq[ch];
561 s->fixed_coeffs[ch][
end] = 0;
578 end =
FFMIN(s->end_freq[1], s->end_freq[2]);
580 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
581 if (s->rematrixing_flags[bnd]) {
584 int tmp0 = s->fixed_coeffs[1][
i];
585 s->fixed_coeffs[1][
i] += s->fixed_coeffs[2][
i];
586 s->fixed_coeffs[2][
i] = tmp0 - s->fixed_coeffs[2][
i];
597 static inline void do_imdct(AC3DecodeContext *
s,
int channels)
601 for (ch = 1; ch <= channels; ch++) {
602 if (s->block_switch[ch]) {
604 float *
x = s->tmp_output + 128;
605 for (i = 0; i < 128; i++)
606 x[i] = s->transform_coeffs[ch][2 * i];
607 s->imdct_256.imdct_half(&s->imdct_256, s->tmp_output, x);
608 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
609 s->tmp_output, s->window, 128);
610 for (i = 0; i < 128; i++)
611 x[i] = s->transform_coeffs[ch][2 * i + 1];
612 s->imdct_256.imdct_half(&s->imdct_256, s->delay[ch - 1], x);
614 s->imdct_512.imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
615 s->fdsp.vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1],
616 s->tmp_output, s->window, 128);
617 memcpy(s->delay[ch - 1], s->tmp_output + 128, 128 *
sizeof(
float));
627 int channel_data_size =
sizeof(s->delay[0]);
628 switch (s->channel_mode) {
632 memcpy(s->delay[1], s->delay[0], channel_data_size);
635 memset(s->delay[3], 0, channel_data_size);
637 memset(s->delay[2], 0, channel_data_size);
640 memset(s->delay[4], 0, channel_data_size);
642 memset(s->delay[3], 0, channel_data_size);
644 memcpy(s->delay[2], s->delay[1], channel_data_size);
645 memset(s->delay[1], 0, channel_data_size);
667 int ecpl,
int start_subband,
int end_subband,
668 const uint8_t *default_band_struct,
669 int *num_bands,
uint8_t *band_sizes)
671 int subbnd, bnd, n_subbands, n_bands=0;
676 n_subbands = end_subband - start_subband;
680 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
681 coded_band_struct[subbnd] =
get_bits1(gbc);
683 band_struct = coded_band_struct;
685 band_struct = &default_band_struct[start_subband+1];
694 if (num_bands || band_sizes ) {
695 n_bands = n_subbands;
696 bnd_sz[0] = ecpl ? 6 : 12;
697 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
698 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
699 if (band_struct[subbnd - 1]) {
701 bnd_sz[bnd] += subbnd_size;
703 bnd_sz[++bnd] = subbnd_size;
710 *num_bands = n_bands;
712 memcpy(band_sizes, bnd_sz, n_bands);
720 int fbw_channels = s->fbw_channels;
721 int channel_mode = s->channel_mode;
723 int different_transforms;
730 different_transforms = 0;
731 if (s->block_switch_syntax) {
732 for (ch = 1; ch <= fbw_channels; ch++) {
734 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
735 different_transforms = 1;
740 if (s->dither_flag_syntax) {
741 for (ch = 1; ch <= fbw_channels; ch++) {
747 i = !s->channel_mode;
752 }
else if (blk == 0) {
753 s->dynamic_range[
i] = 1.0f;
758 if (s->eac3 && (!blk ||
get_bits1(gbc))) {
761 int dst_start_freq, dst_end_freq, src_start_freq,
762 start_subband, end_subband;
766 s->channel_uses_spx[1] = 1;
768 for (ch = 1; ch <= fbw_channels; ch++)
769 s->channel_uses_spx[ch] =
get_bits1(gbc);
775 start_subband =
get_bits(gbc, 3) + 2;
776 if (start_subband > 7)
777 start_subband += start_subband - 7;
780 end_subband += end_subband - 7;
781 dst_start_freq = dst_start_freq * 12 + 25;
782 src_start_freq = start_subband * 12 + 25;
783 dst_end_freq = end_subband * 12 + 25;
786 if (start_subband >= end_subband) {
788 "range (%d >= %d)\n", start_subband, end_subband);
791 if (dst_start_freq >= src_start_freq) {
793 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
797 s->spx_dst_start_freq = dst_start_freq;
798 s->spx_src_start_freq = src_start_freq;
799 s->spx_dst_end_freq = dst_end_freq;
802 start_subband, end_subband,
807 for (ch = 1; ch <= fbw_channels; ch++) {
808 s->channel_uses_spx[ch] = 0;
809 s->first_spx_coords[ch] = 1;
816 for (ch = 1; ch <= fbw_channels; ch++) {
817 if (s->channel_uses_spx[ch]) {
818 if (s->first_spx_coords[ch] ||
get_bits1(gbc)) {
820 int bin, master_spx_coord;
822 s->first_spx_coords[ch] = 0;
823 spx_blend =
get_bits(gbc, 5) * (1.0f/32);
824 master_spx_coord =
get_bits(gbc, 2) * 3;
826 bin = s->spx_src_start_freq;
827 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
829 int spx_coord_exp, spx_coord_mant;
830 float nratio, sblend, nblend, spx_coord;
833 bandsize = s->spx_band_sizes[bnd];
834 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
835 nratio = av_clipf(nratio, 0.0
f, 1.0
f);
836 nblend = sqrtf(3.0
f * nratio);
838 sblend = sqrtf(1.0
f - nratio);
844 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
845 else spx_coord_mant += 4;
846 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
847 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
850 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
851 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
855 s->first_spx_coords[ch] = 1;
861 if (s->eac3 ? s->cpl_strategy_exists[blk] :
get_bits1(gbc)) {
865 if (s->cpl_in_use[blk]) {
867 int cpl_start_subband, cpl_end_subband;
883 s->channel_in_cpl[1] = 1;
884 s->channel_in_cpl[2] = 1;
886 for (ch = 1; ch <= fbw_channels; ch++)
895 cpl_start_subband =
get_bits(gbc, 4);
896 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
898 if (cpl_start_subband >= cpl_end_subband) {
900 cpl_start_subband, cpl_end_subband);
903 s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
904 s->end_freq[
CPL_CH] = cpl_end_subband * 12 + 37;
909 &s->num_cpl_bands, s->cpl_band_sizes);
912 for (ch = 1; ch <= fbw_channels; ch++) {
913 s->channel_in_cpl[ch] = 0;
914 s->first_cpl_coords[ch] = 1;
916 s->first_cpl_leak = s->eac3;
917 s->phase_flags_in_use = 0;
919 }
else if (!s->eac3) {
922 "be present in block 0\n");
925 s->cpl_in_use[
blk] = s->cpl_in_use[blk-1];
928 cpl_in_use = s->cpl_in_use[
blk];
932 int cpl_coords_exist = 0;
934 for (ch = 1; ch <= fbw_channels; ch++) {
935 if (s->channel_in_cpl[ch]) {
936 if ((s->eac3 && s->first_cpl_coords[ch]) ||
get_bits1(gbc)) {
937 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
938 s->first_cpl_coords[ch] = 0;
939 cpl_coords_exist = 1;
940 master_cpl_coord = 3 *
get_bits(gbc, 2);
941 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
944 if (cpl_coord_exp == 15)
945 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
947 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
948 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
952 "be present in block 0\n");
957 s->first_cpl_coords[ch] = 1;
962 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
963 s->phase_flags[bnd] = s->phase_flags_in_use?
get_bits1(gbc) : 0;
970 if ((s->eac3 && !blk) ||
get_bits1(gbc)) {
971 s->num_rematrixing_bands = 4;
972 if (cpl_in_use && s->start_freq[
CPL_CH] <= 61) {
973 s->num_rematrixing_bands -= 1 + (s->start_freq[
CPL_CH] == 37);
974 }
else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
975 s->num_rematrixing_bands--;
977 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
978 s->rematrixing_flags[bnd] =
get_bits1(gbc);
981 "new rematrixing strategy not present in block 0\n");
982 s->num_rematrixing_bands = 0;
987 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
989 s->exp_strategy[
blk][ch] =
get_bits(gbc, 2 - (ch == s->lfe_ch));
990 if (s->exp_strategy[blk][ch] !=
EXP_REUSE)
991 bit_alloc_stages[ch] = 3;
995 for (ch = 1; ch <= fbw_channels; ch++) {
996 s->start_freq[ch] = 0;
997 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
999 int prev = s->end_freq[ch];
1000 if (s->channel_in_cpl[ch])
1001 s->end_freq[ch] = s->start_freq[
CPL_CH];
1002 else if (s->channel_uses_spx[ch])
1003 s->end_freq[ch] = s->spx_src_start_freq;
1005 int bandwidth_code =
get_bits(gbc, 6);
1006 if (bandwidth_code > 60) {
1010 s->end_freq[ch] = bandwidth_code * 3 + 73;
1012 group_size = 3 << (s->exp_strategy[
blk][ch] - 1);
1013 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1014 if (blk > 0 && s->end_freq[ch] != prev)
1020 (3 << (s->exp_strategy[blk][
CPL_CH] - 1));
1024 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1025 if (s->exp_strategy[blk][ch] !=
EXP_REUSE) {
1026 s->dexps[ch][0] =
get_bits(gbc, 4) << !ch;
1028 s->num_exp_groups[ch], s->dexps[ch][0],
1029 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1033 if (ch !=
CPL_CH && ch != s->lfe_ch)
1039 if (s->bit_allocation_syntax) {
1046 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1047 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1050 "be present in block 0\n");
1056 if (!s->eac3 || !blk) {
1057 if (s->snr_offset_strategy &&
get_bits1(gbc)) {
1060 csnr = (
get_bits(gbc, 6) - 15) << 4;
1061 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1063 if (ch == i || s->snr_offset_strategy == 2)
1064 snr = (csnr +
get_bits(gbc, 4)) << 2;
1066 if (blk && s->snr_offset[ch] != snr) {
1067 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 1);
1069 s->snr_offset[ch] = snr;
1073 int prev = s->fast_gain[ch];
1076 if (blk && prev != s->fast_gain[ch])
1077 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1080 }
else if (!s->eac3 && !blk) {
1087 if (s->fast_gain_syntax &&
get_bits1(gbc)) {
1088 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1089 int prev = s->fast_gain[ch];
1092 if (blk && prev != s->fast_gain[ch])
1093 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1095 }
else if (s->eac3 && !blk) {
1096 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1107 if (s->first_cpl_leak ||
get_bits1(gbc)) {
1112 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1113 sl != s->bit_alloc_params.cpl_slow_leak)) {
1116 s->bit_alloc_params.cpl_fast_leak = fl;
1117 s->bit_alloc_params.cpl_slow_leak = sl;
1118 }
else if (!s->eac3 && !blk) {
1120 "be present in block 0\n");
1123 s->first_cpl_leak = 0;
1129 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1130 s->dba_mode[ch] =
get_bits(gbc, 2);
1135 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1138 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1139 if (s->dba_mode[ch] ==
DBA_NEW) {
1140 s->dba_nsegs[ch] =
get_bits(gbc, 3) + 1;
1141 for (seg = 0; seg < s->dba_nsegs[ch]; seg++) {
1142 s->dba_offsets[ch][seg] =
get_bits(gbc, 5);
1143 s->dba_lengths[ch][seg] =
get_bits(gbc, 4);
1144 s->dba_values[ch][seg] =
get_bits(gbc, 3);
1147 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1150 }
else if (blk == 0) {
1151 for (ch = 0; ch <= s->channels; ch++) {
1157 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1158 if (bit_alloc_stages[ch] > 2) {
1161 s->start_freq[ch], s->end_freq[ch],
1162 s->psd[ch], s->band_psd[ch]);
1164 if (bit_alloc_stages[ch] > 1) {
1168 s->start_freq[ch], s->end_freq[ch],
1169 s->fast_gain[ch], (ch == s->lfe_ch),
1170 s->dba_mode[ch], s->dba_nsegs[ch],
1171 s->dba_offsets[ch], s->dba_lengths[ch],
1172 s->dba_values[ch], s->mask[ch])) {
1177 if (bit_alloc_stages[ch] > 0) {
1179 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1181 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1182 s->start_freq[ch], s->end_freq[ch],
1184 s->bit_alloc_params.floor,
1185 bap_tab, s->bap[ch]);
1207 for (ch = 1; ch <= s->channels; ch++) {
1208 float gain = 1.0 / 4194304.0f;
1210 gain *= s->dynamic_range[2 - ch];
1212 gain *= s->dynamic_range[0];
1214 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1215 s->fixed_coeffs[ch], gain, 256);
1226 downmix_output = s->channels != s->out_channels &&
1227 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1228 s->fbw_channels == s->out_channels);
1229 if (different_transforms) {
1239 if (downmix_output) {
1240 s->ac3dsp.downmix(s->outptr, s->downmix_coeffs,
1241 s->out_channels, s->fbw_channels, 256);
1244 if (downmix_output) {
1245 s->ac3dsp.downmix(s->xcfptr + 1, s->downmix_coeffs,
1246 s->out_channels, s->fbw_channels, 256);
1249 if (downmix_output && !s->downmixed) {
1251 s->ac3dsp.downmix(s->dlyptr, s->downmix_coeffs, s->out_channels,
1252 s->fbw_channels, 128);
1265 int *got_frame_ptr,
AVPacket *avpkt)
1269 int buf_size = avpkt->
size;
1277 if (buf_size >= 2 &&
AV_RB16(buf) == 0x770B) {
1279 int cnt =
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1280 s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (
const uint16_t *)buf, cnt);
1282 memcpy(s->input_buffer, buf,
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1283 buf = s->input_buffer;
1309 "skipping frame\n");
1311 return s->frame_size;
1322 if (s->frame_size > buf_size) {
1328 s->frame_size - 2)) {
1342 if (!err || (s->channels && s->out_channels != s->channels)) {
1343 s->out_channels = s->channels;
1344 s->output_mode = s->channel_mode;
1346 s->output_mode |= AC3_OUTPUT_LFEON;
1347 if (avctx->request_channels > 0 && avctx->request_channels <= 2 &&
1348 avctx->request_channels < s->
channels) {
1349 s->out_channels = avctx->request_channels;
1356 s->loro_center_mix_level =
gain_levels[s-> center_mix_level];
1357 s->loro_surround_mix_level =
gain_levels[s->surround_mix_level];
1361 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1362 s->fbw_channels == s->out_channels)) {
1365 }
else if (!s->channels) {
1373 if (s->bitstream_mode == 0x7 && s->channels > 1)
1384 output[ch] = s->output[ch];
1385 s->outptr[ch] = s->output[ch];
1387 for (ch = 0; ch < s->channels; ch++) {
1388 if (ch < s->out_channels)
1389 s->outptr[channel_map[ch]] = (
float *)frame->
data[ch];
1391 for (blk = 0; blk < s->num_blocks; blk++) {
1397 for (ch = 0; ch < s->out_channels; ch++)
1399 for (ch = 0; ch < s->out_channels; ch++)
1400 output[ch] = s->outptr[channel_map[ch]];
1401 for (ch = 0; ch < s->out_channels; ch++) {
1402 if (!ch || channel_map[ch])
1410 for (ch = 0; ch < s->out_channels; ch++)
1411 memcpy(s->output[ch], output[ch], 1024);
1415 return FFMIN(buf_size, s->frame_size);
1430 #define OFFSET(x) offsetof(AC3DecodeContext, x) 1431 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) 1433 {
"drc_scale",
"percentage of dynamic range compression to apply",
OFFSET(drc_scale),
AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 1.0,
PAR },
1435 {
"dmix_mode",
"Preferred Stereo Downmix Mode",
OFFSET(preferred_stereo_downmix),
AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0,
"dmix_mode"},
1436 {
"ltrt_cmixlev",
"Lt/Rt Center Mix Level",
OFFSET(ltrt_center_mix_level),
AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
1437 {
"ltrt_surmixlev",
"Lt/Rt Surround Mix Level",
OFFSET(ltrt_surround_mix_level),
AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
1438 {
"loro_cmixlev",
"Lo/Ro Center Mix Level",
OFFSET(loro_center_mix_level),
AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
1439 {
"loro_surmixlev",
"Lo/Ro Surround Mix Level",
OFFSET(loro_surround_mix_level),
AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
1455 .priv_data_size =
sizeof (AC3DecodeContext),
1466 #if CONFIG_EAC3_DECODER 1478 .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...
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
#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.
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 av_cold int init(AVCodecContext *avctx)
#define CONFIG_EAC3_DECODER
#define AV_LOG_WARNING
Something somehow does not look correct.
av_cold void ff_ac3_common_init(void)
Initialize some tables.
#define LEVEL_PLUS_1POINT5DB
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)
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...
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 CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static int b1_mantissas[32][3]
tables for ungrouping mantissas
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define LEVEL_MINUS_1POINT5DB
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.
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.
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
int bit_rate
the average bitrate
static int b5_mantissas[16]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
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]
int ff_eac3_parse_header(AC3DecodeContext *s)
static int b4_mantissas[128][2]
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
#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
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.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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)
synthesis window for stochastic i
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.
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
#define FF_DECODE_ERROR_INVALID_BITSTREAM
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.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
AVSampleFormat
Audio Sample Formats.
these buffered frames must be flushed immediately if a new input produces new output(Example:frame rate-doubling filter:filter_frame must(1) flush the second copy of the previous frame, if it is still there,(2) push the first copy of the incoming frame,(3) keep the second copy for later.) If the input frame is not enough to produce output
static av_cold void ac3_tables_init(void)
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.
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...
void av_frame_set_decode_error_flags(AVFrame *frame, int val)
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]
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from from AC-3 order to SMPTE order.
void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
const uint16_t ff_ac3_db_per_bit_tab[4]
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