FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ac3dec.c
Date: 2026-08-11 17:55:23
Exec Total Coverage
Lines: 809 996 81.2%
Functions: 24 25 96.0%
Branches: 549 717 76.6%

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