FFmpeg coverage


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