FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/ac3dec.c
Date: 2024-11-20 23:03:26
Exec Total Coverage
Lines: 816 996 81.9%
Functions: 24 24 100.0%
Branches: 551 720 76.5%

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