27 #include "config_components.h" 
   68     5, 6, 7, 8, 9, 10, 11, 12, 14, 16
 
   92     3.162275, 2.818382, 2.511886, 2.238719, 1.995261, 1.778278, 1.584893,
 
   93     1.412536, 1.258924, 1.122018, 1.000000, 0.891251, 0.794328, 0.707946,
 
   94     0.630957, 0.562341, 0.501187, 0.446683, 0.398107, 0.354813, 0.316227,
 
   95     0.281838, 0.251188, 0.223872, 0.199526, 0.177828, 0.158489, 0.141253,
 
   96     0.125892, 0.112201, 0.100000, 0.089125
 
  104     { { 2, 7 }, { 7, 2 },                               },
 
  106     { { 2, 7 }, { 7, 2 },                               },
 
  107     { { 2, 7 }, { 5, 5 }, { 7, 2 },                     },
 
  108     { { 2, 7 }, { 7, 2 }, { 6, 6 },                     },
 
  109     { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 8, 8 },           },
 
  110     { { 2, 7 }, { 7, 2 }, { 6, 7 }, { 7, 6 },           },
 
  111     { { 2, 7 }, { 5, 5 }, { 7, 2 }, { 6, 7 }, { 7, 6 }, },
 
  122     return ((
code - (levels >> 1)) * (1 << 24)) / levels;
 
  134     for (
i = 0; 
i < 128; 
i++) {
 
  142     for (
i = 0; 
i < 32; 
i++) {
 
  148     for (
i = 0; 
i < 128; 
i++) {
 
  160     for (
i = 0; 
i < 7; 
i++) {
 
  164     for (
i = 0; 
i < 15; 
i++) {
 
  172     for (
i = 0; 
i < 256; 
i++) {
 
  173         int v = (
i >> 5) - ((
i >> 7) << 3) - 5;
 
  179     for (
i = 0; 
i < 256; 
i++) {
 
  180         int v = (
i >> 4) - ((
i >> 7) << 4) - 4;
 
  193 #if FF_API_OLD_CHANNEL_LAYOUT 
  195     if (avctx->request_channel_layout) {
 
  220     const float scale = 1.0f;
 
  254         s->xcfptr[
i] = 
s->transform_coeffs[
i];
 
  255         s->dlyptr[
i] = 
s->delay[
i];
 
  274     i = !
s->channel_mode;
 
  276         s->dialog_normalization[(!
s->channel_mode)-
i] = -
get_bits(gbc, 5);
 
  277         if (
s->dialog_normalization[(!
s->channel_mode)-
i] == 0) {
 
  278             s->dialog_normalization[(!
s->channel_mode)-
i] = -31;
 
  280         if (
s->target_level != 0) {
 
  281             s->level_gain[(!
s->channel_mode)-
i] = 
powf(2.0
f,
 
  282                 (
float)(
s->target_level -
 
  283                 s->dialog_normalization[(!
s->channel_mode)-
i])/6.0f);
 
  285         if (
s->compression_exists[(!
s->channel_mode)-
i] = 
get_bits1(gbc)) {
 
  286             s->heavy_dynamic_range[(!
s->channel_mode)-
i] =
 
  298     if (
s->bitstream_id != 6) {
 
  306             s->center_mix_level_ltrt   = 
get_bits(gbc, 3);
 
  312             s->dolby_surround_ex_mode = 
get_bits(gbc, 2);
 
  313             s->dolby_headphone_mode   = 
get_bits(gbc, 2);
 
  342     s->bit_alloc_params.sr_code     = hdr.
sr_code;
 
  347     s->bit_alloc_params.sr_shift    = hdr.
sr_shift;
 
  351     s->fbw_channels                 = 
s->channels - 
s->lfe_on;
 
  352     s->lfe_ch                       = 
s->fbw_channels + 1;
 
  357     s->center_mix_level_ltrt        = 4; 
 
  359     s->surround_mix_level_ltrt      = 4; 
 
  360     s->lfe_mix_level_exists         = 0;
 
  369         s->start_freq[
s->lfe_ch]     = 0;
 
  370         s->end_freq[
s->lfe_ch]       = 7;
 
  371         s->num_exp_groups[
s->lfe_ch] = 2;
 
  372         s->channel_in_cpl[
s->lfe_ch] = 0;
 
  375     if (
s->bitstream_id <= 10) {
 
  377         s->snr_offset_strategy   = 2;
 
  378         s->block_switch_syntax   = 1;
 
  379         s->dither_flag_syntax    = 1;
 
  380         s->bit_allocation_syntax = 1;
 
  381         s->fast_gain_syntax      = 0;
 
  382         s->first_cpl_leak        = 0;
 
  385         memset(
s->channel_uses_aht, 0, 
sizeof(
s->channel_uses_aht));
 
  387     } 
else if (CONFIG_EAC3_DECODER) {
 
  408     if (!
s->downmix_coeffs[0]) {
 
  410                                                sizeof(**
s->downmix_coeffs));
 
  411         if (!
s->downmix_coeffs[0])
 
  416     for (
i = 0; 
i < 
s->fbw_channels; 
i++) {
 
  420     if (
s->channel_mode > 1 && 
s->channel_mode & 1) {
 
  421         downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
 
  424         int nf = 
s->channel_mode - 2;
 
  425         downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix * 
LEVEL_MINUS_3DB;
 
  428         int nf = 
s->channel_mode - 4;
 
  429         downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
 
  434     for (
i = 0; 
i < 
s->fbw_channels; 
i++) {
 
  435         norm0 += downmix_coeffs[0][
i];
 
  436         norm1 += downmix_coeffs[1][
i];
 
  438     norm0 = 1.0f / norm0;
 
  439     norm1 = 1.0f / norm1;
 
  440     for (
i = 0; 
i < 
s->fbw_channels; 
i++) {
 
  441         downmix_coeffs[0][
i] *= norm0;
 
  442         downmix_coeffs[1][
i] *= norm1;
 
  446         for (
i = 0; 
i < 
s->fbw_channels; 
i++)
 
  447             downmix_coeffs[0][
i] = (downmix_coeffs[0][
i] +
 
  450     for (
i = 0; 
i < 
s->fbw_channels; 
i++) {
 
  451         s->downmix_coeffs[0][
i] = 
FIXR12(downmix_coeffs[0][
i]);
 
  452         s->downmix_coeffs[1][
i] = 
FIXR12(downmix_coeffs[1][
i]);
 
  464                             uint8_t absexp, int8_t *dexps)
 
  466     int i, j, grp, group_size;
 
  471     group_size = exp_strategy + (exp_strategy == 
EXP_D45);
 
  472     for (grp = 0, 
i = 0; grp < ngrps; grp++) {
 
  485     for (
i = 0, j = 0; 
i < ngrps * 3; 
i++) {
 
  486         prevexp += dexp[
i] - 2;
 
  491         switch (group_size) {
 
  492         case 4: dexps[j++] = prevexp;
 
  493                 dexps[j++] = prevexp;
 
  494         case 2: dexps[j++] = prevexp;
 
  495         case 1: dexps[j++] = prevexp;
 
  511     for (band = 0; band < 
s->num_cpl_bands; band++) {
 
  512         int band_start = bin;
 
  513         int band_end = bin + 
s->cpl_band_sizes[band];
 
  514         for (ch = 1; ch <= 
s->fbw_channels; ch++) {
 
  515             if (
s->channel_in_cpl[ch]) {
 
  516                 int cpl_coord = 
s->cpl_coords[ch][band] << 5;
 
  517                 for (bin = band_start; bin < band_end; bin++) {
 
  518                     s->fixed_coeffs[ch][bin] =
 
  519                         MULH(
s->fixed_coeffs[
CPL_CH][bin] * (1 << 4), cpl_coord);
 
  521                 if (ch == 2 && 
s->phase_flags[band]) {
 
  522                     for (bin = band_start; bin < band_end; bin++)
 
  523                         s->fixed_coeffs[2][bin] = -
s->fixed_coeffs[2][bin];
 
  549     int start_freq = 
s->start_freq[ch_index];
 
  550     int end_freq   = 
s->end_freq[ch_index];
 
  551     uint8_t *baps  = 
s->bap[ch_index];
 
  552     int8_t *exps   = 
s->dexps[ch_index];
 
  553     int32_t *coeffs = 
s->fixed_coeffs[ch_index];
 
  554     int dither     = (ch_index == 
CPL_CH) || 
s->dither_flag[ch_index];
 
  558     for (freq = start_freq; freq < end_freq; freq++) {
 
  559         int bap = baps[freq];
 
  565                 mantissa = (((
av_lfg_get(&
s->dith_state)>>8)*181)>>8) - 5931008;
 
  619         coeffs[freq] = mantissa >> exps[freq];
 
  631     for (ch = 1; ch <= 
s->fbw_channels; ch++) {
 
  632         if (!
s->dither_flag[ch] && 
s->channel_in_cpl[ch]) {
 
  635                     s->fixed_coeffs[ch][
i] = 0;
 
  644     if (!
s->channel_uses_aht[ch]) {
 
  650         if (CONFIG_EAC3_DECODER && !
blk)
 
  652         for (bin = 
s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
 
  653             s->fixed_coeffs[ch][bin] = 
s->pre_mantissa[ch][bin][
blk] >> 
s->dexps[ch][bin];
 
  669     for (ch = 1; ch <= 
s->channels; ch++) {
 
  674         if (
s->channel_in_cpl[ch])  {
 
  682             end = 
s->end_freq[ch];
 
  685             s->fixed_coeffs[ch][end] = 0;
 
  702     end = 
FFMIN(
s->end_freq[1], 
s->end_freq[2]);
 
  704     for (bnd = 0; bnd < 
s->num_rematrixing_bands; bnd++) {
 
  705         if (
s->rematrixing_flags[bnd]) {
 
  708                 int tmp0 = 
s->fixed_coeffs[1][
i];
 
  709                 s->fixed_coeffs[1][
i] += 
s->fixed_coeffs[2][
i];
 
  710                 s->fixed_coeffs[2][
i]  = tmp0 - 
s->fixed_coeffs[2][
i];
 
  725     for (ch = 1; ch <= 
channels; ch++) {
 
  726         if (
s->block_switch[ch]) {
 
  729             for (
i = 0; 
i < 128; 
i++)
 
  730                 x[
i] = 
s->transform_coeffs[ch][2 * 
i];
 
  731             s->tx_fn_128(
s->tx_128, 
s->tmp_output, x, 
sizeof(
INTFLOAT));
 
  733             s->fdsp->vector_fmul_window_scaled(
s->outptr[ch - 1], 
s->delay[ch - 1 + 
offset],
 
  734                                        s->tmp_output, 
s->window, 128, 8);
 
  736             s->fdsp->vector_fmul_window(
s->outptr[ch - 1], 
s->delay[ch - 1 + 
offset],
 
  737                                        s->tmp_output, 
s->window, 128);
 
  739             for (
i = 0; 
i < 128; 
i++)
 
  740                 x[
i] = 
s->transform_coeffs[ch][2 * 
i + 1];
 
  743             s->tx_fn_256(
s->tx_256, 
s->tmp_output, 
s->transform_coeffs[ch], 
sizeof(
INTFLOAT));
 
  745             s->fdsp->vector_fmul_window_scaled(
s->outptr[ch - 1], 
s->delay[ch - 1 + 
offset],
 
  746                                        s->tmp_output, 
s->window, 128, 8);
 
  748             s->fdsp->vector_fmul_window(
s->outptr[ch - 1], 
s->delay[ch - 1 + 
offset],
 
  749                                        s->tmp_output, 
s->window, 128);
 
  751             memcpy(
s->delay[ch - 1 + 
offset], 
s->tmp_output + 128, 128 * 
sizeof(
INTFLOAT));
 
  761     int channel_data_size = 
sizeof(
s->delay[0]);
 
  762     switch (
s->channel_mode) {
 
  766         memcpy(
s->delay[1], 
s->delay[0], channel_data_size);
 
  769         memset(
s->delay[3], 0, channel_data_size);
 
  771         memset(
s->delay[2], 0, channel_data_size);
 
  774         memset(
s->delay[4], 0, channel_data_size);
 
  776         memset(
s->delay[3], 0, channel_data_size);
 
  778         memcpy(
s->delay[2], 
s->delay[1], channel_data_size);
 
  779         memset(
s->delay[1], 0, channel_data_size);
 
  802                                   int ecpl, 
int start_subband, 
int end_subband,
 
  803                                   const uint8_t *default_band_struct,
 
  804                                   int *num_bands, uint8_t *band_sizes,
 
  805                                   uint8_t *band_struct, 
int band_struct_size)
 
  807     int subbnd, bnd, n_subbands, n_bands=0;
 
  810     n_subbands = end_subband - start_subband;
 
  813         memcpy(band_struct, default_band_struct, band_struct_size);
 
  815     av_assert0(band_struct_size >= start_subband + n_subbands);
 
  817     band_struct += start_subband + 1;
 
  821         for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
 
  829     if (num_bands || band_sizes ) {
 
  830         n_bands = n_subbands;
 
  831         bnd_sz[0] = ecpl ? 6 : 12;
 
  832         for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
 
  833             int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
 
  834             if (band_struct[subbnd - 1]) {
 
  836                 bnd_sz[bnd] += subbnd_size;
 
  838                 bnd_sz[++bnd] = subbnd_size;
 
  845         *num_bands = n_bands;
 
  847         memcpy(band_sizes, bnd_sz, n_bands);
 
  853     int fbw_channels = 
s->fbw_channels;
 
  854     int dst_start_freq, dst_end_freq, src_start_freq,
 
  855         start_subband, end_subband, ch;
 
  859         s->channel_uses_spx[1] = 1;
 
  861         for (ch = 1; ch <= fbw_channels; ch++)
 
  868     start_subband  = 
get_bits(bc, 3) + 2;
 
  869     if (start_subband > 7)
 
  870         start_subband += start_subband - 7;
 
  876         end_subband   += end_subband   - 7;
 
  877     dst_start_freq = dst_start_freq * 12 + 25;
 
  878     src_start_freq = start_subband  * 12 + 25;
 
  879     dst_end_freq   = end_subband    * 12 + 25;
 
  882     if (start_subband >= end_subband) {
 
  884                "range (%d >= %d)\n", start_subband, end_subband);
 
  887     if (dst_start_freq >= src_start_freq) {
 
  889                "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
 
  893     s->spx_dst_start_freq = dst_start_freq;
 
  894     s->spx_src_start_freq = src_start_freq;
 
  896         s->spx_dst_end_freq   = dst_end_freq;
 
  899                           start_subband, end_subband,
 
  903                           s->spx_band_struct, 
sizeof(
s->spx_band_struct));
 
  910     int fbw_channels = 
s->fbw_channels;
 
  913     for (ch = 1; ch <= fbw_channels; ch++) {
 
  914         if (
s->channel_uses_spx[ch]) {
 
  915             if (
s->first_spx_coords[ch] || 
get_bits1(bc)) {
 
  917                 int bin, master_spx_coord;
 
  919                 s->first_spx_coords[ch] = 0;
 
  921                 master_spx_coord = 
get_bits(bc, 2) * 3;
 
  923                 bin = 
s->spx_src_start_freq;
 
  924                 for (bnd = 0; bnd < 
s->num_spx_bands; bnd++) {
 
  925                     int bandsize = 
s->spx_band_sizes[bnd];
 
  926                     int spx_coord_exp, spx_coord_mant;
 
  930                     int64_t accu = ((bin << 23) + (bandsize << 22))
 
  931                                  * (int64_t)
s->spx_dst_end_freq;
 
  932                     nratio = (
int)(accu >> 32);
 
  933                     nratio -= spx_blend << 18;
 
  938                     } 
else if (nratio > 0x7fffff) {
 
  943                         accu = (int64_t)nblend * 1859775393;
 
  944                         nblend = (
int)((accu + (1<<29)) >> 30);
 
  951                     nratio = ((
float)((bin + (bandsize >> 1))) / 
s->spx_dst_end_freq) - spx_blend;
 
  953                     nblend = 
sqrtf(3.0
f * nratio); 
 
  955                     sblend = 
sqrtf(1.0
f - nratio);
 
  962                     if (spx_coord_exp == 15) spx_coord_mant <<= 1;
 
  963                     else                     spx_coord_mant += 4;
 
  964                     spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
 
  968                     accu = (int64_t)nblend * spx_coord_mant;
 
  969                     s->spx_noise_blend[ch][bnd]  = (
int)((accu + (1<<22)) >> 23);
 
  970                     accu = (int64_t)sblend * spx_coord_mant;
 
  971                     s->spx_signal_blend[ch][bnd] = (
int)((accu + (1<<22)) >> 23);
 
  973                     spx_coord = spx_coord_mant * (1.0f / (1 << 23));
 
  974                     s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
 
  975                     s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
 
  980             s->first_spx_coords[ch] = 1;
 
  986                                     uint8_t *bit_alloc_stages)
 
  989     int fbw_channels = 
s->fbw_channels;
 
  990     int channel_mode = 
s->channel_mode;
 
  996     if (
s->cpl_in_use[
blk]) {
 
  998         int cpl_start_subband, cpl_end_subband;
 
 1014             s->channel_in_cpl[1] = 1;
 
 1015             s->channel_in_cpl[2] = 1;
 
 1017             for (ch = 1; ch <= fbw_channels; ch++)
 
 1026         cpl_start_subband = 
get_bits(bc, 4);
 
 1027         cpl_end_subband = 
s->spx_in_use ? (
s->spx_src_start_freq - 37) / 12 :
 
 1029         if (cpl_start_subband >= cpl_end_subband) {
 
 1031                    cpl_start_subband, cpl_end_subband);
 
 1034         s->start_freq[
CPL_CH] = cpl_start_subband * 12 + 37;
 
 1035         s->end_freq[
CPL_CH]   = cpl_end_subband   * 12 + 37;
 
 1040                               &
s->num_cpl_bands, 
s->cpl_band_sizes,
 
 1041                               s->cpl_band_struct, 
sizeof(
s->cpl_band_struct));
 
 1044         for (ch = 1; ch <= fbw_channels; ch++) {
 
 1045             s->channel_in_cpl[ch] = 0;
 
 1046             s->first_cpl_coords[ch] = 1;
 
 1048         s->first_cpl_leak = 
s->eac3;
 
 1049         s->phase_flags_in_use = 0;
 
 1058     int fbw_channels = 
s->fbw_channels;
 
 1060     int cpl_coords_exist = 0;
 
 1062     for (ch = 1; ch <= fbw_channels; ch++) {
 
 1063         if (
s->channel_in_cpl[ch]) {
 
 1064             if ((
s->eac3 && 
s->first_cpl_coords[ch]) || 
get_bits1(bc)) {
 
 1065                 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
 
 1066                 s->first_cpl_coords[ch] = 0;
 
 1067                 cpl_coords_exist = 1;
 
 1068                 master_cpl_coord = 3 * 
get_bits(bc, 2);
 
 1069                 for (bnd = 0; bnd < 
s->num_cpl_bands; bnd++) {
 
 1072                     if (cpl_coord_exp == 15)
 
 1073                         s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
 
 1075                         s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
 
 1076                     s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
 
 1080                        "be present in block 0\n");
 
 1085             s->first_cpl_coords[ch] = 1;
 
 1090         for (bnd = 0; bnd < 
s->num_cpl_bands; bnd++) {
 
 1091             s->phase_flags[bnd] = 
s->phase_flags_in_use ? 
get_bits1(bc) : 0;
 
 1103     int fbw_channels = 
s->fbw_channels;
 
 1104     int channel_mode = 
s->channel_mode;
 
 1105     int i, bnd, seg, ch, 
ret;
 
 1106     int different_transforms;
 
 1113     different_transforms = 0;
 
 1114     if (
s->block_switch_syntax) {
 
 1115         for (ch = 1; ch <= fbw_channels; ch++) {
 
 1117             if (ch > 1 && 
s->block_switch[ch] != 
s->block_switch[1])
 
 1118                 different_transforms = 1;
 
 1123     if (
s->dither_flag_syntax) {
 
 1124         for (ch = 1; ch <= fbw_channels; ch++) {
 
 1130     i = !
s->channel_mode;
 
 1137             if (range_bits <= 127 || s->drc_scale <= 1.0)
 
 1141         } 
else if (
blk == 0) {
 
 1149         if (
s->spx_in_use) {
 
 1154     if (!
s->eac3 || !
s->spx_in_use) {
 
 1156         for (ch = 1; ch <= fbw_channels; ch++) {
 
 1157             s->channel_uses_spx[ch] = 0;
 
 1158             s->first_spx_coords[ch] = 1;
 
 1170     } 
else if (!
s->eac3) {
 
 1173                    "be present in block 0\n");
 
 1176             s->cpl_in_use[
blk] = 
s->cpl_in_use[
blk-1];
 
 1179     cpl_in_use = 
s->cpl_in_use[
blk];
 
 1190             s->num_rematrixing_bands = 4;
 
 1191             if (cpl_in_use && 
s->start_freq[
CPL_CH] <= 61) {
 
 1192                 s->num_rematrixing_bands -= 1 + (
s->start_freq[
CPL_CH] == 37);
 
 1193             } 
else if (
s->spx_in_use && 
s->spx_src_start_freq <= 61) {
 
 1194                 s->num_rematrixing_bands--;
 
 1196             for (bnd = 0; bnd < 
s->num_rematrixing_bands; bnd++)
 
 1200                    "new rematrixing strategy not present in block 0\n");
 
 1201             s->num_rematrixing_bands = 0;
 
 1206     for (ch = !cpl_in_use; ch <= 
s->channels; ch++) {
 
 1208             s->exp_strategy[
blk][ch] = 
get_bits(gbc, 2 - (ch == 
s->lfe_ch));
 
 1210             bit_alloc_stages[ch] = 3;
 
 1214     for (ch = 1; ch <= fbw_channels; ch++) {
 
 1215         s->start_freq[ch] = 0;
 
 1218             int prev = 
s->end_freq[ch];
 
 1219             if (
s->channel_in_cpl[ch])
 
 1220                 s->end_freq[ch] = 
s->start_freq[
CPL_CH];
 
 1221             else if (
s->channel_uses_spx[ch])
 
 1222                 s->end_freq[ch] = 
s->spx_src_start_freq;
 
 1224                 int bandwidth_code = 
get_bits(gbc, 6);
 
 1225                 if (bandwidth_code > 60) {
 
 1229                 s->end_freq[ch] = bandwidth_code * 3 + 73;
 
 1231             group_size = 3 << (
s->exp_strategy[
blk][ch] - 1);
 
 1232             s->num_exp_groups[ch] = (
s->end_freq[ch] + group_size-4) / group_size;
 
 1233             if (
blk > 0 && 
s->end_freq[ch] != prev)
 
 1243     for (ch = !cpl_in_use; ch <= 
s->channels; ch++) {
 
 1245             s->dexps[ch][0] = 
get_bits(gbc, 4) << !ch;
 
 1247                                  s->num_exp_groups[ch], 
s->dexps[ch][0],
 
 1248                                  &
s->dexps[ch][
s->start_freq[ch]+!!ch])) {
 
 1251             if (ch != 
CPL_CH && ch != 
s->lfe_ch)
 
 1257     if (
s->bit_allocation_syntax) {
 
 1264             for (ch = !cpl_in_use; ch <= 
s->channels; ch++)
 
 1265                 bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 2);
 
 1268                    "be present in block 0\n");
 
 1274     if (!
s->eac3 || !
blk) {
 
 1275         if (
s->snr_offset_strategy && 
get_bits1(gbc)) {
 
 1278             csnr = (
get_bits(gbc, 6) - 15) << 4;
 
 1279             for (
i = ch = !cpl_in_use; ch <= 
s->channels; ch++) {
 
 1281                 if (ch == 
i || 
s->snr_offset_strategy == 2)
 
 1282                     snr = (csnr + 
get_bits(gbc, 4)) << 2;
 
 1284                 if (
blk && 
s->snr_offset[ch] != snr) {
 
 1285                     bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 1);
 
 1287                 s->snr_offset[ch] = snr;
 
 1291                     int prev = 
s->fast_gain[ch];
 
 1294                     if (
blk && prev != 
s->fast_gain[ch])
 
 1295                         bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 2);
 
 1298         } 
else if (!
s->eac3 && !
blk) {
 
 1306         for (ch = !cpl_in_use; ch <= 
s->channels; ch++) {
 
 1307             int prev = 
s->fast_gain[ch];
 
 1310             if (
blk && prev != 
s->fast_gain[ch])
 
 1311                 bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 2);
 
 1313     } 
else if (
s->eac3 && !
blk) {
 
 1314         for (ch = !cpl_in_use; ch <= 
s->channels; ch++)
 
 1330             if (
blk && (fl != 
s->bit_alloc_params.cpl_fast_leak ||
 
 1331                 sl != 
s->bit_alloc_params.cpl_slow_leak)) {
 
 1334             s->bit_alloc_params.cpl_fast_leak = fl;
 
 1335             s->bit_alloc_params.cpl_slow_leak = sl;
 
 1336         } 
else if (!
s->eac3 && !
blk) {
 
 1338                    "be present in block 0\n");
 
 1341         s->first_cpl_leak = 0;
 
 1347         for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
 
 1353             bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 2);
 
 1356         for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
 
 1358                 s->dba_nsegs[ch] = 
get_bits(gbc, 3) + 1;
 
 1359                 for (seg = 0; seg < 
s->dba_nsegs[ch]; seg++) {
 
 1360                     s->dba_offsets[ch][seg] = 
get_bits(gbc, 5);
 
 1361                     s->dba_lengths[ch][seg] = 
get_bits(gbc, 4);
 
 1362                     s->dba_values[ch][seg]  = 
get_bits(gbc, 3);
 
 1365                 bit_alloc_stages[ch] = 
FFMAX(bit_alloc_stages[ch], 2);
 
 1368     } 
else if (
blk == 0) {
 
 1369         for (ch = 0; ch <= 
s->channels; ch++) {
 
 1375     for (ch = !cpl_in_use; ch <= 
s->channels; ch++) {
 
 1376         if (bit_alloc_stages[ch] > 2) {
 
 1379                                       s->start_freq[ch], 
s->end_freq[ch],
 
 1380                                       s->psd[ch], 
s->band_psd[ch]);
 
 1382         if (bit_alloc_stages[ch] > 1) {
 
 1386                                            s->start_freq[ch],  
s->end_freq[ch],
 
 1387                                            s->fast_gain[ch],   (ch == 
s->lfe_ch),
 
 1388                                            s->dba_mode[ch],    
s->dba_nsegs[ch],
 
 1389                                            s->dba_offsets[ch], 
s->dba_lengths[ch],
 
 1390                                            s->dba_values[ch],  
s->mask[ch])) {
 
 1395         if (bit_alloc_stages[ch] > 0) {
 
 1397             const uint8_t *
bap_tab = 
s->channel_uses_aht[ch] ?
 
 1399             s->ac3dsp.bit_alloc_calc_bap(
s->mask[ch], 
s->psd[ch],
 
 1400                                       s->start_freq[ch], 
s->end_freq[ch],
 
 1402                                       s->bit_alloc_params.floor,
 
 1424     for (ch = 1; ch <= 
s->channels; ch++) {
 
 1425         int audio_channel = 0;
 
 1428             audio_channel = 2-ch;
 
 1429         if (
s->heavy_compression && 
s->compression_exists[audio_channel])
 
 1430             gain = 
s->heavy_dynamic_range[audio_channel];
 
 1432             gain = 
s->dynamic_range[audio_channel];
 
 1435         scale_coefs(
s->transform_coeffs[ch], 
s->fixed_coeffs[ch], gain, 256);
 
 1437         if (
s->target_level != 0)
 
 1438           gain = gain * 
s->level_gain[audio_channel];
 
 1439         gain *= 1.0 / 4194304.0f;
 
 1440         s->fmt_conv.int32_to_float_fmul_scalar(
s->transform_coeffs[ch],
 
 1441                                                s->fixed_coeffs[ch], gain, 256);
 
 1446     if (CONFIG_EAC3_DECODER && 
s->spx_in_use) {
 
 1453     downmix_output = 
s->channels != 
s->out_channels &&
 
 1454                      !((
s->output_mode & AC3_OUTPUT_LFEON) &&
 
 1455                      s->fbw_channels == 
s->out_channels);
 
 1456     if (different_transforms) {
 
 1466         if (downmix_output) {
 
 1469                               s->out_channels, 
s->fbw_channels, 256);
 
 1472                               s->out_channels, 
s->fbw_channels, 256);
 
 1476         if (downmix_output) {
 
 1478                                           s->out_channels, 
s->fbw_channels, 256);
 
 1481         if (downmix_output && !
s->downmixed) {
 
 1484                                           s->out_channels, 
s->fbw_channels, 128);
 
 1497                             int *got_frame_ptr, 
AVPacket *avpkt)
 
 1499     const uint8_t *buf = avpkt->
data;
 
 1500     int buf_size, full_buf_size = avpkt->
size;
 
 1504     int skip = 0, got_independent_frame = 0;
 
 1512     s->superframe_size = 0;
 
 1514     buf_size = full_buf_size;
 
 1516     if (i < 0 || i > 10)
 
 1523     if (buf_size >= 2 && 
AV_RB16(buf) == 0x770B) {
 
 1525         int cnt = 
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
 
 1526         s->bdsp.bswap16_buf((uint16_t *) 
s->input_buffer,
 
 1527                             (
const uint16_t *) buf, cnt);
 
 1529         memcpy(
s->input_buffer, buf, 
FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
 
 1534     if (
s->consistent_noise_generation)
 
 1537     buf = 
s->input_buffer;
 
 1563             if (
s->substreamid) {
 
 1565                        "unsupported substream %d: skipping frame\n",
 
 1582         if (
s->frame_size > buf_size) {
 
 1588                        s->frame_size - 2)) {
 
 1600         return FFMIN(full_buf_size, 
s->frame_size);
 
 1604     if (!err || (
s->channels && 
s->out_channels != 
s->channels)) {
 
 1605         s->out_channels = 
s->channels;
 
 1606         s->output_mode  = 
s->channel_mode;
 
 1608             s->output_mode |= AC3_OUTPUT_LFEON;
 
 1609         if (
s->channels > 1 &&
 
 1611             s->out_channels = 1;
 
 1613         } 
else if (
s->channels > 2 &&
 
 1615             s->out_channels = 2;
 
 1619         s->loro_center_mix_level   = 
gain_levels[
s->  center_mix_level];
 
 1620         s->loro_surround_mix_level = 
gain_levels[
s->surround_mix_level];
 
 1624         if (
s->channels != 
s->out_channels && !((
s->output_mode & AC3_OUTPUT_LFEON) &&
 
 1625                 s->fbw_channels == 
s->out_channels)) {
 
 1631     } 
else if (!
s->channels) {
 
 1637     if (
s->output_mode & AC3_OUTPUT_LFEON)
 
 1645     if (
s->bitstream_mode == 0x7 && 
s->channels > 1)
 
 1653         s->outptr[ch] = 
s->output[ch + 
offset];
 
 1655     for (ch = 0; ch < 
s->channels; ch++) {
 
 1656         if (ch < s->out_channels)
 
 1665             for (ch = 0; ch < 
s->out_channels; ch++)
 
 1667         for (ch = 0; ch < 
s->out_channels; ch++)
 
 1669         for (ch = 0; ch < 
s->out_channels; ch++) {
 
 1676     for (ch = 0; ch < 
s->out_channels; ch++)
 
 1680     if (buf_size > 
s->frame_size) {
 
 1684         if (buf_size - 
s->frame_size <= 16) {
 
 1685             skip = buf_size - 
s->frame_size;
 
 1700                 buf += 
s->frame_size;
 
 1701                 buf_size -= 
s->frame_size;
 
 1702                 s->prev_output_mode = 
s->output_mode;
 
 1703                 s->prev_bit_rate = 
s->bit_rate;
 
 1704                 got_independent_frame = 1;
 
 1705                 goto dependent_frame;
 
 1716         avctx->
bit_rate    = 
s->bit_rate + 
s->prev_bit_rate;
 
 1726         extended_channel_map[ch] = ch;
 
 1731         uint64_t channel_layout;
 
 1734         if (
s->prev_output_mode & AC3_OUTPUT_LFEON)
 
 1737         channel_layout = ich_layout;
 
 1738         for (ch = 0; ch < 16; ch++) {
 
 1759                     if (extend >= channel_map_size)
 
 1766                     for (
i = 0; 
i < 64; 
i++) {
 
 1771                             if (extend >= channel_map_size)
 
 1790         int map = extended_channel_map[ch];
 
 1793                s->output_buffer[
map],
 
 1805         s->channel_mode == (
s->output_mode & ~AC3_OUTPUT_LFEON)) {
 
 1811                s->channel_mode == (
s->output_mode & ~AC3_OUTPUT_LFEON)) {
 
 1812         switch (
s->dolby_surround_ex_mode) {
 
 1828         switch (
s->preferred_downmix) {
 
 1846         if (
s->lfe_mix_level_exists)
 
 1855     if (!
s->superframe_size)
 
 1856         return FFMIN(full_buf_size, 
s->frame_size + 
skip);
 
 1858     return FFMIN(full_buf_size, 
s->superframe_size + 
skip);
 
 1875 #define OFFSET(x) offsetof(AC3DecodeContext, x) 
 1876 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)