FFmpeg coverage


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