FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ac3dec.c
Date: 2025-03-08 20:38:41
Exec Total Coverage
Lines: 837 1020 82.1%
Functions: 25 25 100.0%
Branches: 562 732 76.8%

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