FFmpeg coverage


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