FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ac3dec.c
Date: 2025-06-23 20:06:14
Exec Total Coverage
Lines: 798 977 81.7%
Functions: 23 23 100.0%
Branches: 543 707 76.8%

Line Branch Exec Source
1 /*
2 * AC-3 Audio Decoder
3 * This code was developed as part of Google Summer of Code 2006.
4 * E-AC-3 support was added as part of Google Summer of Code 2007.
5 *
6 * Copyright (c) 2006 Kartikey Mahendra BHATT (bhattkm at gmail dot com)
7 * Copyright (c) 2007-2008 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
8 * Copyright (c) 2007 Justin Ruggles <justin.ruggles@gmail.com>
9 *
10 * This file is part of FFmpeg.
11 *
12 * FFmpeg is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2.1 of the License, or (at your option) any later version.
16 *
17 * FFmpeg is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with FFmpeg; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 */
26
27 #include "config_components.h"
28
29 #include <stdio.h>
30 #include <stddef.h>
31 #include <math.h>
32 #include <string.h>
33
34 #include "libavutil/channel_layout.h"
35 #include "libavutil/crc.h"
36 #include "libavutil/downmix_info.h"
37 #include "libavutil/intmath.h"
38 #include "libavutil/mem.h"
39 #include "libavutil/opt.h"
40 #include "libavutil/thread.h"
41 #include "bswapdsp.h"
42 #include "ac3_parser_internal.h"
43 #include "ac3dec.h"
44 #include "ac3dec_data.h"
45 #include "ac3defs.h"
46 #include "decode.h"
47 #include "kbdwin.h"
48
49 #if (!USE_FIXED)
50 /** dynamic range table. converts codes to scale factors. */
51 static float dynamic_range_tab[256];
52 float ff_ac3_heavy_dynamic_range_tab[256];
53
54 /*
55 * Initialize tables at runtime.
56 */
57 46 static av_cold void ac3_float_tables_init(void)
58 {
59 /* generate dynamic range table
60 reference: Section 7.7.1 Dynamic Range Control */
61
2/2
✓ Branch 0 taken 11776 times.
✓ Branch 1 taken 46 times.
11822 for (int i = 0; i < 256; i++) {
62 11776 int v = (i >> 5) - ((i >> 7) << 3) - 5;
63 11776 dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0x1F) | 0x20);
64 }
65
66 /* generate compr dynamic range table
67 reference: Section 7.7.2 Heavy Compression */
68
2/2
✓ Branch 0 taken 11776 times.
✓ Branch 1 taken 46 times.
11822 for (int i = 0; i < 256; i++) {
69 11776 int v = (i >> 4) - ((i >> 7) << 4) - 4;
70 11776 ff_ac3_heavy_dynamic_range_tab[i] = powf(2.0f, v) * ((i & 0xF) | 0x10);
71 }
72 46 ff_ac3_init_static();
73 46 }
74 #endif
75
76 260 static void ac3_downmix(AVCodecContext *avctx)
77 {
78 260 AC3DecodeContext *s = avctx->priv_data;
79 260 const AVChannelLayout mono = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
80 260 const AVChannelLayout stereo = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
81
82 /* allow downmixing to stereo or mono */
83
4/4
✓ Branch 0 taken 211 times.
✓ Branch 1 taken 49 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 207 times.
471 if (avctx->ch_layout.nb_channels > 1 &&
84 211 !av_channel_layout_compare(&s->downmix_layout, &mono)) {
85 4 av_channel_layout_uninit(&avctx->ch_layout);
86 4 avctx->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO;
87
4/4
✓ Branch 0 taken 178 times.
✓ Branch 1 taken 78 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 175 times.
434 } else if (avctx->ch_layout.nb_channels > 2 &&
88 178 !av_channel_layout_compare(&s->downmix_layout, &stereo)) {
89 3 av_channel_layout_uninit(&avctx->ch_layout);
90 3 avctx->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
91 }
92 260 }
93
94 /**
95 * AVCodec initialization
96 */
97 101 static av_cold int ac3_decode_init(AVCodecContext *avctx)
98 {
99 101 AC3DecodeContext *s = avctx->priv_data;
100 101 const float scale = 1.0f;
101 int i, ret;
102
103 101 s->avctx = avctx;
104
105
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 101 times.
101 if ((ret = av_tx_init(&s->tx_128, &s->tx_fn_128, IMDCT_TYPE, 1, 128, &scale, 0)))
106 return ret;
107
108
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 101 times.
101 if ((ret = av_tx_init(&s->tx_256, &s->tx_fn_256, IMDCT_TYPE, 1, 256, &scale, 0)))
109 return ret;
110
111 101 AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
112 101 ff_bswapdsp_init(&s->bdsp);
113
114 #if (USE_FIXED)
115 4 s->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT);
116 #else
117 97 ff_fmt_convert_init(&s->fmt_conv);
118 97 s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
119 #endif
120
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 101 times.
101 if (!s->fdsp)
121 return AVERROR(ENOMEM);
122
123 101 ff_ac3dsp_init(&s->ac3dsp);
124 101 av_lfg_init(&s->dith_state, 0);
125
126 if (USE_FIXED)
127 4 avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
128 else
129 97 avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
130
131 101 ac3_downmix(avctx);
132 101 s->downmixed = 1;
133
134
2/2
✓ Branch 0 taken 707 times.
✓ Branch 1 taken 101 times.
808 for (i = 0; i < AC3_MAX_CHANNELS; i++) {
135 707 s->xcfptr[i] = s->transform_coeffs[i];
136 707 s->dlyptr[i] = s->delay[i];
137 }
138
139 #if USE_FIXED
140 4 ff_ac3_init_static();
141 #else
142 static AVOnce init_static_once = AV_ONCE_INIT;
143 97 ff_thread_once(&init_static_once, ac3_float_tables_init);
144 #endif
145
146 101 return 0;
147 }
148
149 1 static av_cold void ac3_decode_flush(AVCodecContext *avctx)
150 {
151 1 AC3DecodeContext *s = avctx->priv_data;
152
153 1 memset(&s->frame_type, 0, sizeof(*s) - offsetof(AC3DecodeContext, frame_type));
154
155 1 AC3_RENAME(ff_kbd_window_init)(s->window, 5.0, 256);
156 1 av_lfg_init(&s->dith_state, 0);
157 1 }
158
159 /**
160 * Common function to parse AC-3 or E-AC-3 frame header
161 */
162 2474 static int parse_frame_header(AC3DecodeContext *s)
163 {
164 AC3HeaderInfo hdr;
165 int err;
166
167 2474 err = ff_ac3_parse_header(&s->gbc, &hdr);
168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2474 times.
2474 if (err)
169 return err;
170
171 /* get decoding parameters from header info */
172 2474 s->bit_alloc_params.sr_code = hdr.sr_code;
173 2474 s->bitstream_id = hdr.bitstream_id;
174 2474 s->bitstream_mode = hdr.bitstream_mode;
175 2474 s->channel_mode = hdr.channel_mode;
176 2474 s->lfe_on = hdr.lfe_on;
177 2474 s->bit_alloc_params.sr_shift = hdr.sr_shift;
178 2474 s->sample_rate = hdr.sample_rate;
179 2474 s->bit_rate = hdr.bit_rate;
180 2474 s->channels = hdr.channels;
181 2474 s->fbw_channels = s->channels - s->lfe_on;
182 2474 s->lfe_ch = s->fbw_channels + 1;
183 2474 s->frame_size = hdr.frame_size;
184 2474 s->superframe_size += hdr.frame_size;
185 2474 s->preferred_downmix = AC3_DMIXMOD_NOTINDICATED;
186
2/2
✓ Branch 0 taken 1270 times.
✓ Branch 1 taken 1204 times.
2474 if (hdr.bitstream_id <= 10) {
187 1270 s->center_mix_level = hdr.center_mix_level;
188 1270 s->surround_mix_level = hdr.surround_mix_level;
189 }
190 2474 s->center_mix_level_ltrt = 4; // -3.0dB
191 2474 s->surround_mix_level_ltrt = 4; // -3.0dB
192 2474 s->lfe_mix_level_exists = 0;
193 2474 s->num_blocks = hdr.num_blocks;
194 2474 s->frame_type = hdr.frame_type;
195 2474 s->substreamid = hdr.substreamid;
196 2474 s->dolby_surround_mode = hdr.dolby_surround_mode;
197 2474 s->dolby_surround_ex_mode = AC3_DSUREXMOD_NOTINDICATED;
198 2474 s->dolby_headphone_mode = AC3_DHEADPHONMOD_NOTINDICATED;
199
200
2/2
✓ Branch 0 taken 602 times.
✓ Branch 1 taken 1872 times.
2474 if (s->lfe_on) {
201 602 s->start_freq[s->lfe_ch] = 0;
202 602 s->end_freq[s->lfe_ch] = 7;
203 602 s->num_exp_groups[s->lfe_ch] = 2;
204 602 s->channel_in_cpl[s->lfe_ch] = 0;
205 }
206
207
2/2
✓ Branch 0 taken 1270 times.
✓ Branch 1 taken 1204 times.
2474 if (s->bitstream_id <= 10) {
208 1270 s->eac3 = 0;
209 1270 s->snr_offset_strategy = 2;
210 1270 s->block_switch_syntax = 1;
211 1270 s->dither_flag_syntax = 1;
212 1270 s->bit_allocation_syntax = 1;
213 1270 s->fast_gain_syntax = 0;
214 1270 s->first_cpl_leak = 0;
215 1270 s->dba_syntax = 1;
216 1270 s->skip_syntax = 1;
217 1270 memset(s->channel_uses_aht, 0, sizeof(s->channel_uses_aht));
218 /* volume control params */
219
3/4
✓ Branch 0 taken 2540 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1270 times.
✓ Branch 3 taken 1270 times.
2540 for (int i = 0; i < (s->channel_mode ? 1 : 2); i++) {
220 1270 s->dialog_normalization[i] = hdr.dialog_normalization[i];
221
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1270 times.
1270 if (s->dialog_normalization[i] == 0) {
222 s->dialog_normalization[i] = -31;
223 }
224
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1270 times.
1270 if (s->target_level != 0) {
225 s->level_gain[i] = powf(2.0f,
226 (float)(s->target_level - s->dialog_normalization[i])/6.0f);
227 }
228 1270 s->compression_exists[i] = hdr.compression_exists[i];
229
2/2
✓ Branch 0 taken 988 times.
✓ Branch 1 taken 282 times.
1270 if (s->compression_exists[i]) {
230 988 s->heavy_dynamic_range[i] = AC3_HEAVY_RANGE(hdr.heavy_dynamic_range[i]);
231 }
232 }
233 1270 return 0;
234 } else if (CONFIG_EAC3_DECODER) {
235 1204 s->eac3 = 1;
236 1204 return ff_eac3_parse_header(s, &hdr);
237 } else {
238 av_log(s->avctx, AV_LOG_ERROR, "E-AC-3 support not compiled in\n");
239 return AVERROR(ENOSYS);
240 }
241 }
242
243 /**
244 * Set stereo downmixing coefficients based on frame header info.
245 * reference: Section 7.8.2 Downmixing Into Two Channels
246 */
247 417 static int set_downmix_coeffs(AC3DecodeContext *s)
248 {
249 int i;
250 417 float cmix = ff_ac3_gain_levels[s-> center_mix_level];
251 417 float smix = ff_ac3_gain_levels[s->surround_mix_level];
252 float norm0, norm1;
253 float downmix_coeffs[2][AC3_MAX_CHANNELS];
254
255
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 403 times.
417 if (!s->downmix_coeffs[0]) {
256 14 s->downmix_coeffs[0] = av_malloc_array(2 * AC3_MAX_CHANNELS,
257 sizeof(**s->downmix_coeffs));
258
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14 times.
14 if (!s->downmix_coeffs[0])
259 return AVERROR(ENOMEM);
260 14 s->downmix_coeffs[1] = s->downmix_coeffs[0] + AC3_MAX_CHANNELS;
261 }
262
263
2/2
✓ Branch 0 taken 1896 times.
✓ Branch 1 taken 417 times.
2313 for (i = 0; i < s->fbw_channels; i++) {
264 1896 downmix_coeffs[0][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][0]];
265 1896 downmix_coeffs[1][i] = ff_ac3_gain_levels[ff_ac3_default_coeffs[s->channel_mode][i][1]];
266 }
267
2/4
✓ Branch 0 taken 417 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 417 times.
✗ Branch 3 not taken.
417 if (s->channel_mode > 1 && s->channel_mode & 1) {
268 417 downmix_coeffs[0][1] = downmix_coeffs[1][1] = cmix;
269 }
270
3/4
✓ Branch 0 taken 417 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 189 times.
✓ Branch 3 taken 228 times.
417 if (s->channel_mode == AC3_CHMODE_2F1R || s->channel_mode == AC3_CHMODE_3F1R) {
271 189 int nf = s->channel_mode - 2;
272 189 downmix_coeffs[0][nf] = downmix_coeffs[1][nf] = smix * LEVEL_MINUS_3DB;
273 }
274
3/4
✓ Branch 0 taken 417 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 228 times.
✓ Branch 3 taken 189 times.
417 if (s->channel_mode == AC3_CHMODE_2F2R || s->channel_mode == AC3_CHMODE_3F2R) {
275 228 int nf = s->channel_mode - 4;
276 228 downmix_coeffs[0][nf] = downmix_coeffs[1][nf+1] = smix;
277 }
278
279 /* renormalize */
280 417 norm0 = norm1 = 0.0;
281
2/2
✓ Branch 0 taken 1896 times.
✓ Branch 1 taken 417 times.
2313 for (i = 0; i < s->fbw_channels; i++) {
282 1896 norm0 += downmix_coeffs[0][i];
283 1896 norm1 += downmix_coeffs[1][i];
284 }
285 417 norm0 = 1.0f / norm0;
286 417 norm1 = 1.0f / norm1;
287
2/2
✓ Branch 0 taken 1896 times.
✓ Branch 1 taken 417 times.
2313 for (i = 0; i < s->fbw_channels; i++) {
288 1896 downmix_coeffs[0][i] *= norm0;
289 1896 downmix_coeffs[1][i] *= norm1;
290 }
291
292
2/2
✓ Branch 0 taken 240 times.
✓ Branch 1 taken 177 times.
417 if (s->output_mode == AC3_CHMODE_MONO) {
293
2/2
✓ Branch 0 taken 1074 times.
✓ Branch 1 taken 240 times.
1314 for (i = 0; i < s->fbw_channels; i++)
294 1074 downmix_coeffs[0][i] = (downmix_coeffs[0][i] +
295 1074 downmix_coeffs[1][i]) * LEVEL_MINUS_3DB;
296 }
297
2/2
✓ Branch 0 taken 1896 times.
✓ Branch 1 taken 417 times.
2313 for (i = 0; i < s->fbw_channels; i++) {
298 1896 s->downmix_coeffs[0][i] = FIXR12(downmix_coeffs[0][i]);
299 1896 s->downmix_coeffs[1][i] = FIXR12(downmix_coeffs[1][i]);
300 }
301
302 417 return 0;
303 }
304
305 /**
306 * Decode the grouped exponents according to exponent strategy.
307 * reference: Section 7.1.3 Exponent Decoding
308 */
309 13652 static int decode_exponents(AC3DecodeContext *s,
310 GetBitContext *gbc, int exp_strategy, int ngrps,
311 uint8_t absexp, int8_t *dexps)
312 {
313 int i, j, grp, group_size;
314 int dexp[256];
315 int expacc, prevexp;
316
317 /* unpack groups */
318 13652 group_size = exp_strategy + (exp_strategy == EXP_D45);
319
2/2
✓ Branch 0 taken 475534 times.
✓ Branch 1 taken 13652 times.
489186 for (grp = 0, i = 0; grp < ngrps; grp++) {
320 475534 expacc = get_bits(gbc, 7);
321
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 475534 times.
475534 if (expacc >= 125) {
322 av_log(s->avctx, AV_LOG_ERROR, "expacc %d is out-of-range\n", expacc);
323 return AVERROR_INVALIDDATA;
324 }
325 475534 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][0];
326 475534 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][1];
327 475534 dexp[i++] = ff_ac3_ungroup_3_in_7_bits_tab[expacc][2];
328 }
329
330 /* convert to absolute exps and expand groups */
331 13652 prevexp = absexp;
332
2/2
✓ Branch 0 taken 1426602 times.
✓ Branch 1 taken 13652 times.
1440254 for (i = 0, j = 0; i < ngrps * 3; i++) {
333 1426602 prevexp += dexp[i] - 2;
334
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1426602 times.
1426602 if (prevexp > 24U) {
335 av_log(s->avctx, AV_LOG_ERROR, "exponent %d is out-of-range\n", prevexp);
336 return AVERROR_INVALIDDATA;
337 }
338
3/4
✓ Branch 0 taken 104358 times.
✓ Branch 1 taken 170280 times.
✓ Branch 2 taken 1151964 times.
✗ Branch 3 not taken.
1426602 switch (group_size) {
339 104358 case 4: dexps[j++] = prevexp;
340 104358 dexps[j++] = prevexp;
341 274638 case 2: dexps[j++] = prevexp;
342 1426602 case 1: dexps[j++] = prevexp;
343 }
344 }
345 13652 return 0;
346 }
347
348 /**
349 * Generate transform coefficients for each coupled channel in the coupling
350 * range using the coupling coefficients and coupling coordinates.
351 * reference: Section 7.4.3 Coupling Coordinate Format
352 */
353 7490 static void calc_transform_coeffs_cpl(AC3DecodeContext *s)
354 {
355 int bin, band, ch;
356
357 7490 bin = s->start_freq[CPL_CH];
358
2/2
✓ Branch 0 taken 26504 times.
✓ Branch 1 taken 7490 times.
33994 for (band = 0; band < s->num_cpl_bands; band++) {
359 26504 int band_start = bin;
360 26504 int band_end = bin + s->cpl_band_sizes[band];
361
2/2
✓ Branch 0 taken 63322 times.
✓ Branch 1 taken 26504 times.
89826 for (ch = 1; ch <= s->fbw_channels; ch++) {
362
1/2
✓ Branch 0 taken 63322 times.
✗ Branch 1 not taken.
63322 if (s->channel_in_cpl[ch]) {
363 63322 int cpl_coord = s->cpl_coords[ch][band] << 5;
364
2/2
✓ Branch 0 taken 1444536 times.
✓ Branch 1 taken 63322 times.
1507858 for (bin = band_start; bin < band_end; bin++) {
365 1444536 s->fixed_coeffs[ch][bin] =
366 1444536 MULH(s->fixed_coeffs[CPL_CH][bin] * (1 << 4), cpl_coord);
367 }
368
3/4
✓ Branch 0 taken 26504 times.
✓ Branch 1 taken 36818 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 26504 times.
63322 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];
371 }
372 }
373 }
374 26504 bin = band_end;
375 }
376 7490 }
377
378 /**
379 * Grouped mantissas for 3-level 5-level and 11-level quantization
380 */
381 typedef struct mant_groups {
382 int b1_mant[2];
383 int b2_mant[2];
384 int b4_mant;
385 int b1;
386 int b2;
387 int b4;
388 } mant_groups;
389
390 /**
391 * Decode the transform coefficients for a particular channel
392 * reference: Section 7.3 Quantization and Decoding of Mantissas
393 */
394 48500 static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
395 {
396 48500 int start_freq = s->start_freq[ch_index];
397 48500 int end_freq = s->end_freq[ch_index];
398 48500 uint8_t *baps = s->bap[ch_index];
399 48500 int8_t *exps = s->dexps[ch_index];
400 48500 int32_t *coeffs = s->fixed_coeffs[ch_index];
401
4/4
✓ Branch 0 taken 41010 times.
✓ Branch 1 taken 7490 times.
✓ Branch 2 taken 38116 times.
✓ Branch 3 taken 2894 times.
48500 int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index];
402 48500 GetBitContext *gbc = &s->gbc;
403 int freq;
404
405
2/2
✓ Branch 0 taken 6785730 times.
✓ Branch 1 taken 48500 times.
6834230 for (freq = start_freq; freq < end_freq; freq++) {
406 6785730 int bap = baps[freq];
407 int mantissa;
408
7/7
✓ Branch 0 taken 2097029 times.
✓ Branch 1 taken 1400230 times.
✓ Branch 2 taken 644291 times.
✓ Branch 3 taken 750228 times.
✓ Branch 4 taken 489122 times.
✓ Branch 5 taken 404173 times.
✓ Branch 6 taken 1000657 times.
6785730 switch (bap) {
409 2097029 case 0:
410 /* random noise with approximate range of -0.707 to 0.707 */
411
2/2
✓ Branch 0 taken 2092722 times.
✓ Branch 1 taken 4307 times.
2097029 if (dither)
412 2092722 mantissa = (((av_lfg_get(&s->dith_state)>>8)*181)>>8) - 5931008;
413 else
414 4307 mantissa = 0;
415 2097029 break;
416 1400230 case 1:
417
2/2
✓ Branch 0 taken 929614 times.
✓ Branch 1 taken 470616 times.
1400230 if (m->b1) {
418 929614 m->b1--;
419 929614 mantissa = m->b1_mant[m->b1];
420 } else {
421 470616 int bits = get_bits(gbc, 5);
422 470616 mantissa = ff_ac3_bap1_mantissas[bits][0];
423 470616 m->b1_mant[1] = ff_ac3_bap1_mantissas[bits][1];
424 470616 m->b1_mant[0] = ff_ac3_bap1_mantissas[bits][2];
425 470616 m->b1 = 2;
426 }
427 1400230 break;
428 644291 case 2:
429
2/2
✓ Branch 0 taken 425873 times.
✓ Branch 1 taken 218418 times.
644291 if (m->b2) {
430 425873 m->b2--;
431 425873 mantissa = m->b2_mant[m->b2];
432 } else {
433 218418 int bits = get_bits(gbc, 7);
434 218418 mantissa = ff_ac3_bap2_mantissas[bits][0];
435 218418 m->b2_mant[1] = ff_ac3_bap2_mantissas[bits][1];
436 218418 m->b2_mant[0] = ff_ac3_bap2_mantissas[bits][2];
437 218418 m->b2 = 2;
438 }
439 644291 break;
440 750228 case 3:
441 750228 mantissa = ff_ac3_bap3_mantissas[get_bits(gbc, 3)];
442 750228 break;
443 489122 case 4:
444
2/2
✓ Branch 0 taken 241512 times.
✓ Branch 1 taken 247610 times.
489122 if (m->b4) {
445 241512 m->b4 = 0;
446 241512 mantissa = m->b4_mant;
447 } else {
448 247610 int bits = get_bits(gbc, 7);
449 247610 mantissa = ff_ac3_bap4_mantissas[bits][0];
450 247610 m->b4_mant = ff_ac3_bap4_mantissas[bits][1];
451 247610 m->b4 = 1;
452 }
453 489122 break;
454 404173 case 5:
455 404173 mantissa = ff_ac3_bap5_mantissas[get_bits(gbc, 4)];
456 404173 break;
457 1000657 default: /* 6 to 15 */
458 /* Shift mantissa and sign-extend it. */
459
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1000657 times.
1000657 if (bap > 15) {
460 av_log(s->avctx, AV_LOG_ERROR, "bap %d is invalid in plain AC-3\n", bap);
461 bap = 15;
462 }
463 1000657 mantissa = (unsigned)get_sbits(gbc, ff_ac3_quantization_tab[bap]) << (24 - ff_ac3_quantization_tab[bap]);
464 1000657 break;
465 }
466 6785730 coeffs[freq] = mantissa >> exps[freq];
467 }
468 48500 }
469
470 /**
471 * Remove random dithering from coupling range coefficients with zero-bit
472 * mantissas for coupled channels which do not use dithering.
473 * reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0)
474 */
475 14312 static void remove_dithering(AC3DecodeContext *s) {
476 int ch, i;
477
478
2/2
✓ Branch 0 taken 42814 times.
✓ Branch 1 taken 14312 times.
57126 for (ch = 1; ch <= s->fbw_channels; ch++) {
479
3/4
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 42802 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
42814 if (!s->dither_flag[ch] && s->channel_in_cpl[ch]) {
480 for (i = s->start_freq[CPL_CH]; i < s->end_freq[CPL_CH]; i++) {
481 if (!s->bap[CPL_CH][i])
482 s->fixed_coeffs[ch][i] = 0;
483 }
484 }
485 }
486 14312 }
487
488 53396 static inline void decode_transform_coeffs_ch(AC3DecodeContext *s, int blk,
489 int ch, mant_groups *m)
490 {
491
2/2
✓ Branch 0 taken 48500 times.
✓ Branch 1 taken 4896 times.
53396 if (!s->channel_uses_aht[ch]) {
492 48500 ac3_decode_transform_coeffs_ch(s, ch, m);
493 } else {
494 /* if AHT is used, mantissas for all blocks are encoded in the first
495 block of the frame. */
496 int bin;
497
2/2
✓ Branch 0 taken 816 times.
✓ Branch 1 taken 4080 times.
4896 if (CONFIG_EAC3_DECODER && !blk)
498 816 ff_eac3_decode_transform_coeffs_aht_ch(s, ch);
499
2/2
✓ Branch 0 taken 599220 times.
✓ Branch 1 taken 4896 times.
604116 for (bin = s->start_freq[ch]; bin < s->end_freq[ch]; bin++) {
500 599220 s->fixed_coeffs[ch][bin] = s->pre_mantissa[ch][bin][blk] >> s->dexps[ch][bin];
501 }
502 }
503 53396 }
504
505 /**
506 * Decode the transform coefficients.
507 */
508 14312 static inline void decode_transform_coeffs(AC3DecodeContext *s, int blk)
509 {
510 int ch, end;
511 14312 int got_cplchan = 0;
512 mant_groups m;
513
514 14312 m.b1 = m.b2 = m.b4 = 0;
515
516
2/2
✓ Branch 0 taken 45906 times.
✓ Branch 1 taken 14312 times.
60218 for (ch = 1; ch <= s->channels; ch++) {
517 /* transform coefficients for full-bandwidth channel */
518 45906 decode_transform_coeffs_ch(s, blk, ch, &m);
519 /* transform coefficients for coupling channel come right after the
520 coefficients for the first coupled channel*/
521
2/2
✓ Branch 0 taken 20146 times.
✓ Branch 1 taken 25760 times.
45906 if (s->channel_in_cpl[ch]) {
522
2/2
✓ Branch 0 taken 7490 times.
✓ Branch 1 taken 12656 times.
20146 if (!got_cplchan) {
523 7490 decode_transform_coeffs_ch(s, blk, CPL_CH, &m);
524 7490 calc_transform_coeffs_cpl(s);
525 7490 got_cplchan = 1;
526 }
527 20146 end = s->end_freq[CPL_CH];
528 } else {
529 25760 end = s->end_freq[ch];
530 }
531 do
532 3490170 s->fixed_coeffs[ch][end] = 0;
533
2/2
✓ Branch 0 taken 3444264 times.
✓ Branch 1 taken 45906 times.
3490170 while (++end < 256);
534 }
535
536 /* zero the dithered coefficients for appropriate channels */
537 14312 remove_dithering(s);
538 14312 }
539
540 /**
541 * Stereo rematrixing.
542 * reference: Section 7.5.4 Rematrixing : Decoding Technique
543 */
544 8736 static void do_rematrixing(AC3DecodeContext *s)
545 {
546 int bnd, i;
547 int end, bndend;
548
549 8736 end = FFMIN(s->end_freq[1], s->end_freq[2]);
550
551
2/2
✓ Branch 0 taken 34932 times.
✓ Branch 1 taken 8736 times.
43668 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) {
552
2/2
✓ Branch 0 taken 23810 times.
✓ Branch 1 taken 11122 times.
34932 if (s->rematrixing_flags[bnd]) {
553 23810 bndend = FFMIN(end, ff_ac3_rematrix_band_tab[bnd + 1]);
554
2/2
✓ Branch 0 taken 626496 times.
✓ Branch 1 taken 23810 times.
650306 for (i = ff_ac3_rematrix_band_tab[bnd]; i < bndend; i++) {
555 626496 int tmp0 = s->fixed_coeffs[1][i];
556 626496 s->fixed_coeffs[1][i] += s->fixed_coeffs[2][i];
557 626496 s->fixed_coeffs[2][i] = tmp0 - s->fixed_coeffs[2][i];
558 }
559 }
560 }
561 8736 }
562
563 /**
564 * Inverse MDCT Transform.
565 * Convert frequency domain coefficients to time-domain audio samples.
566 * reference: Section 7.9.4 Transformation Equations
567 */
568 14312 static inline void do_imdct(AC3DecodeContext *s, int channels, int offset)
569 {
570 int ch;
571
572
2/2
✓ Branch 0 taken 36842 times.
✓ Branch 1 taken 14312 times.
51154 for (ch = 1; ch <= channels; ch++) {
573
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 36836 times.
36842 if (s->block_switch[ch]) {
574 int i;
575 6 INTFLOAT *x = s->tmp_output + 128;
576
2/2
✓ Branch 0 taken 768 times.
✓ Branch 1 taken 6 times.
774 for (i = 0; i < 128; i++)
577 768 x[i] = s->transform_coeffs[ch][2 * i];
578 6 s->tx_fn_128(s->tx_128, s->tmp_output, x, sizeof(INTFLOAT));
579 #if USE_FIXED
580 2 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
581 2 s->tmp_output, s->window, 128, 8);
582 #else
583 4 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
584 4 s->tmp_output, s->window, 128);
585 #endif
586
2/2
✓ Branch 0 taken 768 times.
✓ Branch 1 taken 6 times.
774 for (i = 0; i < 128; i++)
587 768 x[i] = s->transform_coeffs[ch][2 * i + 1];
588 6 s->tx_fn_128(s->tx_128, s->delay[ch - 1 + offset], x, sizeof(INTFLOAT));
589 } else {
590 36836 s->tx_fn_256(s->tx_256, s->tmp_output, s->transform_coeffs[ch], sizeof(INTFLOAT));
591 #if USE_FIXED
592 2923 s->fdsp->vector_fmul_window_scaled(s->outptr[ch - 1], s->delay[ch - 1 + offset],
593 2923 s->tmp_output, s->window, 128, 8);
594 #else
595 33913 s->fdsp->vector_fmul_window(s->outptr[ch - 1], s->delay[ch - 1 + offset],
596 33913 s->tmp_output, s->window, 128);
597 #endif
598 36836 memcpy(s->delay[ch - 1 + offset], s->tmp_output + 128, 128 * sizeof(INTFLOAT));
599 }
600 }
601 14312 }
602
603 /**
604 * Upmix delay samples from stereo to original channel layout.
605 */
606 6 static void ac3_upmix_delay(AC3DecodeContext *s)
607 {
608 6 int channel_data_size = sizeof(s->delay[0]);
609
2/7
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
6 switch (s->channel_mode) {
610 2 case AC3_CHMODE_DUALMONO:
611 case AC3_CHMODE_STEREO:
612 /* upmix mono to stereo */
613 2 memcpy(s->delay[1], s->delay[0], channel_data_size);
614 2 break;
615 case AC3_CHMODE_2F2R:
616 memset(s->delay[3], 0, channel_data_size);
617 case AC3_CHMODE_2F1R:
618 memset(s->delay[2], 0, channel_data_size);
619 break;
620 case AC3_CHMODE_3F2R:
621 memset(s->delay[4], 0, channel_data_size);
622 4 case AC3_CHMODE_3F1R:
623 4 memset(s->delay[3], 0, channel_data_size);
624 4 case AC3_CHMODE_3F:
625 4 memcpy(s->delay[2], s->delay[1], channel_data_size);
626 4 memset(s->delay[1], 0, channel_data_size);
627 4 break;
628 }
629 6 }
630
631 /**
632 * Decode band structure for coupling, spectral extension, or enhanced coupling.
633 * The band structure defines how many subbands are in each band. For each
634 * subband in the range, 1 means it is combined with the previous band, and 0
635 * means that it starts a new band.
636 *
637 * @param[in] gbc bit reader context
638 * @param[in] blk block number
639 * @param[in] eac3 flag to indicate E-AC-3
640 * @param[in] ecpl flag to indicate enhanced coupling
641 * @param[in] start_subband subband number for start of range
642 * @param[in] end_subband subband number for end of range
643 * @param[in] default_band_struct default band structure table
644 * @param[out] num_bands number of bands (optionally NULL)
645 * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
646 * @param[in,out] band_struct current band structure
647 */
648 1791 static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
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)
653 {
654 1791 int subbnd, bnd, n_subbands, n_bands=0;
655 uint8_t bnd_sz[22];
656
657 1791 n_subbands = end_subband - start_subband;
658
659
1/2
✓ Branch 0 taken 1791 times.
✗ Branch 1 not taken.
1791 if (!blk)
660 1791 memcpy(band_struct, default_band_struct, band_struct_size);
661
662
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1791 times.
1791 av_assert0(band_struct_size >= start_subband + n_subbands);
663
664 1791 band_struct += start_subband + 1;
665
666 /* decode band structure from bitstream or use default */
667
4/4
✓ Branch 0 taken 947 times.
✓ Branch 1 taken 844 times.
✓ Branch 3 taken 542 times.
✓ Branch 4 taken 405 times.
1791 if (!eac3 || get_bits1(gbc)) {
668
2/2
✓ Branch 0 taken 5232 times.
✓ Branch 1 taken 1386 times.
6618 for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
669 5232 band_struct[subbnd] = get_bits1(gbc);
670 }
671 }
672
673 /* calculate number of bands and band sizes based on band structure.
674 note that the first 4 subbands in enhanced coupling span only 6 bins
675 instead of 12. */
676
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1791 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1791 if (num_bands || band_sizes ) {
677 1791 n_bands = n_subbands;
678
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1791 times.
1791 bnd_sz[0] = ecpl ? 6 : 12;
679
2/2
✓ Branch 0 taken 7376 times.
✓ Branch 1 taken 1791 times.
9167 for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
680
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 7376 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
7376 int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
681
2/2
✓ Branch 0 taken 3519 times.
✓ Branch 1 taken 3857 times.
7376 if (band_struct[subbnd - 1]) {
682 3519 n_bands--;
683 3519 bnd_sz[bnd] += subbnd_size;
684 } else {
685 3857 bnd_sz[++bnd] = subbnd_size;
686 }
687 }
688 }
689
690 /* set optional output params */
691
1/2
✓ Branch 0 taken 1791 times.
✗ Branch 1 not taken.
1791 if (num_bands)
692 1791 *num_bands = n_bands;
693
1/2
✓ Branch 0 taken 1791 times.
✗ Branch 1 not taken.
1791 if (band_sizes)
694 1791 memcpy(band_sizes, bnd_sz, n_bands);
695 1791 }
696
697 542 static inline int spx_strategy(AC3DecodeContext *s, int blk)
698 {
699 542 GetBitContext *bc = &s->gbc;
700 int dst_start_freq, dst_end_freq, src_start_freq,
701 start_subband, end_subband;
702
703 /* determine which channels use spx */
704
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 542 times.
542 if (s->channel_mode == AC3_CHMODE_MONO) {
705 s->channel_uses_spx[1] = 1;
706 } else {
707 542 unsigned channel_uses_spx = get_bits(bc, s->fbw_channels);
708
2/2
✓ Branch 0 taken 1228 times.
✓ Branch 1 taken 542 times.
1770 for (int ch = s->fbw_channels; ch >= 1; --ch) {
709 1228 s->channel_uses_spx[ch] = channel_uses_spx & 1;
710 1228 channel_uses_spx >>= 1;
711 }
712 }
713
714 /* get the frequency bins of the spx copy region and the spx start
715 and end subbands */
716 542 dst_start_freq = get_bits(bc, 2);
717 542 start_subband = get_bits(bc, 3) + 2;
718
2/2
✓ Branch 0 taken 494 times.
✓ Branch 1 taken 48 times.
542 if (start_subband > 7)
719 494 start_subband += start_subband - 7;
720 542 end_subband = get_bits(bc, 3) + 5;
721 #if USE_FIXED
722 s->spx_dst_end_freq = end_freq_inv_tab[end_subband-5];
723 #endif
724
1/2
✓ Branch 0 taken 542 times.
✗ Branch 1 not taken.
542 if (end_subband > 7)
725 542 end_subband += end_subband - 7;
726 542 dst_start_freq = dst_start_freq * 12 + 25;
727 542 src_start_freq = start_subband * 12 + 25;
728 542 dst_end_freq = end_subband * 12 + 25;
729
730 /* check validity of spx ranges */
731
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 542 times.
542 if (start_subband >= end_subband) {
732 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
733 "range (%d >= %d)\n", start_subband, end_subband);
734 return AVERROR_INVALIDDATA;
735 }
736
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 542 times.
542 if (dst_start_freq >= src_start_freq) {
737 av_log(s->avctx, AV_LOG_ERROR, "invalid spectral extension "
738 "copy start bin (%d >= %d)\n", dst_start_freq, src_start_freq);
739 return AVERROR_INVALIDDATA;
740 }
741
742 542 s->spx_dst_start_freq = dst_start_freq;
743 542 s->spx_src_start_freq = src_start_freq;
744 if (!USE_FIXED)
745 542 s->spx_dst_end_freq = dst_end_freq;
746
747 542 decode_band_structure(bc, blk, s->eac3, 0,
748 start_subband, end_subband,
749 ff_eac3_default_spx_band_struct,
750 &s->num_spx_bands,
751 542 s->spx_band_sizes,
752 542 s->spx_band_struct, sizeof(s->spx_band_struct));
753 542 return 0;
754 }
755
756 3252 static inline void spx_coordinates(AC3DecodeContext *s)
757 {
758 3252 GetBitContext *bc = &s->gbc;
759 3252 int fbw_channels = s->fbw_channels;
760 int ch, bnd;
761
762
2/2
✓ Branch 0 taken 7368 times.
✓ Branch 1 taken 3252 times.
10620 for (ch = 1; ch <= fbw_channels; ch++) {
763
1/2
✓ Branch 0 taken 7368 times.
✗ Branch 1 not taken.
7368 if (s->channel_uses_spx[ch]) {
764
4/4
✓ Branch 0 taken 6140 times.
✓ Branch 1 taken 1228 times.
✓ Branch 3 taken 739 times.
✓ Branch 4 taken 5401 times.
7368 if (s->first_spx_coords[ch] || get_bits1(bc)) {
765 INTFLOAT spx_blend;
766 int bin, master_spx_coord;
767
768 1967 s->first_spx_coords[ch] = 0;
769 1967 spx_blend = AC3_SPX_BLEND(get_bits(bc, 5));
770 1967 master_spx_coord = get_bits(bc, 2) * 3;
771
772 1967 bin = s->spx_src_start_freq;
773
2/2
✓ Branch 0 taken 4933 times.
✓ Branch 1 taken 1967 times.
6900 for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
774 4933 int bandsize = s->spx_band_sizes[bnd];
775 int spx_coord_exp, spx_coord_mant;
776 INTFLOAT nratio, sblend, nblend;
777 #if USE_FIXED
778 /* calculate blending factors */
779 int64_t accu = ((bin << 23) + (bandsize << 22))
780 * (int64_t)s->spx_dst_end_freq;
781 nratio = (int)(accu >> 32);
782 nratio -= spx_blend << 18;
783
784 if (nratio < 0) {
785 nblend = 0;
786 sblend = 0x800000;
787 } else if (nratio > 0x7fffff) {
788 nblend = 14529495; // sqrt(3) in FP.23
789 sblend = 0;
790 } else {
791 nblend = fixed_sqrt(nratio, 23);
792 accu = (int64_t)nblend * 1859775393;
793 nblend = (int)((accu + (1<<29)) >> 30);
794 sblend = fixed_sqrt(0x800000 - nratio, 23);
795 }
796 #else
797 float spx_coord;
798
799 /* calculate blending factors */
800 4933 nratio = ((float)((bin + (bandsize >> 1))) / s->spx_dst_end_freq) - spx_blend;
801 4933 nratio = av_clipf(nratio, 0.0f, 1.0f);
802 4933 nblend = sqrtf(3.0f * nratio); // noise is scaled by sqrt(3)
803 // to give unity variance
804 4933 sblend = sqrtf(1.0f - nratio);
805 #endif
806 4933 bin += bandsize;
807
808 /* decode spx coordinates */
809 4933 spx_coord_exp = get_bits(bc, 4);
810 4933 spx_coord_mant = get_bits(bc, 2);
811
2/2
✓ Branch 0 taken 718 times.
✓ Branch 1 taken 4215 times.
4933 if (spx_coord_exp == 15) spx_coord_mant <<= 1;
812 4215 else spx_coord_mant += 4;
813 4933 spx_coord_mant <<= (25 - spx_coord_exp - master_spx_coord);
814
815 /* multiply noise and signal blending factors by spx coordinate */
816 #if USE_FIXED
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);
821 #else
822 4933 spx_coord = spx_coord_mant * (1.0f / (1 << 23));
823 4933 s->spx_noise_blend [ch][bnd] = nblend * spx_coord;
824 4933 s->spx_signal_blend[ch][bnd] = sblend * spx_coord;
825 #endif
826 }
827 }
828 } else {
829 s->first_spx_coords[ch] = 1;
830 }
831 }
832 3252 }
833
834 2469 static inline int coupling_strategy(AC3DecodeContext *s, int blk,
835 uint8_t *bit_alloc_stages)
836 {
837 2469 GetBitContext *bc = &s->gbc;
838 2469 int fbw_channels = s->fbw_channels;
839 2469 int channel_mode = s->channel_mode;
840 int ch;
841
842 2469 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
843
2/2
✓ Branch 0 taken 1265 times.
✓ Branch 1 taken 1204 times.
2469 if (!s->eac3)
844 1265 s->cpl_in_use[blk] = get_bits1(bc);
845
2/2
✓ Branch 0 taken 1249 times.
✓ Branch 1 taken 1220 times.
2469 if (s->cpl_in_use[blk]) {
846 /* coupling in use */
847 int cpl_start_subband, cpl_end_subband;
848
849
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1249 times.
1249 if (channel_mode < AC3_CHMODE_STEREO) {
850 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
851 return AVERROR_INVALIDDATA;
852 }
853
854 /* check for enhanced coupling */
855
3/4
✓ Branch 0 taken 405 times.
✓ Branch 1 taken 844 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 405 times.
1249 if (s->eac3 && get_bits1(bc)) {
856 /* TODO: parse enhanced coupling strategy info */
857 avpriv_request_sample(s->avctx, "Enhanced coupling");
858 return AVERROR_PATCHWELCOME;
859 }
860
861 /* determine which channels are coupled */
862
3/4
✓ Branch 0 taken 405 times.
✓ Branch 1 taken 844 times.
✓ Branch 2 taken 405 times.
✗ Branch 3 not taken.
1249 if (s->eac3 && s->channel_mode == AC3_CHMODE_STEREO) {
863 405 s->channel_in_cpl[1] = 1;
864 405 s->channel_in_cpl[2] = 1;
865 } else {
866
2/2
✓ Branch 0 taken 2549 times.
✓ Branch 1 taken 844 times.
3393 for (ch = 1; ch <= fbw_channels; ch++)
867 2549 s->channel_in_cpl[ch] = get_bits1(bc);
868 }
869
870 /* phase flags in use */
871
2/2
✓ Branch 0 taken 962 times.
✓ Branch 1 taken 287 times.
1249 if (channel_mode == AC3_CHMODE_STEREO)
872 962 s->phase_flags_in_use = get_bits1(bc);
873
874 /* coupling frequency range */
875 1249 cpl_start_subband = get_bits(bc, 4);
876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1249 times.
1249 cpl_end_subband = s->spx_in_use ? (s->spx_src_start_freq - 37) / 12 :
877 1249 get_bits(bc, 4) + 3;
878
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1249 times.
1249 if (cpl_start_subband >= cpl_end_subband) {
879 av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d >= %d)\n",
880 cpl_start_subband, cpl_end_subband);
881 return AVERROR_INVALIDDATA;
882 }
883 1249 s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
884 1249 s->end_freq[CPL_CH] = cpl_end_subband * 12 + 37;
885
886 1249 decode_band_structure(bc, blk, s->eac3, 0, cpl_start_subband,
887 cpl_end_subband,
888 ff_eac3_default_cpl_band_struct,
889 1249 &s->num_cpl_bands, s->cpl_band_sizes,
890 1249 s->cpl_band_struct, sizeof(s->cpl_band_struct));
891 } else {
892 /* coupling not in use */
893
2/2
✓ Branch 0 taken 4189 times.
✓ Branch 1 taken 1220 times.
5409 for (ch = 1; ch <= fbw_channels; ch++) {
894 4189 s->channel_in_cpl[ch] = 0;
895 4189 s->first_cpl_coords[ch] = 1;
896 }
897 1220 s->first_cpl_leak = s->eac3;
898 1220 s->phase_flags_in_use = 0;
899 }
900
901 2469 return 0;
902 }
903
904 7490 static inline int coupling_coordinates(AC3DecodeContext *s, int blk)
905 {
906 7490 GetBitContext *bc = &s->gbc;
907 7490 int fbw_channels = s->fbw_channels;
908 int ch, bnd;
909 7490 int cpl_coords_exist = 0;
910
911
2/2
✓ Branch 0 taken 20146 times.
✓ Branch 1 taken 7490 times.
27636 for (ch = 1; ch <= fbw_channels; ch++) {
912
1/2
✓ Branch 0 taken 20146 times.
✗ Branch 1 not taken.
20146 if (s->channel_in_cpl[ch]) {
913
6/6
✓ Branch 0 taken 4860 times.
✓ Branch 1 taken 15286 times.
✓ Branch 2 taken 4050 times.
✓ Branch 3 taken 810 times.
✓ Branch 5 taken 5136 times.
✓ Branch 6 taken 14200 times.
26092 if ((s->eac3 && s->first_cpl_coords[ch]) || get_bits1(bc)) {
914 int master_cpl_coord, cpl_coord_exp, cpl_coord_mant;
915 5946 s->first_cpl_coords[ch] = 0;
916 5946 cpl_coords_exist = 1;
917 5946 master_cpl_coord = 3 * get_bits(bc, 2);
918
2/2
✓ Branch 0 taken 15797 times.
✓ Branch 1 taken 5946 times.
21743 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
919 15797 cpl_coord_exp = get_bits(bc, 4);
920 15797 cpl_coord_mant = get_bits(bc, 4);
921
2/2
✓ Branch 0 taken 2610 times.
✓ Branch 1 taken 13187 times.
15797 if (cpl_coord_exp == 15)
922 2610 s->cpl_coords[ch][bnd] = cpl_coord_mant << 22;
923 else
924 13187 s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21;
925 15797 s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord);
926 }
927
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14200 times.
14200 } else if (!blk) {
928 av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must "
929 "be present in block 0\n");
930 return AVERROR_INVALIDDATA;
931 }
932 } else {
933 /* channel not in coupling */
934 s->first_cpl_coords[ch] = 1;
935 }
936 }
937 /* phase flags */
938
4/4
✓ Branch 0 taken 5768 times.
✓ Branch 1 taken 1722 times.
✓ Branch 2 taken 992 times.
✓ Branch 3 taken 4776 times.
7490 if (s->channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
939
2/2
✓ Branch 0 taken 3967 times.
✓ Branch 1 taken 992 times.
4959 for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
940
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3967 times.
3967 s->phase_flags[bnd] = s->phase_flags_in_use ? get_bits1(bc) : 0;
941 }
942 }
943
944 7490 return 0;
945 }
946
947 /**
948 * Decode a single audio block from the AC-3 bitstream.
949 */
950 14312 static int decode_audio_block(AC3DecodeContext *s, int blk, int offset)
951 {
952 14312 int fbw_channels = s->fbw_channels;
953 14312 int channel_mode = s->channel_mode;
954 int i, bnd, seg, ch, ret;
955 int different_transforms;
956 int downmix_output;
957 int cpl_in_use;
958 14312 GetBitContext *gbc = &s->gbc;
959 14312 uint8_t bit_alloc_stages[AC3_MAX_CHANNELS] = { 0 };
960
961 /* block switch flags */
962 14312 different_transforms = 0;
963
2/2
✓ Branch 0 taken 7578 times.
✓ Branch 1 taken 6734 times.
14312 if (s->block_switch_syntax) {
964
2/2
✓ Branch 0 taken 26280 times.
✓ Branch 1 taken 7578 times.
33858 for (ch = 1; ch <= fbw_channels; ch++) {
965 26280 s->block_switch[ch] = get_bits1(gbc);
966
4/4
✓ Branch 0 taken 18702 times.
✓ Branch 1 taken 7578 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 18696 times.
26280 if (ch > 1 && s->block_switch[ch] != s->block_switch[1])
967 6 different_transforms = 1;
968 }
969 }
970
971 /* dithering flags */
972
2/2
✓ Branch 0 taken 7578 times.
✓ Branch 1 taken 6734 times.
14312 if (s->dither_flag_syntax) {
973
2/2
✓ Branch 0 taken 26280 times.
✓ Branch 1 taken 7578 times.
33858 for (ch = 1; ch <= fbw_channels; ch++) {
974 26280 s->dither_flag[ch] = get_bits1(gbc);
975 }
976 }
977
978 /* dynamic range */
979 14312 i = !s->channel_mode;
980 do {
981
2/2
✓ Branch 1 taken 2767 times.
✓ Branch 2 taken 11545 times.
14312 if (get_bits1(gbc)) {
982 /* Allow asymmetric application of DRC when drc_scale > 1.
983 Amplification of quiet sounds is enhanced */
984 2767 int range_bits = get_bits(gbc, 8);
985 2767 INTFLOAT range = AC3_RANGE(range_bits);
986
4/4
✓ Branch 0 taken 1190 times.
✓ Branch 1 taken 1577 times.
✓ Branch 2 taken 1092 times.
✓ Branch 3 taken 98 times.
2767 if (range_bits <= 127 || s->drc_scale <= 1.0)
987 2669 s->dynamic_range[i] = AC3_DYNAMIC_RANGE(range);
988 else
989 98 s->dynamic_range[i] = range;
990
2/2
✓ Branch 0 taken 712 times.
✓ Branch 1 taken 10833 times.
11545 } else if (blk == 0) {
991 712 s->dynamic_range[i] = AC3_DYNAMIC_RANGE1;
992 }
993
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14312 times.
14312 } while (i--);
994
995 /* spectral extension strategy */
996
5/6
✓ Branch 0 taken 6734 times.
✓ Branch 1 taken 7578 times.
✓ Branch 2 taken 5530 times.
✓ Branch 3 taken 1204 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5530 times.
14312 if (s->eac3 && (!blk || get_bits1(gbc))) {
997 1204 s->spx_in_use = get_bits1(gbc);
998
2/2
✓ Branch 0 taken 542 times.
✓ Branch 1 taken 662 times.
1204 if (s->spx_in_use) {
999
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 542 times.
542 if ((ret = spx_strategy(s, blk)) < 0)
1000 return ret;
1001 }
1002 }
1003
4/4
✓ Branch 0 taken 6734 times.
✓ Branch 1 taken 7578 times.
✓ Branch 2 taken 3482 times.
✓ Branch 3 taken 3252 times.
14312 if (!s->eac3 || !s->spx_in_use) {
1004 11060 s->spx_in_use = 0;
1005
2/2
✓ Branch 0 taken 35446 times.
✓ Branch 1 taken 11060 times.
46506 for (ch = 1; ch <= fbw_channels; ch++) {
1006 35446 s->channel_uses_spx[ch] = 0;
1007 35446 s->first_spx_coords[ch] = 1;
1008 }
1009 }
1010
1011 /* spectral extension coordinates */
1012
2/2
✓ Branch 0 taken 3252 times.
✓ Branch 1 taken 11060 times.
14312 if (s->spx_in_use)
1013 3252 spx_coordinates(s);
1014
1015 /* coupling strategy */
1016
4/4
✓ Branch 0 taken 6734 times.
✓ Branch 1 taken 7578 times.
✓ Branch 3 taken 2469 times.
✓ Branch 4 taken 11843 times.
14312 if (s->eac3 ? s->cpl_strategy_exists[blk] : get_bits1(gbc)) {
1017
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2469 times.
2469 if ((ret = coupling_strategy(s, blk, bit_alloc_stages)) < 0)
1018 return ret;
1019
2/2
✓ Branch 0 taken 6313 times.
✓ Branch 1 taken 5530 times.
11843 } else if (!s->eac3) {
1020
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6313 times.
6313 if (!blk) {
1021 av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must "
1022 "be present in block 0\n");
1023 return AVERROR_INVALIDDATA;
1024 } else {
1025 6313 s->cpl_in_use[blk] = s->cpl_in_use[blk-1];
1026 }
1027 }
1028 14312 cpl_in_use = s->cpl_in_use[blk];
1029
1030 /* coupling coordinates */
1031
2/2
✓ Branch 0 taken 7490 times.
✓ Branch 1 taken 6822 times.
14312 if (cpl_in_use) {
1032
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 7490 times.
7490 if ((ret = coupling_coordinates(s, blk)) < 0)
1033 return ret;
1034 }
1035
1036 /* stereo rematrixing strategy and band structure */
1037
2/2
✓ Branch 0 taken 8736 times.
✓ Branch 1 taken 5576 times.
14312 if (channel_mode == AC3_CHMODE_STEREO) {
1038
6/6
✓ Branch 0 taken 5394 times.
✓ Branch 1 taken 3342 times.
✓ Branch 2 taken 4495 times.
✓ Branch 3 taken 899 times.
✓ Branch 5 taken 1965 times.
✓ Branch 6 taken 5872 times.
8736 if ((s->eac3 && !blk) || get_bits1(gbc)) {
1039 2864 s->num_rematrixing_bands = 4;
1040
4/4
✓ Branch 0 taken 2358 times.
✓ Branch 1 taken 506 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2357 times.
2864 if (cpl_in_use && s->start_freq[CPL_CH] <= 61) {
1041
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37);
1042
3/4
✓ Branch 0 taken 504 times.
✓ Branch 1 taken 2359 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 504 times.
2863 } else if (s->spx_in_use && s->spx_src_start_freq <= 61) {
1043 s->num_rematrixing_bands--;
1044 }
1045
2/2
✓ Branch 0 taken 11454 times.
✓ Branch 1 taken 2864 times.
14318 for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++)
1046 11454 s->rematrixing_flags[bnd] = get_bits1(gbc);
1047
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5872 times.
5872 } else if (!blk) {
1048 av_log(s->avctx, AV_LOG_WARNING, "Warning: "
1049 "new rematrixing strategy not present in block 0\n");
1050 s->num_rematrixing_bands = 0;
1051 }
1052 }
1053
1054 /* exponent strategies for each channel */
1055
2/2
✓ Branch 0 taken 53396 times.
✓ Branch 1 taken 14312 times.
67708 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1056
2/2
✓ Branch 0 taken 34046 times.
✓ Branch 1 taken 19350 times.
53396 if (!s->eac3)
1057
2/2
✓ Branch 0 taken 2706 times.
✓ Branch 1 taken 31340 times.
34046 s->exp_strategy[blk][ch] = get_bits(gbc, 2 - (ch == s->lfe_ch));
1058
2/2
✓ Branch 0 taken 13652 times.
✓ Branch 1 taken 39744 times.
53396 if (s->exp_strategy[blk][ch] != EXP_REUSE)
1059 13652 bit_alloc_stages[ch] = 3;
1060 }
1061
1062 /* channel bandwidth */
1063
2/2
✓ Branch 0 taken 42814 times.
✓ Branch 1 taken 14312 times.
57126 for (ch = 1; ch <= fbw_channels; ch++) {
1064 42814 s->start_freq[ch] = 0;
1065
2/2
✓ Branch 0 taken 10584 times.
✓ Branch 1 taken 32230 times.
42814 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1066 int group_size;
1067 10584 int prev = s->end_freq[ch];
1068
2/2
✓ Branch 0 taken 4200 times.
✓ Branch 1 taken 6384 times.
10584 if (s->channel_in_cpl[ch])
1069 4200 s->end_freq[ch] = s->start_freq[CPL_CH];
1070
2/2
✓ Branch 0 taken 1967 times.
✓ Branch 1 taken 4417 times.
6384 else if (s->channel_uses_spx[ch])
1071 1967 s->end_freq[ch] = s->spx_src_start_freq;
1072 else {
1073 4417 int bandwidth_code = get_bits(gbc, 6);
1074
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4417 times.
4417 if (bandwidth_code > 60) {
1075 av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
1076 return AVERROR_INVALIDDATA;
1077 }
1078 4417 s->end_freq[ch] = bandwidth_code * 3 + 73;
1079 }
1080 10584 group_size = 3 << (s->exp_strategy[blk][ch] - 1);
1081 10584 s->num_exp_groups[ch] = (s->end_freq[ch] + group_size-4) / group_size;
1082
4/4
✓ Branch 0 taken 3040 times.
✓ Branch 1 taken 7544 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 3036 times.
10584 if (blk > 0 && s->end_freq[ch] != prev)
1083 4 memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS);
1084 }
1085 }
1086
4/4
✓ Branch 0 taken 7490 times.
✓ Branch 1 taken 6822 times.
✓ Branch 2 taken 2439 times.
✓ Branch 3 taken 5051 times.
14312 if (cpl_in_use && s->exp_strategy[blk][CPL_CH] != EXP_REUSE) {
1087 2439 s->num_exp_groups[CPL_CH] = (s->end_freq[CPL_CH] - s->start_freq[CPL_CH]) /
1088 2439 (3 << (s->exp_strategy[blk][CPL_CH] - 1));
1089 }
1090
1091 /* decode exponents for each channel */
1092
2/2
✓ Branch 0 taken 53396 times.
✓ Branch 1 taken 14312 times.
67708 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1093
2/2
✓ Branch 0 taken 13652 times.
✓ Branch 1 taken 39744 times.
53396 if (s->exp_strategy[blk][ch] != EXP_REUSE) {
1094 13652 s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
1095
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13652 times.
13652 if (decode_exponents(s, gbc, s->exp_strategy[blk][ch],
1096 13652 s->num_exp_groups[ch], s->dexps[ch][0],
1097 13652 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
1098 return AVERROR_INVALIDDATA;
1099 }
1100
4/4
✓ Branch 0 taken 11213 times.
✓ Branch 1 taken 2439 times.
✓ Branch 2 taken 10584 times.
✓ Branch 3 taken 629 times.
13652 if (ch != CPL_CH && ch != s->lfe_ch)
1101 10584 skip_bits(gbc, 2); /* skip gainrng */
1102 }
1103 }
1104
1105 /* bit allocation information */
1106
2/2
✓ Branch 0 taken 8804 times.
✓ Branch 1 taken 5508 times.
14312 if (s->bit_allocation_syntax) {
1107
2/2
✓ Branch 1 taken 1583 times.
✓ Branch 2 taken 7221 times.
8804 if (get_bits1(gbc)) {
1108 1583 s->bit_alloc_params.slow_decay = ff_ac3_slow_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1109 1583 s->bit_alloc_params.fast_decay = ff_ac3_fast_decay_tab[get_bits(gbc, 2)] >> s->bit_alloc_params.sr_shift;
1110 1583 s->bit_alloc_params.slow_gain = ff_ac3_slow_gain_tab[get_bits(gbc, 2)];
1111 1583 s->bit_alloc_params.db_per_bit = ff_ac3_db_per_bit_tab[get_bits(gbc, 2)];
1112 1583 s->bit_alloc_params.floor = ff_ac3_floor_tab[get_bits(gbc, 3)];
1113
2/2
✓ Branch 0 taken 7098 times.
✓ Branch 1 taken 1583 times.
8681 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1114 7098 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1115
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7221 times.
7221 } else if (!blk) {
1116 av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must "
1117 "be present in block 0\n");
1118 return AVERROR_INVALIDDATA;
1119 }
1120 }
1121
1122 /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */
1123
4/4
✓ Branch 0 taken 6734 times.
✓ Branch 1 taken 7578 times.
✓ Branch 2 taken 1204 times.
✓ Branch 3 taken 5530 times.
14312 if (!s->eac3 || !blk) {
1124
4/4
✓ Branch 0 taken 7578 times.
✓ Branch 1 taken 1204 times.
✓ Branch 3 taken 1263 times.
✓ Branch 4 taken 6315 times.
10045 if (s->snr_offset_strategy && get_bits1(gbc)) {
1125 1263 int snr = 0;
1126 int csnr;
1127 1263 csnr = (get_bits(gbc, 6) - 15) << 4;
1128
2/2
✓ Branch 0 taken 5675 times.
✓ Branch 1 taken 1263 times.
6938 for (i = ch = !cpl_in_use; ch <= s->channels; ch++) {
1129 /* snr offset */
1130
3/4
✓ Branch 0 taken 4412 times.
✓ Branch 1 taken 1263 times.
✓ Branch 2 taken 4412 times.
✗ Branch 3 not taken.
5675 if (ch == i || s->snr_offset_strategy == 2)
1131 5675 snr = (csnr + get_bits(gbc, 4)) << 2;
1132 /* run at least last bit allocation stage if snr offset changes */
1133
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 5675 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
5675 if (blk && s->snr_offset[ch] != snr) {
1134 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 1);
1135 }
1136 5675 s->snr_offset[ch] = snr;
1137
1138 /* fast gain (normal AC-3 only) */
1139
1/2
✓ Branch 0 taken 5675 times.
✗ Branch 1 not taken.
5675 if (!s->eac3) {
1140 5675 int prev = s->fast_gain[ch];
1141 5675 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1142 /* run last 2 bit allocation stages if fast gain changes */
1143
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 5675 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
5675 if (blk && prev != s->fast_gain[ch])
1144 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1145 }
1146 }
1147
3/4
✓ Branch 0 taken 6315 times.
✓ Branch 1 taken 1204 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6315 times.
7519 } else if (!s->eac3 && !blk) {
1148 av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n");
1149 return AVERROR_INVALIDDATA;
1150 }
1151 }
1152
1153 /* fast gain (E-AC-3 only) */
1154
3/4
✓ Branch 0 taken 954 times.
✓ Branch 1 taken 13358 times.
✓ Branch 3 taken 954 times.
✗ Branch 4 not taken.
14312 if (s->fast_gain_syntax && get_bits1(gbc)) {
1155
2/2
✓ Branch 0 taken 3816 times.
✓ Branch 1 taken 954 times.
4770 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1156 3816 int prev = s->fast_gain[ch];
1157 3816 s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)];
1158 /* run last 2 bit allocation stages if fast gain changes */
1159
3/4
✓ Branch 0 taken 3180 times.
✓ Branch 1 taken 636 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3180 times.
3816 if (blk && prev != s->fast_gain[ch])
1160 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1161 }
1162
4/4
✓ Branch 0 taken 5780 times.
✓ Branch 1 taken 7578 times.
✓ Branch 2 taken 1045 times.
✓ Branch 3 taken 4735 times.
13358 } else if (s->eac3 && !blk) {
1163
2/2
✓ Branch 0 taken 3079 times.
✓ Branch 1 taken 1045 times.
4124 for (ch = !cpl_in_use; ch <= s->channels; ch++)
1164 3079 s->fast_gain[ch] = ff_ac3_fast_gain_tab[4];
1165 }
1166
1167 /* E-AC-3 to AC-3 converter SNR offset */
1168
4/4
✓ Branch 0 taken 5780 times.
✓ Branch 1 taken 8532 times.
✓ Branch 3 taken 689 times.
✓ Branch 4 taken 5091 times.
14312 if (s->frame_type == EAC3_FRAME_TYPE_INDEPENDENT && get_bits1(gbc)) {
1169 689 skip_bits(gbc, 10); // skip converter snr offset
1170 }
1171
1172 /* coupling leak information */
1173
2/2
✓ Branch 0 taken 7490 times.
✓ Branch 1 taken 6822 times.
14312 if (cpl_in_use) {
1174
4/4
✓ Branch 0 taken 7085 times.
✓ Branch 1 taken 405 times.
✓ Branch 3 taken 890 times.
✓ Branch 4 taken 6195 times.
7490 if (s->first_cpl_leak || get_bits1(gbc)) {
1175 1295 int fl = get_bits(gbc, 3);
1176 1295 int sl = get_bits(gbc, 3);
1177 /* run last 2 bit allocation stages for coupling channel if
1178 coupling leak changes */
1179
4/4
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 1249 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 45 times.
1295 if (blk && (fl != s->bit_alloc_params.cpl_fast_leak ||
1180
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 sl != s->bit_alloc_params.cpl_slow_leak)) {
1181 46 bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2);
1182 }
1183 1295 s->bit_alloc_params.cpl_fast_leak = fl;
1184 1295 s->bit_alloc_params.cpl_slow_leak = sl;
1185
3/4
✓ Branch 0 taken 4216 times.
✓ Branch 1 taken 1979 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4216 times.
6195 } else if (!s->eac3 && !blk) {
1186 av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must "
1187 "be present in block 0\n");
1188 return AVERROR_INVALIDDATA;
1189 }
1190 7490 s->first_cpl_leak = 0;
1191 }
1192
1193 /* delta bit allocation information */
1194
3/4
✓ Branch 0 taken 7578 times.
✓ Branch 1 taken 6734 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 7578 times.
14312 if (s->dba_syntax && get_bits1(gbc)) {
1195 /* delta bit allocation exists (strategy) */
1196 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1197 s->dba_mode[ch] = get_bits(gbc, 2);
1198 if (s->dba_mode[ch] == DBA_RESERVED) {
1199 av_log(s->avctx, AV_LOG_ERROR, "delta bit allocation strategy reserved\n");
1200 return AVERROR_INVALIDDATA;
1201 }
1202 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1203 }
1204 /* channel delta offset, len and bit allocation */
1205 for (ch = !cpl_in_use; ch <= fbw_channels; ch++) {
1206 if (s->dba_mode[ch] == DBA_NEW) {
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);
1212 }
1213 /* run last 2 bit allocation stages if new dba values */
1214 bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2);
1215 }
1216 }
1217
2/2
✓ Branch 0 taken 2467 times.
✓ Branch 1 taken 11845 times.
14312 } else if (blk == 0) {
1218
2/2
✓ Branch 0 taken 10608 times.
✓ Branch 1 taken 2467 times.
13075 for (ch = 0; ch <= s->channels; ch++) {
1219 10608 s->dba_mode[ch] = DBA_NONE;
1220 }
1221 }
1222
1223 /* Bit allocation */
1224
2/2
✓ Branch 0 taken 53396 times.
✓ Branch 1 taken 14312 times.
67708 for (ch = !cpl_in_use; ch <= s->channels; ch++) {
1225
2/2
✓ Branch 0 taken 13652 times.
✓ Branch 1 taken 39744 times.
53396 if (bit_alloc_stages[ch] > 2) {
1226 /* Exponent mapping into PSD and PSD integration */
1227 13652 ff_ac3_bit_alloc_calc_psd(s->dexps[ch],
1228 s->start_freq[ch], s->end_freq[ch],
1229 13652 s->psd[ch], s->band_psd[ch]);
1230 }
1231
2/2
✓ Branch 0 taken 13794 times.
✓ Branch 1 taken 39602 times.
53396 if (bit_alloc_stages[ch] > 1) {
1232 /* Compute excitation function, Compute masking curve, and
1233 Apply delta bit allocation */
1234
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13794 times.
13794 if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
1235 s->start_freq[ch], s->end_freq[ch],
1236 13794 s->fast_gain[ch], (ch == s->lfe_ch),
1237 s->dba_mode[ch], s->dba_nsegs[ch],
1238 13794 s->dba_offsets[ch], s->dba_lengths[ch],
1239 13794 s->dba_values[ch], s->mask[ch])) {
1240 av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
1241 return AVERROR_INVALIDDATA;
1242 }
1243 }
1244
2/2
✓ Branch 0 taken 13794 times.
✓ Branch 1 taken 39602 times.
53396 if (bit_alloc_stages[ch] > 0) {
1245 /* Compute bit allocation */
1246 27588 const uint8_t *bap_tab = s->channel_uses_aht[ch] ?
1247
2/2
✓ Branch 0 taken 848 times.
✓ Branch 1 taken 12946 times.
13794 ff_eac3_hebap_tab : ff_ac3_bap_tab;
1248 13794 s->ac3dsp.bit_alloc_calc_bap(s->mask[ch], s->psd[ch],
1249 s->start_freq[ch], s->end_freq[ch],
1250 s->snr_offset[ch],
1251 s->bit_alloc_params.floor,
1252 13794 bap_tab, s->bap[ch]);
1253 }
1254 }
1255
1256 /* unused dummy data */
1257
4/4
✓ Branch 0 taken 8532 times.
✓ Branch 1 taken 5780 times.
✓ Branch 3 taken 1279 times.
✓ Branch 4 taken 7253 times.
14312 if (s->skip_syntax && get_bits1(gbc)) {
1258 1279 int skipl = get_bits(gbc, 9);
1259 1279 skip_bits_long(gbc, 8 * skipl);
1260 }
1261
1262 /* unpack the transform coefficients
1263 this also uncouples channels if coupling is in use. */
1264 14312 decode_transform_coeffs(s, blk);
1265
1266 /* TODO: generate enhanced coupling coordinates and uncouple */
1267
1268 /* recover coefficients if rematrixing is in use */
1269
2/2
✓ Branch 0 taken 8736 times.
✓ Branch 1 taken 5576 times.
14312 if (s->channel_mode == AC3_CHMODE_STEREO)
1270 8736 do_rematrixing(s);
1271
1272 /* apply scaling to coefficients (headroom, dynrng) */
1273
2/2
✓ Branch 0 taken 45906 times.
✓ Branch 1 taken 14312 times.
60218 for (ch = 1; ch <= s->channels; ch++) {
1274 45906 int audio_channel = 0;
1275 INTFLOAT gain;
1276
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 45906 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
45906 if (s->channel_mode == AC3_CHMODE_DUALMONO && ch <= 2)
1277 audio_channel = 2-ch;
1278
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 45906 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
45906 if (s->heavy_compression && s->compression_exists[audio_channel])
1279 gain = s->heavy_dynamic_range[audio_channel];
1280 else
1281 45906 gain = s->dynamic_range[audio_channel];
1282
1283 #if USE_FIXED
1284 7008 scale_coefs(s->transform_coeffs[ch], s->fixed_coeffs[ch], gain, 256);
1285 #else
1286
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 38898 times.
38898 if (s->target_level != 0)
1287 gain = gain * s->level_gain[audio_channel];
1288 38898 gain *= 1.0 / 4194304.0f;
1289 38898 s->fmt_conv.int32_to_float_fmul_scalar(s->transform_coeffs[ch],
1290 38898 s->fixed_coeffs[ch], gain, 256);
1291 #endif
1292 }
1293
1294 /* apply spectral extension to high frequency bins */
1295
2/2
✓ Branch 0 taken 3252 times.
✓ Branch 1 taken 11060 times.
14312 if (CONFIG_EAC3_DECODER && s->spx_in_use) {
1296 3252 ff_eac3_apply_spectral_extension(s);
1297 }
1298
1299 /* downmix and MDCT. order depends on whether block switching is used for
1300 any channel in this block. this is because coefficients for the long
1301 and short transforms cannot be mixed. */
1302
2/2
✓ Branch 0 taken 2478 times.
✓ Branch 1 taken 11834 times.
16790 downmix_output = s->channels != s->out_channels &&
1303
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2478 times.
2478 !((s->output_mode & AC3_OUTPUT_LFEON) &&
1304 s->fbw_channels == s->out_channels);
1305
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 14306 times.
14312 if (different_transforms) {
1306 /* the delay samples have already been downmixed, so we upmix the delay
1307 samples in order to reconstruct all channels before downmixing. */
1308
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 if (s->downmixed) {
1309 6 s->downmixed = 0;
1310 6 ac3_upmix_delay(s);
1311 }
1312
1313 6 do_imdct(s, s->channels, offset);
1314
1315
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
6 if (downmix_output) {
1316 #if USE_FIXED
1317 1 ac3_downmix_c_fixed16(s->outptr, s->downmix_coeffs,
1318 s->out_channels, s->fbw_channels, 256);
1319 #else
1320 2 ff_ac3dsp_downmix(&s->ac3dsp, s->outptr, s->downmix_coeffs,
1321 s->out_channels, s->fbw_channels, 256);
1322 #endif
1323 }
1324 } else {
1325
2/2
✓ Branch 0 taken 2475 times.
✓ Branch 1 taken 11831 times.
14306 if (downmix_output) {
1326 2475 AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->xcfptr + 1, s->downmix_coeffs,
1327 s->out_channels, s->fbw_channels, 256);
1328 }
1329
1330
4/4
✓ Branch 0 taken 2475 times.
✓ Branch 1 taken 11831 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 2472 times.
14306 if (downmix_output && !s->downmixed) {
1331 3 s->downmixed = 1;
1332 3 AC3_RENAME(ff_ac3dsp_downmix)(&s->ac3dsp, s->dlyptr, s->downmix_coeffs,
1333 s->out_channels, s->fbw_channels, 128);
1334 }
1335
1336 14306 do_imdct(s, s->out_channels, offset);
1337 }
1338
1339 14312 return 0;
1340 }
1341
1342 /**
1343 * Decode a single AC-3 frame.
1344 */
1345 2319 static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame,
1346 int *got_frame_ptr, AVPacket *avpkt)
1347 {
1348 2319 const uint8_t *buf = avpkt->data;
1349 2319 int buf_size, full_buf_size = avpkt->size;
1350 2319 AC3DecodeContext *s = avctx->priv_data;
1351 int blk, ch, err, offset, ret;
1352 int i;
1353 2319 int skip = 0, got_independent_frame = 0;
1354 const uint8_t *channel_map;
1355 uint8_t extended_channel_map[EAC3_MAX_CHANNELS];
1356 const SHORTFLOAT *output[AC3_MAX_CHANNELS];
1357 enum AVMatrixEncoding matrix_encoding;
1358 uint64_t mask;
1359
1360 2319 s->superframe_size = 0;
1361
1362 2319 buf_size = full_buf_size;
1363 2319 i = ff_ac3_find_syncword(buf, buf_size);
1364
3/4
✓ Branch 0 taken 2315 times.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2315 times.
2319 if (i < 0 || i > 10)
1365 4 return i;
1366 2315 buf += i;
1367 2315 buf_size -= i;
1368
1369 /* copy input buffer to decoder context to avoid reading past the end
1370 of the buffer, which can be caused by a damaged input stream. */
1371
2/4
✓ Branch 0 taken 2315 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2315 times.
2315 if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
1372 // seems to be byte-swapped AC-3
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);
1376 } else
1377 2315 memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1378
1379 /* if consistent noise generation is enabled, seed the linear feedback generator
1380 * with the contents of the AC-3 frame so that the noise is identical across
1381 * decodes given the same AC-3 frame data, for use with non-linear edititing software. */
1382
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2315 times.
2315 if (s->consistent_noise_generation)
1383 av_lfg_init_from_data(&s->dith_state, s->input_buffer, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
1384
1385 2315 buf = s->input_buffer;
1386 2474 dependent_frame:
1387 /* initialize the GetBitContext with the start of valid AC-3 Frame */
1388
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2474 times.
2474 if ((ret = init_get_bits8(&s->gbc, buf, buf_size)) < 0)
1389 return ret;
1390
1391 /* parse the syncinfo */
1392 2474 err = parse_frame_header(s);
1393
1394
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2474 times.
2474 if (err) {
1395 switch (err) {
1396 case AC3_PARSE_ERROR_SYNC:
1397 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
1398 return AVERROR_INVALIDDATA;
1399 case AC3_PARSE_ERROR_BSID:
1400 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
1401 break;
1402 case AC3_PARSE_ERROR_SAMPLE_RATE:
1403 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
1404 break;
1405 case AC3_PARSE_ERROR_FRAME_SIZE:
1406 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
1407 break;
1408 case AC3_PARSE_ERROR_FRAME_TYPE:
1409 /* skip frame if CRC is ok. otherwise use error concealment. */
1410 /* TODO: add support for substreams */
1411 if (s->substreamid) {
1412 av_log(avctx, AV_LOG_DEBUG,
1413 "unsupported substream %d: skipping frame\n",
1414 s->substreamid);
1415 *got_frame_ptr = 0;
1416 return buf_size;
1417 } else {
1418 av_log(avctx, AV_LOG_ERROR, "invalid frame type\n");
1419 }
1420 break;
1421 case AC3_PARSE_ERROR_CHANNEL_MAP:
1422 av_log(avctx, AV_LOG_ERROR, "invalid channel map\n");
1423 return AVERROR_INVALIDDATA;
1424 case AC3_PARSE_ERROR_CRC:
1425 break;
1426 default: // Normal AVERROR do not try to recover.
1427 *got_frame_ptr = 0;
1428 return err;
1429 }
1430 } else {
1431 /* check that reported frame size fits in input buffer */
1432
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 2467 times.
2474 if (s->frame_size > buf_size) {
1433 7 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
1434 7 err = AC3_PARSE_ERROR_FRAME_SIZE;
1435
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2467 times.
2467 } else if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
1436 /* check for crc mismatch */
1437 if (av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2],
1438 s->frame_size - 2)) {
1439 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
1440 if (avctx->err_recognition & AV_EF_EXPLODE)
1441 return AVERROR_INVALIDDATA;
1442 err = AC3_PARSE_ERROR_CRC;
1443 }
1444 }
1445 }
1446
1447
3/4
✓ Branch 0 taken 159 times.
✓ Branch 1 taken 2315 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 159 times.
2474 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT && !got_independent_frame) {
1448 av_log(avctx, AV_LOG_WARNING, "Ignoring dependent frame without independent frame.\n");
1449 *got_frame_ptr = 0;
1450 return FFMIN(full_buf_size, s->frame_size);
1451 }
1452
1453 /* channel config */
1454
5/6
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 2467 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 3 times.
2474 if (!err || (s->channels && s->out_channels != s->channels)) {
1455 2471 s->out_channels = s->channels;
1456 2471 s->output_mode = s->channel_mode;
1457
2/2
✓ Branch 0 taken 601 times.
✓ Branch 1 taken 1870 times.
2471 if (s->lfe_on)
1458 601 s->output_mode |= AC3_OUTPUT_LFEON;
1459
4/4
✓ Branch 0 taken 2468 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 240 times.
✓ Branch 3 taken 2228 times.
4939 if (s->channels > 1 &&
1460 2468 !av_channel_layout_compare(&s->downmix_layout, &(AVChannelLayout)AV_CHANNEL_LAYOUT_MONO)) {
1461 240 s->out_channels = 1;
1462 240 s->output_mode = AC3_CHMODE_MONO;
1463
4/4
✓ Branch 0 taken 772 times.
✓ Branch 1 taken 1459 times.
✓ Branch 2 taken 177 times.
✓ Branch 3 taken 595 times.
3003 } else if (s->channels > 2 &&
1464 772 !av_channel_layout_compare(&s->downmix_layout, &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO)) {
1465 177 s->out_channels = 2;
1466 177 s->output_mode = AC3_CHMODE_STEREO;
1467 }
1468
1469 2471 s->loro_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1470 2471 s->loro_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level];
1471 2471 s->ltrt_center_mix_level = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1472 2471 s->ltrt_surround_mix_level = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1473
3/4
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 98 times.
✓ Branch 3 taken 2325 times.
2471 switch (s->preferred_downmix) {
1474 48 case AC3_DMIXMOD_LTRT:
1475 48 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LTRT;
1476 48 break;
1477 case AC3_DMIXMOD_LORO:
1478 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_LORO;
1479 break;
1480 98 case AC3_DMIXMOD_DPLII:
1481 98 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_DPLII;
1482 98 break;
1483 2325 default:
1484 2325 s->preferred_stereo_downmix = AV_DOWNMIX_TYPE_UNKNOWN;
1485 2325 break;
1486 }
1487 /* set downmixing coefficients if needed */
1488
3/4
✓ Branch 0 taken 417 times.
✓ Branch 1 taken 2054 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 417 times.
2471 if (s->channels != s->out_channels && !((s->output_mode & AC3_OUTPUT_LFEON) &&
1489 s->fbw_channels == s->out_channels)) {
1490
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 417 times.
417 if ((ret = set_downmix_coeffs(s)) < 0) {
1491 av_log(avctx, AV_LOG_ERROR, "error setting downmix coeffs\n");
1492 return ret;
1493 }
1494 }
1495
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
3 } else if (!s->channels) {
1496 av_log(avctx, AV_LOG_ERROR, "unable to determine channel mode\n");
1497 return AVERROR_INVALIDDATA;
1498 }
1499
1500 2474 mask = ff_ac3_channel_layout_tab[s->output_mode & ~AC3_OUTPUT_LFEON];
1501
2/2
✓ Branch 0 taken 374 times.
✓ Branch 1 taken 2100 times.
2474 if (s->output_mode & AC3_OUTPUT_LFEON)
1502 374 mask |= AV_CH_LOW_FREQUENCY;
1503
1504 2474 av_channel_layout_uninit(&avctx->ch_layout);
1505 2474 av_channel_layout_from_mask(&avctx->ch_layout, mask);
1506
1507 /* set audio service type based on bitstream mode for AC-3 */
1508 2474 avctx->audio_service_type = s->bitstream_mode;
1509
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2474 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2474 if (s->bitstream_mode == 0x7 && s->channels > 1)
1510 avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE;
1511
1512 /* decode the audio blocks */
1513 2474 channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
1514
2/2
✓ Branch 0 taken 159 times.
✓ Branch 1 taken 2315 times.
2474 offset = s->frame_type == EAC3_FRAME_TYPE_DEPENDENT ? AC3_MAX_CHANNELS : 0;
1515
2/2
✓ Branch 0 taken 17318 times.
✓ Branch 1 taken 2474 times.
19792 for (ch = 0; ch < AC3_MAX_CHANNELS; ch++) {
1516 17318 output[ch] = s->output[ch + offset];
1517 17318 s->outptr[ch] = s->output[ch + offset];
1518 }
1519
2/2
✓ Branch 0 taken 8175 times.
✓ Branch 1 taken 2474 times.
10649 for (ch = 0; ch < s->channels; ch++) {
1520
2/2
✓ Branch 0 taken 6645 times.
✓ Branch 1 taken 1530 times.
8175 if (ch < s->out_channels)
1521 6645 s->outptr[channel_map[ch]] = s->output_buffer[ch + offset];
1522 }
1523
2/2
✓ Branch 0 taken 14354 times.
✓ Branch 1 taken 2474 times.
16828 for (blk = 0; blk < s->num_blocks; blk++) {
1524
3/4
✓ Branch 0 taken 14312 times.
✓ Branch 1 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 14312 times.
14354 if (!err && decode_audio_block(s, blk, offset)) {
1525 av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
1526 err = 1;
1527 }
1528
2/2
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 14312 times.
14354 if (err)
1529
2/2
✓ Branch 0 taken 96 times.
✓ Branch 1 taken 42 times.
138 for (ch = 0; ch < s->out_channels; ch++)
1530 96 memcpy(s->output_buffer[ch + offset] + AC3_BLOCK_SIZE*blk, output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1531
2/2
✓ Branch 0 taken 36930 times.
✓ Branch 1 taken 14354 times.
51284 for (ch = 0; ch < s->out_channels; ch++)
1532 36930 output[ch] = s->outptr[channel_map[ch]];
1533
2/2
✓ Branch 0 taken 36930 times.
✓ Branch 1 taken 14354 times.
51284 for (ch = 0; ch < s->out_channels; ch++) {
1534
3/4
✓ Branch 0 taken 22576 times.
✓ Branch 1 taken 14354 times.
✓ Branch 2 taken 22576 times.
✗ Branch 3 not taken.
36930 if (!ch || channel_map[ch])
1535 36930 s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
1536 }
1537 }
1538
1539 /* keep last block for error concealment in next frame */
1540
2/2
✓ Branch 0 taken 6645 times.
✓ Branch 1 taken 2474 times.
9119 for (ch = 0; ch < s->out_channels; ch++)
1541 6645 memcpy(s->output[ch + offset], output[ch], AC3_BLOCK_SIZE*sizeof(SHORTFLOAT));
1542
1543 /* check if there is dependent frame */
1544
2/2
✓ Branch 0 taken 159 times.
✓ Branch 1 taken 2315 times.
2474 if (buf_size > s->frame_size) {
1545 AC3HeaderInfo hdr;
1546 int err;
1547
1548
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 159 times.
159 if (buf_size - s->frame_size <= 16) {
1549 skip = buf_size - s->frame_size;
1550 goto skip;
1551 }
1552
1553
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 159 times.
159 if ((ret = init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0)
1554 return ret;
1555
1556 159 err = ff_ac3_parse_header(&s->gbc, &hdr);
1557
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 159 times.
159 if (err)
1558 return err;
1559
1560
1/2
✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
159 if (hdr.frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
1561
2/4
✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 159 times.
159 if (hdr.num_blocks != s->num_blocks || s->sample_rate != hdr.sample_rate) {
1562 av_log(avctx, AV_LOG_WARNING, "Ignoring non-compatible dependent frame.\n");
1563 } else {
1564 159 buf += s->frame_size;
1565 159 buf_size -= s->frame_size;
1566 159 s->prev_output_mode = s->output_mode;
1567 159 s->prev_bit_rate = s->bit_rate;
1568 159 got_independent_frame = 1;
1569 159 goto dependent_frame;
1570 }
1571 }
1572 }
1573 2315 skip:
1574
1575 2315 frame->decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
1576
1577 /* if frame is ok, set audio parameters */
1578
2/2
✓ Branch 0 taken 2308 times.
✓ Branch 1 taken 7 times.
2315 if (!err) {
1579 2308 avctx->sample_rate = s->sample_rate;
1580 2308 avctx->bit_rate = s->bit_rate + s->prev_bit_rate;
1581
2/2
✓ Branch 0 taken 159 times.
✓ Branch 1 taken 2149 times.
2308 avctx->profile = s->eac3_extension_type_a == 1 ? AV_PROFILE_EAC3_DDP_ATMOS : AV_PROFILE_UNKNOWN;
1582 }
1583
1584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2315 times.
2315 if (!avctx->sample_rate) {
1585 av_log(avctx, AV_LOG_ERROR, "Could not determine the sample rate\n");
1586 return AVERROR_INVALIDDATA;
1587 }
1588
1589
2/2
✓ Branch 0 taken 37040 times.
✓ Branch 1 taken 2315 times.
39355 for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++)
1590 37040 extended_channel_map[ch] = ch;
1591
1592
2/2
✓ Branch 0 taken 159 times.
✓ Branch 1 taken 2156 times.
2315 if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
1593 159 uint64_t ich_layout = ff_ac3_channel_layout_tab[s->prev_output_mode & ~AC3_OUTPUT_LFEON];
1594 159 int channel_map_size = ff_ac3_channels_tab[s->output_mode & ~AC3_OUTPUT_LFEON] + s->lfe_on;
1595 uint64_t channel_layout;
1596 159 int extend = 0;
1597
1598
1/2
✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
159 if (s->prev_output_mode & AC3_OUTPUT_LFEON)
1599 159 ich_layout |= AV_CH_LOW_FREQUENCY;
1600
1601 159 channel_layout = ich_layout;
1602
2/2
✓ Branch 0 taken 2544 times.
✓ Branch 1 taken 159 times.
2703 for (ch = 0; ch < 16; ch++) {
1603
2/2
✓ Branch 0 taken 477 times.
✓ Branch 1 taken 2067 times.
2544 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1604 477 channel_layout |= ff_eac3_custom_channel_map_locations[ch][1];
1605 }
1606 }
1607
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 159 times.
159 if (av_popcount64(channel_layout) > EAC3_MAX_CHANNELS) {
1608 av_log(avctx, AV_LOG_ERROR, "Too many channels (%d) coded\n",
1609 av_popcount64(channel_layout));
1610 return AVERROR_INVALIDDATA;
1611 }
1612
1613 159 av_channel_layout_uninit(&avctx->ch_layout);
1614 159 av_channel_layout_from_mask(&avctx->ch_layout, channel_layout);
1615
1616
2/2
✓ Branch 0 taken 2544 times.
✓ Branch 1 taken 159 times.
2703 for (ch = 0; ch < EAC3_MAX_CHANNELS; ch++) {
1617
2/2
✓ Branch 0 taken 477 times.
✓ Branch 1 taken 2067 times.
2544 if (s->channel_map & (1 << (EAC3_MAX_CHANNELS - ch - 1))) {
1618
2/2
✓ Branch 0 taken 318 times.
✓ Branch 1 taken 159 times.
477 if (ff_eac3_custom_channel_map_locations[ch][0]) {
1619 318 int index = av_channel_layout_index_from_channel(&avctx->ch_layout,
1620 318 ff_ctzll(ff_eac3_custom_channel_map_locations[ch][1]));
1621
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 318 times.
318 if (index < 0)
1622 return AVERROR_INVALIDDATA;
1623
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 318 times.
318 if (extend >= channel_map_size)
1624 break;
1625
1626 318 extended_channel_map[index] = offset + channel_map[extend++];
1627 } else {
1628 int i;
1629
1630
2/2
✓ Branch 0 taken 10176 times.
✓ Branch 1 taken 159 times.
10335 for (i = 0; i < 64; i++) {
1631
2/2
✓ Branch 0 taken 318 times.
✓ Branch 1 taken 9858 times.
10176 if ((1ULL << i) & ff_eac3_custom_channel_map_locations[ch][1]) {
1632 318 int index = av_channel_layout_index_from_channel(&avctx->ch_layout, i);
1633
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 318 times.
318 if (index < 0)
1634 return AVERROR_INVALIDDATA;
1635
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 318 times.
318 if (extend >= channel_map_size)
1636 break;
1637
1638 318 extended_channel_map[index] = offset + channel_map[extend++];
1639 }
1640 }
1641 }
1642 }
1643 }
1644
1645 159 ac3_downmix(avctx);
1646 }
1647
1648 /* get output buffer */
1649 2315 frame->nb_samples = s->num_blocks * AC3_BLOCK_SIZE;
1650
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2315 times.
2315 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1651 return ret;
1652
1653
2/2
✓ Branch 0 taken 6327 times.
✓ Branch 1 taken 2315 times.
8642 for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
1654 6327 int map = extended_channel_map[ch];
1655
2/4
✓ Branch 0 taken 6327 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 6327 times.
6327 av_assert0(ch>=AV_NUM_DATA_POINTERS || frame->extended_data[ch] == frame->data[ch]);
1656 6327 memcpy((SHORTFLOAT *)frame->extended_data[ch],
1657 6327 s->output_buffer[map],
1658 6327 s->num_blocks * AC3_BLOCK_SIZE * sizeof(SHORTFLOAT));
1659 }
1660
1661 /*
1662 * AVMatrixEncoding
1663 *
1664 * Check whether the input layout is compatible, and make sure we're not
1665 * downmixing (else the matrix encoding is no longer applicable).
1666 */
1667 2315 matrix_encoding = AV_MATRIX_ENCODING_NONE;
1668
2/2
✓ Branch 0 taken 1458 times.
✓ Branch 1 taken 857 times.
2315 if (s->channel_mode == AC3_CHMODE_STEREO &&
1669
1/2
✓ Branch 0 taken 1458 times.
✗ Branch 1 not taken.
1458 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1670
2/2
✓ Branch 0 taken 494 times.
✓ Branch 1 taken 964 times.
1458 if (s->dolby_surround_mode == AC3_DSURMOD_ON)
1671 494 matrix_encoding = AV_MATRIX_ENCODING_DOLBY;
1672
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 964 times.
964 else if (s->dolby_headphone_mode == AC3_DHEADPHONMOD_ON)
1673 matrix_encoding = AV_MATRIX_ENCODING_DOLBYHEADPHONE;
1674
2/2
✓ Branch 0 taken 443 times.
✓ Branch 1 taken 414 times.
857 } else if (s->channel_mode >= AC3_CHMODE_2F2R &&
1675
2/2
✓ Branch 0 taken 215 times.
✓ Branch 1 taken 228 times.
443 s->channel_mode == (s->output_mode & ~AC3_OUTPUT_LFEON)) {
1676
1/3
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 215 times.
215 switch (s->dolby_surround_ex_mode) {
1677 case AC3_DSUREXMOD_ON: // EX or PLIIx
1678 matrix_encoding = AV_MATRIX_ENCODING_DOLBYEX;
1679 break;
1680 case AC3_DSUREXMOD_PLIIZ:
1681 matrix_encoding = AV_MATRIX_ENCODING_DPLIIZ;
1682 break;
1683 215 default: // not indicated or off
1684 215 break;
1685 }
1686 }
1687
3/4
✓ Branch 0 taken 494 times.
✓ Branch 1 taken 1821 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 494 times.
2809 if (matrix_encoding != AV_MATRIX_ENCODING_NONE &&
1688 494 (ret = ff_side_data_update_matrix_encoding(frame, matrix_encoding)) < 0)
1689 return ret;
1690
1691 /* AVDownmixInfo */
1692
2/2
✓ Branch 0 taken 854 times.
✓ Branch 1 taken 1461 times.
2315 if ( (s->channel_mode > AC3_CHMODE_STEREO) &&
1693
2/2
✓ Branch 0 taken 437 times.
✓ Branch 1 taken 417 times.
854 ((s->output_mode & ~AC3_OUTPUT_LFEON) > AC3_CHMODE_STEREO)) {
1694 437 AVDownmixInfo *downmix_info = av_downmix_info_update_side_data(frame);
1695
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 437 times.
437 if (!downmix_info)
1696 return AVERROR(ENOMEM);
1697
3/4
✓ Branch 0 taken 48 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 98 times.
✓ Branch 3 taken 291 times.
437 switch (s->preferred_downmix) {
1698 48 case AC3_DMIXMOD_LTRT:
1699 48 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_LTRT;
1700 48 break;
1701 case AC3_DMIXMOD_LORO:
1702 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_LORO;
1703 break;
1704 98 case AC3_DMIXMOD_DPLII:
1705 98 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_DPLII;
1706 98 break;
1707 291 default:
1708 291 downmix_info->preferred_downmix_type = AV_DOWNMIX_TYPE_UNKNOWN;
1709 291 break;
1710 }
1711 437 downmix_info->center_mix_level = ff_ac3_gain_levels[s-> center_mix_level];
1712 437 downmix_info->center_mix_level_ltrt = ff_ac3_gain_levels[s-> center_mix_level_ltrt];
1713 437 downmix_info->surround_mix_level = ff_ac3_gain_levels[s-> surround_mix_level];
1714 437 downmix_info->surround_mix_level_ltrt = ff_ac3_gain_levels[s->surround_mix_level_ltrt];
1715
2/2
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 291 times.
437 if (s->lfe_mix_level_exists)
1716 146 downmix_info->lfe_mix_level = ff_eac3_gain_levels_lfe[s->lfe_mix_level];
1717 else
1718 291 downmix_info->lfe_mix_level = 0.0; // -inf dB
1719 }
1720
1721 2315 *got_frame_ptr = 1;
1722
1723
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2315 times.
2315 if (!s->superframe_size)
1724 return FFMIN(full_buf_size, s->frame_size + skip);
1725
1726 2315 return FFMIN(full_buf_size, s->superframe_size + skip);
1727 }
1728
1729 /**
1730 * Uninitialize the AC-3 decoder.
1731 */
1732 101 static av_cold int ac3_decode_end(AVCodecContext *avctx)
1733 {
1734 101 AC3DecodeContext *s = avctx->priv_data;
1735 101 av_tx_uninit(&s->tx_256);
1736 101 av_tx_uninit(&s->tx_128);
1737 101 av_freep(&s->fdsp);
1738 101 av_freep(&s->downmix_coeffs[0]);
1739
1740 101 return 0;
1741 }
1742
1743 #define OFFSET(x) offsetof(AC3DecodeContext, x)
1744 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
1745