Go to the documentation of this file.
27 #include "config_components.h"
61 for (
int i = 0;
i < 256;
i++) {
62 int v = (
i >> 5) - ((
i >> 7) << 3) - 5;
68 for (
int i = 0;
i < 256;
i++) {
69 int v = (
i >> 4) - ((
i >> 7) << 4) - 4;
100 const float scale = 1.0f;
135 s->xcfptr[
i] =
s->transform_coeffs[
i];
136 s->dlyptr[
i] =
s->delay[
i];
153 memset(&
s->frame_type, 0,
sizeof(*
s) - offsetof(AC3DecodeContext,
frame_type));
172 s->bit_alloc_params.sr_code = hdr.
sr_code;
177 s->bit_alloc_params.sr_shift = hdr.
sr_shift;
181 s->fbw_channels =
s->channels -
s->lfe_on;
182 s->lfe_ch =
s->fbw_channels + 1;
190 s->center_mix_level_ltrt = 4;
191 s->surround_mix_level_ltrt = 4;
192 s->lfe_mix_level_exists = 0;
201 s->start_freq[
s->lfe_ch] = 0;
202 s->end_freq[
s->lfe_ch] = 7;
203 s->num_exp_groups[
s->lfe_ch] = 2;
204 s->channel_in_cpl[
s->lfe_ch] = 0;
207 if (
s->bitstream_id <= 10) {
209 s->snr_offset_strategy = 2;
210 s->block_switch_syntax = 1;
211 s->dither_flag_syntax = 1;
212 s->bit_allocation_syntax = 1;
213 s->fast_gain_syntax = 0;
214 s->first_cpl_leak = 0;
217 memset(
s->channel_uses_aht, 0,
sizeof(
s->channel_uses_aht));
219 for (
int i = 0;
i < (
s->channel_mode ? 1 : 2);
i++) {
221 if (
s->dialog_normalization[
i] == 0) {
222 s->dialog_normalization[
i] = -31;
224 if (
s->target_level != 0) {
226 (
float)(
s->target_level -
s->dialog_normalization[
i])/6.0f);
229 if (
s->compression_exists[
i]) {
234 }
else if (CONFIG_EAC3_DECODER) {
255 if (!
s->downmix_coeffs[0]) {
257 sizeof(**
s->downmix_coeffs));
258 if (!
s->downmix_coeffs[0])
263 for (
i = 0;
i <
s->fbw_channels;
i++) {
267 if (
s->channel_mode > 1 &&
s->channel_mode & 1) {
268 downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
271 int nf =
s->channel_mode - 2;
272 downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix *
LEVEL_MINUS_3DB;
275 int nf =
s->channel_mode - 4;
276 downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
281 for (
i = 0;
i <
s->fbw_channels;
i++) {
282 norm0 += downmix_coeffs[0][
i];
283 norm1 += downmix_coeffs[1][
i];
285 norm0 = 1.0f / norm0;
286 norm1 = 1.0f / norm1;
287 for (
i = 0;
i <
s->fbw_channels;
i++) {
288 downmix_coeffs[0][
i] *= norm0;
289 downmix_coeffs[1][
i] *= norm1;
293 for (
i = 0;
i <
s->fbw_channels;
i++)
294 downmix_coeffs[0][
i] = (downmix_coeffs[0][
i] +
297 for (
i = 0;
i <
s->fbw_channels;
i++) {
298 s->downmix_coeffs[0][
i] =
FIXR12(downmix_coeffs[0][
i]);
299 s->downmix_coeffs[1][
i] =
FIXR12(downmix_coeffs[1][
i]);
311 uint8_t absexp, int8_t *dexps)
313 int i, j, grp, group_size;
318 group_size = exp_strategy + (exp_strategy ==
EXP_D45);
319 for (grp = 0,
i = 0; grp < ngrps; grp++) {
332 for (
i = 0, j = 0;
i < ngrps * 3;
i++) {
333 prevexp += dexp[
i] - 2;
338 switch (group_size) {
339 case 4: dexps[j++] = prevexp;
340 dexps[j++] = prevexp;
341 case 2: dexps[j++] = prevexp;
342 case 1: dexps[j++] = prevexp;
358 for (band = 0; band <
s->num_cpl_bands; band++) {
359 int band_start = bin;
360 int band_end = bin +
s->cpl_band_sizes[band];
361 for (ch = 1; ch <=
s->fbw_channels; ch++) {
362 if (
s->channel_in_cpl[ch]) {
363 int cpl_coord =
s->cpl_coords[ch][band] << 5;
364 for (bin = band_start; bin < band_end; bin++) {
365 s->fixed_coeffs[ch][bin] =
366 MULH(
s->fixed_coeffs[
CPL_CH][bin] * (1 << 4), cpl_coord);
368 if (ch == 2 &&
s->phase_flags[band]) {
369 for (bin = band_start; bin < band_end; bin++)
370 s->fixed_coeffs[2][bin] = -
s->fixed_coeffs[2][bin];
396 int start_freq =
s->start_freq[ch_index];
397 int end_freq =
s->end_freq[ch_index];
398 uint8_t *baps =
s->bap[ch_index];
399 int8_t *exps =
s->dexps[ch_index];
400 int32_t *coeffs =
s->fixed_coeffs[ch_index];
401 int dither = (ch_index ==
CPL_CH) ||
s->dither_flag[ch_index];
405 for (freq = start_freq; freq < end_freq; freq++) {
406 int bap = baps[freq];
412 mantissa = (((
av_lfg_get(&
s->dith_state)>>8)*181)>>8) - 5931008;
466 coeffs[freq] = mantissa >> exps[freq];
478 for (ch = 1; ch <=
s->fbw_channels; ch++) {
479 if (!
s->dither_flag[ch] &&
s->channel_in_cpl[ch]) {
482 s->fixed_coeffs[ch][
i] = 0;
491 if (!
s->channel_uses_aht[ch]) {
497 if (CONFIG_EAC3_DECODER && !
blk)
499 for (bin =
s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
500 s->fixed_coeffs[ch][bin] =
s->pre_mantissa[ch][bin][
blk] >>
s->dexps[ch][bin];
516 for (ch = 1; ch <=
s->channels; ch++) {
521 if (
s->channel_in_cpl[ch]) {
529 end =
s->end_freq[ch];
532 s->fixed_coeffs[ch][end] = 0;
549 end =
FFMIN(
s->end_freq[1],
s->end_freq[2]);
551 for (bnd = 0; bnd <
s->num_rematrixing_bands; bnd++) {
552 if (
s->rematrixing_flags[bnd]) {
555 int tmp0 =
s->fixed_coeffs[1][
i];
556 s->fixed_coeffs[1][
i] +=
s->fixed_coeffs[2][
i];
557 s->fixed_coeffs[2][
i] = tmp0 -
s->fixed_coeffs[2][
i];
572 for (ch = 1; ch <=
channels; ch++) {
573 if (
s->block_switch[ch]) {
576 for (
i = 0;
i < 128;
i++)
577 x[
i] =
s->transform_coeffs[ch][2 *
i];
578 s->tx_fn_128(
s->tx_128,
s->tmp_output, x,
sizeof(
INTFLOAT));
580 s->fdsp->vector_fmul_window_scaled(
s->outptr[ch - 1],
s->delay[ch - 1 +
offset],
581 s->tmp_output,
s->window, 128, 8);
583 s->fdsp->vector_fmul_window(
s->outptr[ch - 1],
s->delay[ch - 1 +
offset],
584 s->tmp_output,
s->window, 128);
586 for (
i = 0;
i < 128;
i++)
587 x[
i] =
s->transform_coeffs[ch][2 *
i + 1];
590 s->tx_fn_256(
s->tx_256,
s->tmp_output,
s->transform_coeffs[ch],
sizeof(
INTFLOAT));
592 s->fdsp->vector_fmul_window_scaled(
s->outptr[ch - 1],
s->delay[ch - 1 +
offset],
593 s->tmp_output,
s->window, 128, 8);
595 s->fdsp->vector_fmul_window(
s->outptr[ch - 1],
s->delay[ch - 1 +
offset],
596 s->tmp_output,
s->window, 128);
598 memcpy(
s->delay[ch - 1 +
offset],
s->tmp_output + 128, 128 *
sizeof(
INTFLOAT));
608 int channel_data_size =
sizeof(
s->delay[0]);
609 switch (
s->channel_mode) {
613 memcpy(
s->delay[1],
s->delay[0], channel_data_size);
616 memset(
s->delay[3], 0, channel_data_size);
618 memset(
s->delay[2], 0, channel_data_size);
621 memset(
s->delay[4], 0, channel_data_size);
623 memset(
s->delay[3], 0, channel_data_size);
625 memcpy(
s->delay[2],
s->delay[1], channel_data_size);
626 memset(
s->delay[1], 0, channel_data_size);
649 int ecpl,
int start_subband,
int end_subband,
650 const uint8_t *default_band_struct,
651 int *num_bands, uint8_t *band_sizes,
652 uint8_t *band_struct,
int band_struct_size)
654 int subbnd, bnd, n_subbands, n_bands=0;
657 n_subbands = end_subband - start_subband;
660 memcpy(band_struct, default_band_struct, band_struct_size);
662 av_assert0(band_struct_size >= start_subband + n_subbands);
664 band_struct += start_subband + 1;
668 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
676 if (num_bands || band_sizes ) {
677 n_bands = n_subbands;
678 bnd_sz[0] = ecpl ? 6 : 12;
679 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
680 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
681 if (band_struct[subbnd - 1]) {
683 bnd_sz[bnd] += subbnd_size;
685 bnd_sz[++bnd] = subbnd_size;
692 *num_bands = n_bands;
694 memcpy(band_sizes, bnd_sz, n_bands);
700 int dst_start_freq, dst_end_freq, src_start_freq,
701 start_subband, end_subband;
705 s->channel_uses_spx[1] = 1;
707 unsigned channel_uses_spx =
get_bits(bc,
s->fbw_channels);
708 for (
int ch =
s->fbw_channels; ch >= 1; --ch) {
709 s->channel_uses_spx[ch] = channel_uses_spx & 1;
710 channel_uses_spx >>= 1;
717 start_subband =
get_bits(bc, 3) + 2;
718 if (start_subband > 7)
719 start_subband += start_subband - 7;
725 end_subband += end_subband - 7;
726 dst_start_freq = dst_start_freq * 12 + 25;
727 src_start_freq = start_subband * 12 + 25;
728 dst_end_freq = end_subband * 12 + 25;
731 if (start_subband >= end_subband) {
733 "range (%d >= %d)\n", start_subband, end_subband);
736 if (dst_start_freq >= src_start_freq) {
738 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
742 s->spx_dst_start_freq = dst_start_freq;
743 s->spx_src_start_freq = src_start_freq;
745 s->spx_dst_end_freq = dst_end_freq;
748 start_subband, end_subband,
752 s->spx_band_struct,
sizeof(
s->spx_band_struct));
759 int fbw_channels =
s->fbw_channels;
762 for (ch = 1; ch <= fbw_channels; ch++) {
763 if (
s->channel_uses_spx[ch]) {
764 if (
s->first_spx_coords[ch] ||
get_bits1(bc)) {
766 int bin, master_spx_coord;
768 s->first_spx_coords[ch] = 0;
770 master_spx_coord =
get_bits(bc, 2) * 3;
772 bin =
s->spx_src_start_freq;
773 for (bnd = 0; bnd <
s->num_spx_bands; bnd++) {
774 int bandsize =
s->spx_band_sizes[bnd];
775 int spx_coord_exp, spx_coord_mant;
779 int64_t accu = ((bin << 23) + (bandsize << 22))
781 nratio = (int)(accu >> 32);
782 nratio -= spx_blend << 18;
787 }
else if (nratio > 0x7fffff) {
792 accu = (
int64_t)nblend * 1859775393;
793 nblend = (int)((accu + (1<<29)) >> 30);
800 nratio = ((
float)((bin + (bandsize >> 1))) /
s->spx_dst_end_freq) - spx_blend;
802 nblend =
sqrtf(3.0
f * nratio);
804 sblend =
sqrtf(1.0
f - nratio);
811 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
812 else spx_coord_mant += 4;
813 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
817 accu = (
int64_t)nblend * spx_coord_mant;
818 s->spx_noise_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
819 accu = (
int64_t)sblend * spx_coord_mant;
820 s->spx_signal_blend[ch][bnd] = (int)((accu + (1<<22)) >> 23);
822 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
823 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
824 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
829 s->first_spx_coords[ch] = 1;
835 uint8_t *bit_alloc_stages)
838 int fbw_channels =
s->fbw_channels;
839 int channel_mode =
s->channel_mode;
845 if (
s->cpl_in_use[
blk]) {
847 int cpl_start_subband, cpl_end_subband;
863 s->channel_in_cpl[1] = 1;
864 s->channel_in_cpl[2] = 1;
866 for (ch = 1; ch <= fbw_channels; ch++)
875 cpl_start_subband =
get_bits(bc, 4);
876 cpl_end_subband =
s->spx_in_use ? (
s->spx_src_start_freq - 37) / 12 :
878 if (cpl_start_subband >= cpl_end_subband) {
880 cpl_start_subband, cpl_end_subband);
883 s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
884 s->end_freq[
CPL_CH] = cpl_end_subband * 12 + 37;
889 &
s->num_cpl_bands,
s->cpl_band_sizes,
890 s->cpl_band_struct,
sizeof(
s->cpl_band_struct));
893 for (ch = 1; ch <= fbw_channels; ch++) {
894 s->channel_in_cpl[ch] = 0;
895 s->first_cpl_coords[ch] = 1;
897 s->first_cpl_leak =
s->eac3;
898 s->phase_flags_in_use = 0;
907 int fbw_channels =
s->fbw_channels;
909 int cpl_coords_exist = 0;
911 for (ch = 1; ch <= fbw_channels; ch++) {
912 if (
s->channel_in_cpl[ch]) {
913 if ((
s->eac3 &&
s->first_cpl_coords[ch]) ||
get_bits1(bc)) {
914 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
915 s->first_cpl_coords[ch] = 0;
916 cpl_coords_exist = 1;
917 master_cpl_coord = 3 *
get_bits(bc, 2);
918 for (bnd = 0; bnd <
s->num_cpl_bands; bnd++) {
921 if (cpl_coord_exp == 15)
922 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
924 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
925 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
929 "be present in block 0\n");
934 s->first_cpl_coords[ch] = 1;
939 for (bnd = 0; bnd <
s->num_cpl_bands; bnd++) {
940 s->phase_flags[bnd] =
s->phase_flags_in_use ?
get_bits1(bc) : 0;
952 int fbw_channels =
s->fbw_channels;
953 int channel_mode =
s->channel_mode;
954 int i, bnd, seg, ch,
ret;
955 int different_transforms;
962 different_transforms = 0;
963 if (
s->block_switch_syntax) {
964 for (ch = 1; ch <= fbw_channels; ch++) {
966 if (ch > 1 &&
s->block_switch[ch] !=
s->block_switch[1])
967 different_transforms = 1;
972 if (
s->dither_flag_syntax) {
973 for (ch = 1; ch <= fbw_channels; ch++) {
979 i = !
s->channel_mode;
986 if (range_bits <= 127 || s->drc_scale <= 1.0)
990 }
else if (
blk == 0) {
1003 if (!
s->eac3 || !
s->spx_in_use) {
1005 for (ch = 1; ch <= fbw_channels; ch++) {
1006 s->channel_uses_spx[ch] = 0;
1007 s->first_spx_coords[ch] = 1;
1019 }
else if (!
s->eac3) {
1022 "be present in block 0\n");
1025 s->cpl_in_use[
blk] =
s->cpl_in_use[
blk-1];
1028 cpl_in_use =
s->cpl_in_use[
blk];
1039 s->num_rematrixing_bands = 4;
1040 if (cpl_in_use &&
s->start_freq[
CPL_CH] <= 61) {
1041 s->num_rematrixing_bands -= 1 + (
s->start_freq[
CPL_CH] == 37);
1042 }
else if (
s->spx_in_use &&
s->spx_src_start_freq <= 61) {
1043 s->num_rematrixing_bands--;
1045 for (bnd = 0; bnd <
s->num_rematrixing_bands; bnd++)
1049 "new rematrixing strategy not present in block 0\n");
1050 s->num_rematrixing_bands = 0;
1055 for (ch = !cpl_in_use; ch <=
s->channels; ch++) {
1057 s->exp_strategy[
blk][ch] =
get_bits(gbc, 2 - (ch ==
s->lfe_ch));
1059 bit_alloc_stages[ch] = 3;
1063 for (ch = 1; ch <= fbw_channels; ch++) {
1064 s->start_freq[ch] = 0;
1067 int prev =
s->end_freq[ch];
1068 if (
s->channel_in_cpl[ch])
1069 s->end_freq[ch] =
s->start_freq[
CPL_CH];
1070 else if (
s->channel_uses_spx[ch])
1071 s->end_freq[ch] =
s->spx_src_start_freq;
1073 int bandwidth_code =
get_bits(gbc, 6);
1074 if (bandwidth_code > 60) {
1078 s->end_freq[ch] = bandwidth_code * 3 + 73;
1080 group_size = 3 << (
s->exp_strategy[
blk][ch] - 1);
1081 s->num_exp_groups[ch] = (
s->end_freq[ch] + group_size-4) / group_size;
1082 if (
blk > 0 &&
s->end_freq[ch] != prev)
1092 for (ch = !cpl_in_use; ch <=
s->channels; ch++) {
1094 s->dexps[ch][0] =
get_bits(gbc, 4) << !ch;
1096 s->num_exp_groups[ch],
s->dexps[ch][0],
1097 &
s->dexps[ch][
s->start_freq[ch]+!!ch])) {
1100 if (ch !=
CPL_CH && ch !=
s->lfe_ch)
1106 if (
s->bit_allocation_syntax) {
1113 for (ch = !cpl_in_use; ch <=
s->channels; ch++)
1114 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1117 "be present in block 0\n");
1123 if (!
s->eac3 || !
blk) {
1124 if (
s->snr_offset_strategy &&
get_bits1(gbc)) {
1127 csnr = (
get_bits(gbc, 6) - 15) << 4;
1128 for (
i = ch = !cpl_in_use; ch <=
s->channels; ch++) {
1130 if (ch ==
i ||
s->snr_offset_strategy == 2)
1131 snr = (csnr +
get_bits(gbc, 4)) << 2;
1133 if (
blk &&
s->snr_offset[ch] != snr) {
1134 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 1);
1136 s->snr_offset[ch] = snr;
1140 int prev =
s->fast_gain[ch];
1143 if (
blk && prev !=
s->fast_gain[ch])
1144 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1147 }
else if (!
s->eac3 && !
blk) {
1155 for (ch = !cpl_in_use; ch <=
s->channels; ch++) {
1156 int prev =
s->fast_gain[ch];
1159 if (
blk && prev !=
s->fast_gain[ch])
1160 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1162 }
else if (
s->eac3 && !
blk) {
1163 for (ch = !cpl_in_use; ch <=
s->channels; ch++)
1179 if (
blk && (fl !=
s->bit_alloc_params.cpl_fast_leak ||
1180 sl !=
s->bit_alloc_params.cpl_slow_leak)) {
1183 s->bit_alloc_params.cpl_fast_leak = fl;
1184 s->bit_alloc_params.cpl_slow_leak = sl;
1185 }
else if (!
s->eac3 && !
blk) {
1187 "be present in block 0\n");
1190 s->first_cpl_leak = 0;
1196 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1202 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1205 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1207 s->dba_nsegs[ch] =
get_bits(gbc, 3) + 1;
1208 for (seg = 0; seg <
s->dba_nsegs[ch]; seg++) {
1209 s->dba_offsets[ch][seg] =
get_bits(gbc, 5);
1210 s->dba_lengths[ch][seg] =
get_bits(gbc, 4);
1211 s->dba_values[ch][seg] =
get_bits(gbc, 3);
1214 bit_alloc_stages[ch] =
FFMAX(bit_alloc_stages[ch], 2);
1217 }
else if (
blk == 0) {
1218 for (ch = 0; ch <=
s->channels; ch++) {
1224 for (ch = !cpl_in_use; ch <=
s->channels; ch++) {
1225 if (bit_alloc_stages[ch] > 2) {
1228 s->start_freq[ch],
s->end_freq[ch],
1229 s->psd[ch],
s->band_psd[ch]);
1231 if (bit_alloc_stages[ch] > 1) {
1235 s->start_freq[ch],
s->end_freq[ch],
1236 s->fast_gain[ch], (ch ==
s->lfe_ch),
1237 s->dba_mode[ch],
s->dba_nsegs[ch],
1238 s->dba_offsets[ch],
s->dba_lengths[ch],
1239 s->dba_values[ch],
s->mask[ch])) {
1244 if (bit_alloc_stages[ch] > 0) {
1246 const uint8_t *
bap_tab =
s->channel_uses_aht[ch] ?
1248 s->ac3dsp.bit_alloc_calc_bap(
s->mask[ch],
s->psd[ch],
1249 s->start_freq[ch],
s->end_freq[ch],
1251 s->bit_alloc_params.floor,
1273 for (ch = 1; ch <=
s->channels; ch++) {
1274 int audio_channel = 0;
1277 audio_channel = 2-ch;
1278 if (
s->heavy_compression &&
s->compression_exists[audio_channel])
1279 gain =
s->heavy_dynamic_range[audio_channel];
1281 gain =
s->dynamic_range[audio_channel];
1284 scale_coefs(
s->transform_coeffs[ch],
s->fixed_coeffs[ch], gain, 256);
1286 if (
s->target_level != 0)
1287 gain = gain *
s->level_gain[audio_channel];
1288 gain *= 1.0 / 4194304.0f;
1289 s->fmt_conv.int32_to_float_fmul_scalar(
s->transform_coeffs[ch],
1290 s->fixed_coeffs[ch], gain, 256);
1295 if (CONFIG_EAC3_DECODER &&
s->spx_in_use) {
1302 downmix_output =
s->channels !=
s->out_channels &&
1303 !((
s->output_mode & AC3_OUTPUT_LFEON) &&
1304 s->fbw_channels ==
s->out_channels);
1305 if (different_transforms) {
1315 if (downmix_output) {
1318 s->out_channels,
s->fbw_channels, 256);
1321 s->out_channels,
s->fbw_channels, 256);
1325 if (downmix_output) {
1327 s->out_channels,
s->fbw_channels, 256);
1330 if (downmix_output && !
s->downmixed) {
1333 s->out_channels,
s->fbw_channels, 128);
1346 int *got_frame_ptr,
AVPacket *avpkt)
1348 const uint8_t *buf = avpkt->
data;
1349 int buf_size, full_buf_size = avpkt->
size;
1353 int skip = 0, got_independent_frame = 0;
1360 s->superframe_size = 0;
1362 buf_size = full_buf_size;
1364 if (i < 0 || i > 10)
1371 if (buf_size >= 2 &&
AV_RB16(buf) == 0x770B) {
1373 int cnt =
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
1374 s->bdsp.bswap16_buf((uint16_t *)
s->input_buffer,
1375 (
const uint16_t *) buf, cnt);
1377 memcpy(
s->input_buffer, buf,
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1382 if (
s->consistent_noise_generation)
1385 buf =
s->input_buffer;
1411 if (
s->substreamid) {
1413 "unsupported substream %d: skipping frame\n",
1432 if (
s->frame_size > buf_size) {
1438 s->frame_size - 2)) {
1450 return FFMIN(full_buf_size,
s->frame_size);
1454 if (!err || (
s->channels &&
s->out_channels !=
s->channels)) {
1455 s->out_channels =
s->channels;
1456 s->output_mode =
s->channel_mode;
1458 s->output_mode |= AC3_OUTPUT_LFEON;
1459 if (
s->channels > 1 &&
1461 s->out_channels = 1;
1463 }
else if (
s->channels > 2 &&
1465 s->out_channels = 2;
1473 switch (
s->preferred_downmix) {
1488 if (
s->channels !=
s->out_channels && !((
s->output_mode & AC3_OUTPUT_LFEON) &&
1489 s->fbw_channels ==
s->out_channels)) {
1495 }
else if (!
s->channels) {
1501 if (
s->output_mode & AC3_OUTPUT_LFEON)
1509 if (
s->bitstream_mode == 0x7 &&
s->channels > 1)
1517 s->outptr[ch] =
s->output[ch +
offset];
1519 for (ch = 0; ch <
s->channels; ch++) {
1520 if (ch < s->out_channels)
1529 for (ch = 0; ch <
s->out_channels; ch++)
1531 for (ch = 0; ch <
s->out_channels; ch++)
1533 for (ch = 0; ch <
s->out_channels; ch++) {
1540 for (ch = 0; ch <
s->out_channels; ch++)
1544 if (buf_size >
s->frame_size) {
1548 if (buf_size -
s->frame_size <= 16) {
1549 skip = buf_size -
s->frame_size;
1564 buf +=
s->frame_size;
1565 buf_size -=
s->frame_size;
1566 s->prev_output_mode =
s->output_mode;
1567 s->prev_bit_rate =
s->bit_rate;
1568 got_independent_frame = 1;
1569 goto dependent_frame;
1580 avctx->
bit_rate =
s->bit_rate +
s->prev_bit_rate;
1590 extended_channel_map[ch] = ch;
1595 uint64_t channel_layout;
1598 if (
s->prev_output_mode & AC3_OUTPUT_LFEON)
1601 channel_layout = ich_layout;
1602 for (ch = 0; ch < 16; ch++) {
1623 if (extend >= channel_map_size)
1630 for (
i = 0;
i < 64;
i++) {
1635 if (extend >= channel_map_size)
1654 int map = extended_channel_map[ch];
1657 s->output_buffer[
map],
1669 s->channel_mode == (
s->output_mode & ~AC3_OUTPUT_LFEON)) {
1675 s->channel_mode == (
s->output_mode & ~AC3_OUTPUT_LFEON)) {
1676 switch (
s->dolby_surround_ex_mode) {
1697 switch (
s->preferred_downmix) {
1715 if (
s->lfe_mix_level_exists)
1723 if (!
s->superframe_size)
1724 return FFMIN(full_buf_size,
s->frame_size +
skip);
1726 return FFMIN(full_buf_size,
s->superframe_size +
skip);
1743 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1744 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
@ AV_SAMPLE_FMT_FLTP
float, planar
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
static int set_downmix_coeffs(AC3DecodeContext *s)
Set stereo downmixing coefficients based on frame header info.
const uint8_t ff_ac3_fast_decay_tab[4]
#define AV_EF_EXPLODE
abort decoding on minor error detection
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_EF_CAREFUL
consider things that violate the spec, are fast to calculate and have not been seen in the wild as er...
const uint16_t ff_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
#define AV_CHANNEL_LAYOUT_STEREO
int sample_rate
samples per second
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
#define AC3_DYNAMIC_RANGE(x)
This structure describes decoded (raw) audio or video data.
int ff_ac3_bap4_mantissas[128][2]
const uint8_t ff_ac3_channels_tab[8]
Map audio coding mode (acmod) to number of full-bandwidth channels.
@ AC3_DSUREXMOD_NOTINDICATED
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.
int nb_channels
Number of channels in this layout.
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, int inv, int len, const void *scale, uint64_t flags)
Initialize a transform context with the given configuration (i)MDCTs with an odd length are currently...
double surround_mix_level_ltrt
Absolute scale factor representing the nominal level of the surround channels during an Lt/Rt compati...
av_cold void ff_ac3dsp_init(AC3DSPContext *c)
static void skip_bits(GetBitContext *s, int n)
@ AC3_PARSE_ERROR_FRAME_TYPE
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
@ AV_DOWNMIX_TYPE_UNKNOWN
Not indicated.
AVChannelLayout ch_layout
Audio channel layout.
Grouped mantissas for 3-level 5-level and 11-level quantization.
static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Decode a single AC-3 frame.
static av_cold void ac3_float_tables_init(void)
int flags
AV_CODEC_FLAG_*.
@ EAC3_FRAME_TYPE_DEPENDENT
static av_cold void ac3_decode_flush(AVCodecContext *avctx)
This structure describes optional metadata relevant to a downmix procedure.
static void scale_coefs(int32_t *dst, const int32_t *src, int dynrng, int len)
const uint8_t ff_ac3_bap_tab[64]
const uint8_t ff_ac3_dec_channel_map[8][2][6]
Table to remap channels from AC-3 order to SMPTE order.
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact)
Allocate and initialize a fixed DSP context.
static int coupling_coordinates(AC3DecodeContext *s, int blk)
int ff_ac3_bap2_mantissas[128][3]
const float ff_eac3_gain_levels_lfe[32]
Adjustments in dB gain (LFE, +10 to -21 dB)
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
@ AV_MATRIX_ENCODING_DOLBY
#define AV_PROFILE_UNKNOWN
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define AV_CH_LOW_FREQUENCY
static int parse_frame_header(AC3DecodeContext *s)
Common function to parse AC-3 or E-AC-3 frame header.
const float ff_ac3_gain_levels[9]
Adjustments in dB gain.
static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
Generate transform coefficients for each coupled channel in the coupling range using the coupling coe...
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
const int16_t ff_ac3_floor_tab[8]
av_cold void ff_ac3_init_static(void)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
@ EAC3_FRAME_TYPE_INDEPENDENT
static int get_sbits(GetBitContext *s, int n)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static av_cold int ac3_decode_init(AVCodecContext *avctx)
AVCodec initialization.
const uint8_t ff_ac3_default_coeffs[8][5][2]
Table for default stereo downmixing coefficients reference: Section 7.8.2 Downmixing Into Two Channel...
static const uint8_t channel_map[8][8]
uint8_t ff_ac3_ungroup_3_in_7_bits_tab[128][3]
table for ungrouping 3 values in 7 bits.
static void remove_dithering(AC3DecodeContext *s)
Remove random dithering from coupling range coefficients with zero-bit mantissas for coupled channels...
float ff_ac3_heavy_dynamic_range_tab[256]
static const uint8_t bap_tab[64]
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
#define FF_DECODE_ERROR_INVALID_BITSTREAM
double surround_mix_level
Absolute scale factor representing the nominal level of the surround channels during a regular downmi...
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AC3_DYNAMIC_RANGE1
int64_t bit_rate
the average bitrate
static unsigned int get_bits1(GetBitContext *s)
static void ac3_upmix_delay(AC3DecodeContext *s)
Upmix delay samples from stereo to original channel layout.
static __device__ float sqrtf(float a)
static int spx_strategy(AC3DecodeContext *s, int blk)
#define AC3_MAX_CHANNELS
maximum number of channels, including coupling channel
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
const uint64_t ff_eac3_custom_channel_map_locations[16][2]
@ AC3_PARSE_ERROR_CHANNEL_MAP
static void ac3_downmix(AVCodecContext *avctx)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
An AVChannelLayout holds information about the channel layout of audio data.
static int coupling_strategy(AC3DecodeContext *s, int blk, uint8_t *bit_alloc_stages)
@ AV_MATRIX_ENCODING_NONE
const uint16_t ff_ac3_db_per_bit_tab[4]
enum AVSampleFormat sample_fmt
audio sample format
#define AV_NUM_DATA_POINTERS
double center_mix_level_ltrt
Absolute scale factor representing the nominal level of the center channel during an Lt/Rt compatible...
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static const int end_freq_inv_tab[8]
static void spx_coordinates(AC3DecodeContext *s)
int ff_ac3_bap1_mantissas[32][3]
tables for ungrouping mantissas
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
av_cold void av_tx_uninit(AVTXContext **ctx)
Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL.
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length)
Seed the state of the ALFG using binary data.
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...
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...
#define CPL_CH
coupling channel index
static void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch, mant_groups *m)
double center_mix_level
Absolute scale factor representing the nominal level of the center channel during a regular downmix.
#define i(width, name, range_min, range_max)
void ff_ac3dsp_downmix(AC3DSPContext *c, float **samples, float **matrix, int out_ch, int in_ch, int len)
#define av_malloc_array(a, b)
const uint8_t ff_ac3_quantization_tab[16]
Quantization table: levels for symmetric.
const uint8_t ff_ac3_slow_decay_tab[4]
static av_cold int ac3_decode_end(AVCodecContext *avctx)
Uninitialize the AC-3 decoder.
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
int ff_ac3_find_syncword(const uint8_t *buf, int buf_size)
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.
#define AC3_HEAVY_RANGE(x)
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...
@ AV_DOWNMIX_TYPE_LORO
Lo/Ro 2-channel downmix (Stereo).
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
@ AC3_DHEADPHONMOD_NOTINDICATED
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
Parse AC-3 frame header.
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
main external API structure.
@ AC3_DMIXMOD_NOTINDICATED
#define EAC3_MAX_CHANNELS
maximum number of channels in EAC3
@ AV_MATRIX_ENCODING_DOLBYEX
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
@ AV_DOWNMIX_TYPE_DPLII
Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible.
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
Generate a Kaiser-Bessel Derived Window.
@ AC3_PARSE_ERROR_SAMPLE_RATE
static void decode_transform_coeffs(AC3DecodeContext *s, int blk)
Decode the transform coefficients.
const int ff_ac3_bap5_mantissas[15+1]
Table 7.23.
const int ff_ac3_bap3_mantissas[7+1]
Ungrouped mantissa tables; the extra entry is padding to avoid range checks.
AVDownmixInfo * av_downmix_info_update_side_data(AVFrame *frame)
Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing.
const uint8_t ff_eac3_hebap_tab[64]
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define avpriv_request_sample(...)
const VDPAUPixFmtMap * map
#define AV_CHANNEL_LAYOUT_MONO
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 uint16_t ff_ac3_slow_gain_tab[4]
static void scale(int *out, const int *in, const int w, const int h, const int shift)
This structure stores compressed data.
static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
Decode a single audio block from the AC-3 bitstream.
static void do_imdct(AC3DecodeContext *s, int channels, int offset)
Inverse MDCT Transform.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
const uint16_t ff_ac3_fast_gain_tab[8]
@ AV_MATRIX_ENCODING_DPLIIZ
@ AC3_PARSE_ERROR_FRAME_SIZE
static float dynamic_range_tab[256]
dynamic range table.
static void do_rematrixing(AC3DecodeContext *s)
Stereo rematrixing.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static av_always_inline int fixed_sqrt(int x, int bits)
Calculate the square root.
static int ff_eac3_parse_header(AC3DecodeContext *s, const AC3HeaderInfo *hdr)
av_cold void ff_fmt_convert_init(FmtConvertContext *c)
@ AV_DOWNMIX_TYPE_LTRT
Lt/Rt 2-channel downmix, Dolby Surround compatible.
#define AV_PROFILE_EAC3_DDP_ATMOS
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
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.
const uint8_t ff_eac3_default_cpl_band_struct[18]
Table E2.16 Default Coupling Banding Structure.
const uint8_t ff_eac3_default_spx_band_struct[17]
Table E2.15 Default Spectral Extension Banding Structure.
static const uint8_t dither[8][8]