FFmpeg coverage


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