Coverage Report

Created: 2026-02-26 06:56

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/sbr_syntax.c
Line
Count
Source
1
/*
2
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
4
**
5
** This program is free software; you can redistribute it and/or modify
6
** it under the terms of the GNU General Public License as published by
7
** the Free Software Foundation; either version 2 of the License, or
8
** (at your option) any later version.
9
**
10
** This program is distributed in the hope that it will be useful,
11
** but WITHOUT ANY WARRANTY; without even the implied warranty of
12
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
** GNU General Public License for more details.
14
**
15
** You should have received a copy of the GNU General Public License
16
** along with this program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
**
19
** Any non-GPL usage of this software or parts of this software is strictly
20
** forbidden.
21
**
22
** The "appropriate copyright message" mentioned in section 2c of the GPLv2
23
** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
24
**
25
** Commercial non-GPL licensing of this software is possible.
26
** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
27
**
28
** $Id: sbr_syntax.c,v 1.39 2009/01/26 22:32:31 menno Exp $
29
**/
30
31
#include "common.h"
32
#include "structs.h"
33
34
#ifdef SBR_DEC
35
36
#include "sbr_syntax.h"
37
#include "syntax.h"
38
#include "sbr_huff.h"
39
#include "sbr_fbt.h"
40
#include "sbr_tf_grid.h"
41
#include "sbr_e_nf.h"
42
#include "bits.h"
43
#ifdef PS_DEC
44
#include "ps_dec.h"
45
#endif
46
#ifdef DRM_PS
47
#include "drm_dec.h"
48
#endif
49
#include "analysis.h"
50
51
/* static function declarations */
52
/* static function declarations */
53
static void sbr_header(bitfile *ld, sbr_info *sbr);
54
static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_freq,
55
                               uint8_t samplerate_mode, uint8_t freq_scale,
56
                               uint8_t alter_scale, uint8_t xover_band);
57
static uint8_t sbr_data(bitfile *ld, sbr_info *sbr);
58
static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
59
                              uint8_t bs_extension_id, uint16_t num_bits_left);
60
static uint8_t sbr_single_channel_element(bitfile *ld, sbr_info *sbr);
61
static uint8_t sbr_channel_pair_element(bitfile *ld, sbr_info *sbr);
62
static uint8_t sbr_grid(bitfile *ld, sbr_info *sbr, uint8_t ch);
63
static void sbr_dtdf(bitfile *ld, sbr_info *sbr, uint8_t ch);
64
static void invf_mode(bitfile *ld, sbr_info *sbr, uint8_t ch);
65
static void sinusoidal_coding(bitfile *ld, sbr_info *sbr, uint8_t ch);
66
67
68
static void sbr_reset(sbr_info *sbr)
69
91.5k
{
70
#if 0
71
    printf("%d\n", sbr->bs_start_freq_prev);
72
    printf("%d\n", sbr->bs_stop_freq_prev);
73
    printf("%d\n", sbr->bs_freq_scale_prev);
74
    printf("%d\n", sbr->bs_alter_scale_prev);
75
    printf("%d\n", sbr->bs_xover_band_prev);
76
    printf("%d\n\n", sbr->bs_noise_bands_prev);
77
#endif
78
79
    /* if these are different from the previous frame: Reset = 1 */
80
91.5k
    if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) ||
81
2.42k
        (sbr->bs_stop_freq != sbr->bs_stop_freq_prev) ||
82
2.19k
        (sbr->bs_freq_scale != sbr->bs_freq_scale_prev) ||
83
1.96k
        (sbr->bs_alter_scale != sbr->bs_alter_scale_prev) ||
84
1.80k
        (sbr->bs_xover_band != sbr->bs_xover_band_prev) ||
85
1.56k
        (sbr->bs_noise_bands != sbr->bs_noise_bands_prev))
86
90.1k
    {
87
90.1k
        sbr->Reset = 1;
88
90.1k
    } else {
89
1.44k
        sbr->Reset = 0;
90
1.44k
    }
91
92
91.5k
    sbr->bs_start_freq_prev = sbr->bs_start_freq;
93
91.5k
    sbr->bs_stop_freq_prev = sbr->bs_stop_freq;
94
91.5k
    sbr->bs_freq_scale_prev = sbr->bs_freq_scale;
95
91.5k
    sbr->bs_alter_scale_prev = sbr->bs_alter_scale;
96
91.5k
    sbr->bs_xover_band_prev = sbr->bs_xover_band;
97
91.5k
    sbr->bs_noise_bands_prev = sbr->bs_noise_bands;
98
91.5k
}
99
100
static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_freq,
101
                               uint8_t samplerate_mode, uint8_t freq_scale,
102
                               uint8_t alter_scale, uint8_t xover_band)
103
138k
{
104
138k
    uint8_t result = 0;
105
138k
    uint8_t k2;
106
107
    /* calculate the Master Frequency Table */
108
138k
    sbr->k0 = qmf_start_channel(start_freq, samplerate_mode, sbr->sample_rate);
109
138k
    k2 = qmf_stop_channel(stop_freq, sbr->sample_rate, sbr->k0);
110
111
    /* check k0 and k2 */
112
138k
    if (sbr->sample_rate >= 48000)
113
66.8k
    {
114
66.8k
        if ((k2 - sbr->k0) > 32)
115
4.65k
            result += 1;
116
72.0k
    } else if (sbr->sample_rate <= 32000) {
117
62.0k
        if ((k2 - sbr->k0) > 48)
118
1.44k
            result += 1;
119
62.0k
    } else { /* (sbr->sample_rate == 44100) */
120
9.99k
        if ((k2 - sbr->k0) > 45)
121
1.25k
            result += 1;
122
9.99k
    }
123
124
138k
    if (freq_scale == 0)
125
23.2k
    {
126
23.2k
        result += master_frequency_table_fs0(sbr, sbr->k0, k2, alter_scale);
127
115k
    } else {
128
115k
        result += master_frequency_table(sbr, sbr->k0, k2, freq_scale, alter_scale);
129
115k
    }
130
138k
    result += derived_frequency_table(sbr, xover_band, k2);
131
132
138k
    result = (result > 0) ? 1 : 0;
133
134
138k
    return result;
135
138k
}
136
137
/* table 2 */
138
uint8_t sbr_extension_data(bitfile *ld, sbr_info *sbr, uint16_t cnt,
139
                           uint8_t psResetFlag)
140
38.6k
{
141
38.6k
    uint8_t result = 0;
142
38.6k
    uint16_t num_align_bits = 0;
143
38.6k
    uint16_t num_sbr_bits1 = (uint16_t)faad_get_processed_bits(ld);
144
38.6k
    uint16_t num_sbr_bits2;
145
146
38.6k
    uint8_t saved_start_freq, saved_samplerate_mode;
147
38.6k
    uint8_t saved_stop_freq, saved_freq_scale;
148
38.6k
    uint8_t saved_alter_scale, saved_xover_band;
149
150
38.6k
#if (defined(PS_DEC) || defined(DRM_PS))
151
38.6k
    if (psResetFlag)
152
20.9k
        sbr->psResetFlag = psResetFlag;
153
38.6k
#endif
154
155
38.6k
#ifdef DRM
156
38.6k
    if (!sbr->Is_DRM_SBR)
157
38.1k
#endif
158
38.1k
    {
159
38.1k
        uint8_t bs_extension_type = (uint8_t)faad_getbits(ld, 4
160
38.1k
            DEBUGVAR(1,198,"sbr_bitstream(): bs_extension_type"));
161
162
38.1k
        if (bs_extension_type == EXT_SBR_DATA_CRC)
163
18.0k
        {
164
18.0k
            sbr->bs_sbr_crc_bits = (uint16_t)faad_getbits(ld, 10
165
18.0k
                DEBUGVAR(1,199,"sbr_bitstream(): bs_sbr_crc_bits"));
166
18.0k
        }
167
38.1k
    }
168
169
    /* save old header values, in case the new ones are corrupted */
170
38.6k
    saved_start_freq = sbr->bs_start_freq;
171
38.6k
    saved_samplerate_mode = sbr->bs_samplerate_mode;
172
38.6k
    saved_stop_freq = sbr->bs_stop_freq;
173
38.6k
    saved_freq_scale = sbr->bs_freq_scale;
174
38.6k
    saved_alter_scale = sbr->bs_alter_scale;
175
38.6k
    saved_xover_band = sbr->bs_xover_band;
176
177
38.6k
    sbr->bs_header_flag = faad_get1bit(ld
178
38.6k
        DEBUGVAR(1,200,"sbr_bitstream(): bs_header_flag"));
179
180
38.6k
    if (sbr->bs_header_flag)
181
37.7k
        sbr_header(ld, sbr);
182
183
    /* Reset? */
184
38.6k
    sbr_reset(sbr);
185
186
    /* first frame should have a header */
187
    //if (!(sbr->frame == 0 && sbr->bs_header_flag == 0))
188
38.6k
    if (sbr->header_count != 0)
189
38.0k
    {
190
38.0k
        if (sbr->Reset || (sbr->bs_header_flag && sbr->just_seeked))
191
37.5k
        {
192
37.5k
            uint8_t rt = calc_sbr_tables(sbr, sbr->bs_start_freq, sbr->bs_stop_freq,
193
37.5k
                sbr->bs_samplerate_mode, sbr->bs_freq_scale,
194
37.5k
                sbr->bs_alter_scale, sbr->bs_xover_band);
195
196
            /* if an error occured with the new header values revert to the old ones */
197
37.5k
            if (rt > 0)
198
11.4k
            {
199
11.4k
                result += calc_sbr_tables(sbr, saved_start_freq, saved_stop_freq,
200
11.4k
                    saved_samplerate_mode, saved_freq_scale,
201
11.4k
                    saved_alter_scale, saved_xover_band);
202
11.4k
            }
203
37.5k
        }
204
205
38.0k
        if (result == 0)
206
35.7k
        {
207
35.7k
            result = sbr_data(ld, sbr);
208
209
            /* sbr_data() returning an error means that there was an error in
210
               envelope_time_border_vector().
211
               In this case the old time border vector is saved and all the previous
212
               data normally read after sbr_grid() is saved.
213
            */
214
            /* to be on the safe side, calculate old sbr tables in case of error */
215
35.7k
            if ((result > 0) &&
216
12.6k
                (sbr->Reset || (sbr->bs_header_flag && sbr->just_seeked)))
217
12.4k
            {
218
12.4k
                result += calc_sbr_tables(sbr, saved_start_freq, saved_stop_freq,
219
12.4k
                    saved_samplerate_mode, saved_freq_scale,
220
12.4k
                    saved_alter_scale, saved_xover_band);
221
12.4k
            }
222
223
            /* we should be able to safely set result to 0 now, */
224
            /* but practise indicates this doesn't work well */
225
35.7k
        }
226
38.0k
    } else {
227
602
        result = 1;
228
602
    }
229
230
38.6k
    num_sbr_bits2 = (uint16_t)faad_get_processed_bits(ld) - num_sbr_bits1;
231
232
    /* check if we read more bits then were available for sbr */
233
38.6k
    if (8*cnt < num_sbr_bits2)
234
24.3k
    {
235
24.3k
        faad_resetbits(ld, num_sbr_bits1 + 8u * cnt);
236
24.3k
        num_sbr_bits2 = 8*cnt;
237
238
24.3k
#ifdef PS_DEC
239
        /* turn off PS for the unfortunate case that we randomly read some
240
         * PS data that looks correct */
241
24.3k
        sbr->ps_used = 0;
242
24.3k
#endif
243
244
        /* Make sure it doesn't decode SBR in this frame, or we'll get glitches */
245
24.3k
        return 1;
246
24.3k
    }
247
248
14.2k
#ifdef DRM
249
14.2k
    if (!sbr->Is_DRM_SBR)
250
13.8k
#endif
251
13.8k
    {
252
        /* -4 does not apply, bs_extension_type is re-read in this function */
253
13.8k
        num_align_bits = 8*cnt /*- 4*/ - num_sbr_bits2;
254
255
246k
        while (num_align_bits > 7)
256
232k
        {
257
232k
            faad_getbits(ld, 8
258
232k
                DEBUGVAR(1,999,"sbr_bitstream(): num_align_bits"));
259
232k
            num_align_bits -= 8;
260
232k
        }
261
13.8k
        faad_getbits(ld, num_align_bits
262
13.8k
            DEBUGVAR(1,999,"sbr_bitstream(): num_align_bits"));
263
13.8k
    }
264
265
14.2k
    return result;
266
38.6k
}
267
268
/* table 3 */
269
static void sbr_header(bitfile *ld, sbr_info *sbr)
270
89.4k
{
271
89.4k
    uint8_t bs_header_extra_1, bs_header_extra_2;
272
273
89.4k
    sbr->header_count++;
274
275
89.4k
    sbr->bs_amp_res = faad_get1bit(ld
276
89.4k
        DEBUGVAR(1,203,"sbr_header(): bs_amp_res"));
277
278
    /* bs_start_freq and bs_stop_freq must define a fequency band that does
279
       not exceed 48 channels */
280
89.4k
    sbr->bs_start_freq = (uint8_t)faad_getbits(ld, 4
281
89.4k
        DEBUGVAR(1,204,"sbr_header(): bs_start_freq"));
282
89.4k
    sbr->bs_stop_freq = (uint8_t)faad_getbits(ld, 4
283
89.4k
        DEBUGVAR(1,205,"sbr_header(): bs_stop_freq"));
284
89.4k
    sbr->bs_xover_band = (uint8_t)faad_getbits(ld, 3
285
89.4k
        DEBUGVAR(1,206,"sbr_header(): bs_xover_band"));
286
89.4k
    faad_getbits(ld, 2
287
89.4k
        DEBUGVAR(1,207,"sbr_header(): bs_reserved_bits_hdr"));
288
89.4k
    bs_header_extra_1 = (uint8_t)faad_get1bit(ld
289
89.4k
        DEBUGVAR(1,208,"sbr_header(): bs_header_extra_1"));
290
89.4k
    bs_header_extra_2 = (uint8_t)faad_get1bit(ld
291
89.4k
        DEBUGVAR(1,209,"sbr_header(): bs_header_extra_2"));
292
293
89.4k
    if (bs_header_extra_1)
294
39.0k
    {
295
39.0k
        sbr->bs_freq_scale = (uint8_t)faad_getbits(ld, 2
296
39.0k
            DEBUGVAR(1,211,"sbr_header(): bs_freq_scale"));
297
39.0k
        sbr->bs_alter_scale = (uint8_t)faad_get1bit(ld
298
39.0k
            DEBUGVAR(1,212,"sbr_header(): bs_alter_scale"));
299
39.0k
        sbr->bs_noise_bands = (uint8_t)faad_getbits(ld, 2
300
39.0k
            DEBUGVAR(1,213,"sbr_header(): bs_noise_bands"));
301
50.3k
    } else {
302
        /* Default values */
303
50.3k
        sbr->bs_freq_scale = 2;
304
50.3k
        sbr->bs_alter_scale = 1;
305
50.3k
        sbr->bs_noise_bands = 2;
306
50.3k
    }
307
308
89.4k
    if (bs_header_extra_2)
309
27.6k
    {
310
27.6k
        sbr->bs_limiter_bands = (uint8_t)faad_getbits(ld, 2
311
27.6k
            DEBUGVAR(1,214,"sbr_header(): bs_limiter_bands"));
312
27.6k
        sbr->bs_limiter_gains = (uint8_t)faad_getbits(ld, 2
313
27.6k
            DEBUGVAR(1,215,"sbr_header(): bs_limiter_gains"));
314
27.6k
        sbr->bs_interpol_freq = (uint8_t)faad_get1bit(ld
315
27.6k
            DEBUGVAR(1,216,"sbr_header(): bs_interpol_freq"));
316
27.6k
        sbr->bs_smoothing_mode = (uint8_t)faad_get1bit(ld
317
27.6k
            DEBUGVAR(1,217,"sbr_header(): bs_smoothing_mode"));
318
61.7k
    } else {
319
        /* Default values */
320
61.7k
        sbr->bs_limiter_bands = 2;
321
61.7k
        sbr->bs_limiter_gains = 2;
322
61.7k
        sbr->bs_interpol_freq = 1;
323
61.7k
        sbr->bs_smoothing_mode = 1;
324
61.7k
    }
325
326
#if 0
327
    /* print the header to screen */
328
    printf("bs_amp_res: %d\n", sbr->bs_amp_res);
329
    printf("bs_start_freq: %d\n", sbr->bs_start_freq);
330
    printf("bs_stop_freq: %d\n", sbr->bs_stop_freq);
331
    printf("bs_xover_band: %d\n", sbr->bs_xover_band);
332
    if (bs_header_extra_1)
333
    {
334
        printf("bs_freq_scale: %d\n", sbr->bs_freq_scale);
335
        printf("bs_alter_scale: %d\n", sbr->bs_alter_scale);
336
        printf("bs_noise_bands: %d\n", sbr->bs_noise_bands);
337
    }
338
    if (bs_header_extra_2)
339
    {
340
        printf("bs_limiter_bands: %d\n", sbr->bs_limiter_bands);
341
        printf("bs_limiter_gains: %d\n", sbr->bs_limiter_gains);
342
        printf("bs_interpol_freq: %d\n", sbr->bs_interpol_freq);
343
        printf("bs_smoothing_mode: %d\n", sbr->bs_smoothing_mode);
344
    }
345
    printf("\n");
346
#endif
347
89.4k
}
348
349
/* table 4 */
350
static uint8_t sbr_data(bitfile *ld, sbr_info *sbr)
351
84.3k
{
352
84.3k
    uint8_t result;
353
#if 0
354
    sbr->bs_samplerate_mode = faad_get1bit(ld
355
        DEBUGVAR(1,219,"sbr_data(): bs_samplerate_mode"));
356
#endif
357
358
84.3k
    sbr->rate = (sbr->bs_samplerate_mode) ? 2 : 1;
359
360
84.3k
    switch (sbr->id_aac)
361
84.3k
    {
362
49.3k
    case ID_SCE:
363
49.3k
    if ((result = sbr_single_channel_element(ld, sbr)) > 0)
364
19.8k
      return result;
365
29.5k
        break;
366
34.3k
    case ID_CPE:
367
34.3k
    if ((result = sbr_channel_pair_element(ld, sbr)) > 0)
368
4.94k
      return result;
369
29.3k
        break;
370
84.3k
    }
371
372
59.6k
  return 0;
373
84.3k
}
374
375
/* table 5 */
376
static uint8_t sbr_single_channel_element(bitfile *ld, sbr_info *sbr)
377
49.3k
{
378
49.3k
    uint8_t result;
379
380
49.3k
    if (faad_get1bit(ld
381
49.3k
        DEBUGVAR(1,220,"sbr_single_channel_element(): bs_data_extra")))
382
10.0k
    {
383
10.0k
        faad_getbits(ld, 4
384
10.0k
            DEBUGVAR(1,221,"sbr_single_channel_element(): bs_reserved_bits_data"));
385
10.0k
    }
386
387
#ifdef DRM
388
    /* bs_coupling, from sbr_channel_pair_base_element(bs_amp_res) */
389
19.4k
    if (sbr->Is_DRM_SBR)
390
386
    {
391
386
        faad_get1bit(ld);
392
386
    }
393
#endif
394
395
49.3k
    if ((result = sbr_grid(ld, sbr, 0)) > 0)
396
2.58k
        return result;
397
398
46.7k
    sbr_dtdf(ld, sbr, 0);
399
46.7k
    invf_mode(ld, sbr, 0);
400
46.7k
    sbr_envelope(ld, sbr, 0);
401
46.7k
    sbr_noise(ld, sbr, 0);
402
403
#ifndef FIXED_POINT
404
    envelope_noise_dequantisation(sbr, 0);
405
#endif
406
407
46.7k
    memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));
408
409
46.7k
    sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld
410
46.7k
        DEBUGVAR(1,223,"sbr_single_channel_element(): bs_add_harmonic_flag[0]"));
411
46.7k
    if (sbr->bs_add_harmonic_flag[0])
412
17.1k
        sinusoidal_coding(ld, sbr, 0);
413
414
46.7k
    sbr->bs_extended_data = faad_get1bit(ld
415
46.7k
        DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]"));
416
417
46.7k
    if (sbr->bs_extended_data)
418
29.8k
    {
419
29.8k
        uint16_t nr_bits_left;
420
29.8k
#if (defined(PS_DEC) || defined(DRM_PS))
421
29.8k
        uint8_t ps_ext_read = 0;
422
29.8k
#endif
423
29.8k
        uint16_t cnt = (uint16_t)faad_getbits(ld, 4
424
29.8k
            DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size"));
425
29.8k
        if (cnt == 15)
426
5.27k
        {
427
5.27k
            cnt += (uint16_t)faad_getbits(ld, 8
428
5.27k
                DEBUGVAR(1,226,"sbr_single_channel_element(): bs_esc_count"));
429
5.27k
        }
430
431
29.8k
        nr_bits_left = 8 * cnt;
432
673k
        while (nr_bits_left > 7)
433
660k
        {
434
660k
            uint16_t tmp_nr_bits = 0;
435
436
660k
            sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
437
660k
                DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id"));
438
660k
            tmp_nr_bits += 2;
439
440
            /* allow only 1 PS extension element per extension data */
441
660k
#if (defined(PS_DEC) || defined(DRM_PS))
442
#if (defined(PS_DEC) && defined(DRM_PS))
443
28.5k
            if (sbr->bs_extension_id == EXTENSION_ID_PS || sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
444
#else
445
#ifdef PS_DEC
446
631k
            if (sbr->bs_extension_id == EXTENSION_ID_PS)
447
#else
448
#ifdef DRM_PS
449
            if (sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
450
#endif
451
#endif
452
#endif
453
57.2k
            {
454
57.2k
                if (ps_ext_read == 0)
455
27.3k
                {
456
27.3k
                    ps_ext_read = 1;
457
29.8k
                } else {
458
                    /* to be safe make it 3, will switch to "default"
459
                     * in sbr_extension() */
460
#ifdef DRM
461
                    return 1;
462
#else
463
                    sbr->bs_extension_id = 3;
464
#endif
465
29.8k
                }
466
57.2k
            }
467
23.4k
#endif
468
469
23.4k
            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
470
471
            /* check if the data read is bigger than the number of available bits */
472
655k
            if (tmp_nr_bits > nr_bits_left)
473
12.1k
                return 1;
474
475
643k
            nr_bits_left -= tmp_nr_bits;
476
643k
        }
477
478
        /* Corrigendum */
479
12.5k
        if (nr_bits_left > 0)
480
9.19k
        {
481
9.19k
            faad_getbits(ld, nr_bits_left
482
9.19k
                DEBUGVAR(1,280,"sbr_single_channel_element(): nr_bits_left"));
483
9.19k
        }
484
12.5k
    }
485
486
29.5k
    return 0;
487
46.7k
}
sbr_syntax.c:sbr_single_channel_element
Line
Count
Source
377
19.4k
{
378
19.4k
    uint8_t result;
379
380
19.4k
    if (faad_get1bit(ld
381
19.4k
        DEBUGVAR(1,220,"sbr_single_channel_element(): bs_data_extra")))
382
4.49k
    {
383
4.49k
        faad_getbits(ld, 4
384
4.49k
            DEBUGVAR(1,221,"sbr_single_channel_element(): bs_reserved_bits_data"));
385
4.49k
    }
386
387
19.4k
#ifdef DRM
388
    /* bs_coupling, from sbr_channel_pair_base_element(bs_amp_res) */
389
19.4k
    if (sbr->Is_DRM_SBR)
390
386
    {
391
386
        faad_get1bit(ld);
392
386
    }
393
19.4k
#endif
394
395
19.4k
    if ((result = sbr_grid(ld, sbr, 0)) > 0)
396
658
        return result;
397
398
18.8k
    sbr_dtdf(ld, sbr, 0);
399
18.8k
    invf_mode(ld, sbr, 0);
400
18.8k
    sbr_envelope(ld, sbr, 0);
401
18.8k
    sbr_noise(ld, sbr, 0);
402
403
#ifndef FIXED_POINT
404
    envelope_noise_dequantisation(sbr, 0);
405
#endif
406
407
18.8k
    memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));
408
409
18.8k
    sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld
410
18.8k
        DEBUGVAR(1,223,"sbr_single_channel_element(): bs_add_harmonic_flag[0]"));
411
18.8k
    if (sbr->bs_add_harmonic_flag[0])
412
7.04k
        sinusoidal_coding(ld, sbr, 0);
413
414
18.8k
    sbr->bs_extended_data = faad_get1bit(ld
415
18.8k
        DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]"));
416
417
18.8k
    if (sbr->bs_extended_data)
418
12.3k
    {
419
12.3k
        uint16_t nr_bits_left;
420
12.3k
#if (defined(PS_DEC) || defined(DRM_PS))
421
12.3k
        uint8_t ps_ext_read = 0;
422
12.3k
#endif
423
12.3k
        uint16_t cnt = (uint16_t)faad_getbits(ld, 4
424
12.3k
            DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size"));
425
12.3k
        if (cnt == 15)
426
1.89k
        {
427
1.89k
            cnt += (uint16_t)faad_getbits(ld, 8
428
1.89k
                DEBUGVAR(1,226,"sbr_single_channel_element(): bs_esc_count"));
429
1.89k
        }
430
431
12.3k
        nr_bits_left = 8 * cnt;
432
31.6k
        while (nr_bits_left > 7)
433
28.5k
        {
434
28.5k
            uint16_t tmp_nr_bits = 0;
435
436
28.5k
            sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
437
28.5k
                DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id"));
438
28.5k
            tmp_nr_bits += 2;
439
440
            /* allow only 1 PS extension element per extension data */
441
28.5k
#if (defined(PS_DEC) || defined(DRM_PS))
442
28.5k
#if (defined(PS_DEC) && defined(DRM_PS))
443
28.5k
            if (sbr->bs_extension_id == EXTENSION_ID_PS || sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
444
#else
445
#ifdef PS_DEC
446
            if (sbr->bs_extension_id == EXTENSION_ID_PS)
447
#else
448
#ifdef DRM_PS
449
            if (sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
450
#endif
451
#endif
452
#endif
453
17.0k
            {
454
17.0k
                if (ps_ext_read == 0)
455
11.9k
                {
456
11.9k
                    ps_ext_read = 1;
457
11.9k
                } else {
458
                    /* to be safe make it 3, will switch to "default"
459
                     * in sbr_extension() */
460
5.10k
#ifdef DRM
461
5.10k
                    return 1;
462
#else
463
                    sbr->bs_extension_id = 3;
464
#endif
465
5.10k
                }
466
17.0k
            }
467
23.4k
#endif
468
469
23.4k
            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
470
471
            /* check if the data read is bigger than the number of available bits */
472
23.4k
            if (tmp_nr_bits > nr_bits_left)
473
4.16k
                return 1;
474
475
19.3k
            nr_bits_left -= tmp_nr_bits;
476
19.3k
        }
477
478
        /* Corrigendum */
479
3.09k
        if (nr_bits_left > 0)
480
2.56k
        {
481
2.56k
            faad_getbits(ld, nr_bits_left
482
2.56k
                DEBUGVAR(1,280,"sbr_single_channel_element(): nr_bits_left"));
483
2.56k
        }
484
3.09k
    }
485
486
9.54k
    return 0;
487
18.8k
}
sbr_syntax.c:sbr_single_channel_element
Line
Count
Source
377
29.8k
{
378
29.8k
    uint8_t result;
379
380
29.8k
    if (faad_get1bit(ld
381
29.8k
        DEBUGVAR(1,220,"sbr_single_channel_element(): bs_data_extra")))
382
5.60k
    {
383
5.60k
        faad_getbits(ld, 4
384
5.60k
            DEBUGVAR(1,221,"sbr_single_channel_element(): bs_reserved_bits_data"));
385
5.60k
    }
386
387
#ifdef DRM
388
    /* bs_coupling, from sbr_channel_pair_base_element(bs_amp_res) */
389
    if (sbr->Is_DRM_SBR)
390
    {
391
        faad_get1bit(ld);
392
    }
393
#endif
394
395
29.8k
    if ((result = sbr_grid(ld, sbr, 0)) > 0)
396
1.92k
        return result;
397
398
27.9k
    sbr_dtdf(ld, sbr, 0);
399
27.9k
    invf_mode(ld, sbr, 0);
400
27.9k
    sbr_envelope(ld, sbr, 0);
401
27.9k
    sbr_noise(ld, sbr, 0);
402
403
27.9k
#ifndef FIXED_POINT
404
27.9k
    envelope_noise_dequantisation(sbr, 0);
405
27.9k
#endif
406
407
27.9k
    memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));
408
409
27.9k
    sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld
410
27.9k
        DEBUGVAR(1,223,"sbr_single_channel_element(): bs_add_harmonic_flag[0]"));
411
27.9k
    if (sbr->bs_add_harmonic_flag[0])
412
10.1k
        sinusoidal_coding(ld, sbr, 0);
413
414
27.9k
    sbr->bs_extended_data = faad_get1bit(ld
415
27.9k
        DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]"));
416
417
27.9k
    if (sbr->bs_extended_data)
418
17.4k
    {
419
17.4k
        uint16_t nr_bits_left;
420
17.4k
#if (defined(PS_DEC) || defined(DRM_PS))
421
17.4k
        uint8_t ps_ext_read = 0;
422
17.4k
#endif
423
17.4k
        uint16_t cnt = (uint16_t)faad_getbits(ld, 4
424
17.4k
            DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size"));
425
17.4k
        if (cnt == 15)
426
3.38k
        {
427
3.38k
            cnt += (uint16_t)faad_getbits(ld, 8
428
3.38k
                DEBUGVAR(1,226,"sbr_single_channel_element(): bs_esc_count"));
429
3.38k
        }
430
431
17.4k
        nr_bits_left = 8 * cnt;
432
641k
        while (nr_bits_left > 7)
433
631k
        {
434
631k
            uint16_t tmp_nr_bits = 0;
435
436
631k
            sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
437
631k
                DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id"));
438
631k
            tmp_nr_bits += 2;
439
440
            /* allow only 1 PS extension element per extension data */
441
631k
#if (defined(PS_DEC) || defined(DRM_PS))
442
#if (defined(PS_DEC) && defined(DRM_PS))
443
            if (sbr->bs_extension_id == EXTENSION_ID_PS || sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
444
#else
445
631k
#ifdef PS_DEC
446
631k
            if (sbr->bs_extension_id == EXTENSION_ID_PS)
447
#else
448
#ifdef DRM_PS
449
            if (sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
450
#endif
451
#endif
452
40.2k
#endif
453
40.2k
            {
454
40.2k
                if (ps_ext_read == 0)
455
15.4k
                {
456
15.4k
                    ps_ext_read = 1;
457
24.7k
                } else {
458
                    /* to be safe make it 3, will switch to "default"
459
                     * in sbr_extension() */
460
#ifdef DRM
461
                    return 1;
462
#else
463
24.7k
                    sbr->bs_extension_id = 3;
464
24.7k
#endif
465
24.7k
                }
466
40.2k
            }
467
631k
#endif
468
469
631k
            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
470
471
            /* check if the data read is bigger than the number of available bits */
472
631k
            if (tmp_nr_bits > nr_bits_left)
473
7.99k
                return 1;
474
475
623k
            nr_bits_left -= tmp_nr_bits;
476
623k
        }
477
478
        /* Corrigendum */
479
9.46k
        if (nr_bits_left > 0)
480
6.62k
        {
481
6.62k
            faad_getbits(ld, nr_bits_left
482
6.62k
                DEBUGVAR(1,280,"sbr_single_channel_element(): nr_bits_left"));
483
6.62k
        }
484
9.46k
    }
485
486
19.9k
    return 0;
487
27.9k
}
488
489
/* table 6 */
490
static uint8_t sbr_channel_pair_element(bitfile *ld, sbr_info *sbr)
491
12.5k
{
492
12.5k
    uint8_t n, result;
493
494
12.5k
    if (faad_get1bit(ld
495
12.5k
        DEBUGVAR(1,228,"sbr_single_channel_element(): bs_data_extra")))
496
6.29k
    {
497
6.29k
        faad_getbits(ld, 4
498
6.29k
            DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_reserved_bits_data"));
499
6.29k
        faad_getbits(ld, 4
500
6.29k
            DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_reserved_bits_data"));
501
6.29k
    }
502
503
12.5k
    sbr->bs_coupling = faad_get1bit(ld
504
12.5k
        DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_coupling"));
505
506
12.5k
    if (sbr->bs_coupling)
507
5.04k
    {
508
5.04k
        if ((result = sbr_grid(ld, sbr, 0)) > 0)
509
57
            return result;
510
511
        /* need to copy some data from left to right */
512
4.98k
        sbr->bs_frame_class[1] = sbr->bs_frame_class[0];
513
4.98k
        sbr->L_E[1] = sbr->L_E[0];
514
4.98k
        sbr->L_Q[1] = sbr->L_Q[0];
515
4.98k
        sbr->bs_pointer[1] = sbr->bs_pointer[0];
516
517
26.0k
        for (n = 0; n <= sbr->L_E[0]; n++)
518
21.0k
        {
519
21.0k
            sbr->t_E[1][n] = sbr->t_E[0][n];
520
21.0k
            sbr->f[1][n] = sbr->f[0][n];
521
21.0k
        }
522
18.5k
        for (n = 0; n <= sbr->L_Q[0]; n++)
523
13.5k
            sbr->t_Q[1][n] = sbr->t_Q[0][n];
524
525
4.98k
        sbr_dtdf(ld, sbr, 0);
526
4.98k
        sbr_dtdf(ld, sbr, 1);
527
4.98k
        invf_mode(ld, sbr, 0);
528
529
        /* more copying */
530
15.9k
        for (n = 0; n < sbr->N_Q; n++)
531
10.9k
            sbr->bs_invf_mode[1][n] = sbr->bs_invf_mode[0][n];
532
533
4.98k
        sbr_envelope(ld, sbr, 0);
534
4.98k
        sbr_noise(ld, sbr, 0);
535
4.98k
        sbr_envelope(ld, sbr, 1);
536
4.98k
        sbr_noise(ld, sbr, 1);
537
538
4.98k
        memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));
539
4.98k
        memset(sbr->bs_add_harmonic[1], 0, 64*sizeof(uint8_t));
540
541
4.98k
        sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld
542
4.98k
            DEBUGVAR(1,231,"sbr_channel_pair_element(): bs_add_harmonic_flag[0]"));
543
4.98k
        if (sbr->bs_add_harmonic_flag[0])
544
1.41k
            sinusoidal_coding(ld, sbr, 0);
545
546
4.98k
        sbr->bs_add_harmonic_flag[1] = faad_get1bit(ld
547
4.98k
            DEBUGVAR(1,232,"sbr_channel_pair_element(): bs_add_harmonic_flag[1]"));
548
4.98k
        if (sbr->bs_add_harmonic_flag[1])
549
1.60k
            sinusoidal_coding(ld, sbr, 1);
550
7.54k
    } else {
551
7.54k
        uint8_t saved_t_E[6] = {0}, saved_t_Q[3] = {0};
552
7.54k
        uint8_t saved_L_E = sbr->L_E[0];
553
7.54k
        uint8_t saved_L_Q = sbr->L_Q[0];
554
7.54k
        uint8_t saved_frame_class = sbr->bs_frame_class[0];
555
556
9.76k
        for (n = 0; n < saved_L_E; n++)
557
2.21k
            saved_t_E[n] = sbr->t_E[0][n];
558
8.71k
        for (n = 0; n < saved_L_Q; n++)
559
1.16k
            saved_t_Q[n] = sbr->t_Q[0][n];
560
561
7.54k
        if ((result = sbr_grid(ld, sbr, 0)) > 0)
562
127
            return result;
563
7.42k
        if ((result = sbr_grid(ld, sbr, 1)) > 0)
564
288
        {
565
            /* restore first channel data as well */
566
288
            sbr->bs_frame_class[0] = saved_frame_class;
567
288
            sbr->L_E[0] = saved_L_E;
568
288
            sbr->L_Q[0] = saved_L_Q;
569
2.01k
            for (n = 0; n < 6; n++)
570
1.72k
                sbr->t_E[0][n] = saved_t_E[n];
571
1.15k
            for (n = 0; n < 3; n++)
572
864
                sbr->t_Q[0][n] = saved_t_Q[n];
573
574
288
            return result;
575
288
        }
576
7.13k
        sbr_dtdf(ld, sbr, 0);
577
7.13k
        sbr_dtdf(ld, sbr, 1);
578
7.13k
        invf_mode(ld, sbr, 0);
579
7.13k
        invf_mode(ld, sbr, 1);
580
7.13k
        sbr_envelope(ld, sbr, 0);
581
7.13k
        sbr_envelope(ld, sbr, 1);
582
7.13k
        sbr_noise(ld, sbr, 0);
583
7.13k
        sbr_noise(ld, sbr, 1);
584
585
7.13k
        memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));
586
7.13k
        memset(sbr->bs_add_harmonic[1], 0, 64*sizeof(uint8_t));
587
588
7.13k
        sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld
589
7.13k
            DEBUGVAR(1,239,"sbr_channel_pair_element(): bs_add_harmonic_flag[0]"));
590
7.13k
        if (sbr->bs_add_harmonic_flag[0])
591
3.66k
            sinusoidal_coding(ld, sbr, 0);
592
593
7.13k
        sbr->bs_add_harmonic_flag[1] = faad_get1bit(ld
594
7.13k
            DEBUGVAR(1,240,"sbr_channel_pair_element(): bs_add_harmonic_flag[1]"));
595
7.13k
        if (sbr->bs_add_harmonic_flag[1])
596
2.72k
            sinusoidal_coding(ld, sbr, 1);
597
7.13k
    }
598
#ifndef FIXED_POINT
599
    envelope_noise_dequantisation(sbr, 0);
600
    envelope_noise_dequantisation(sbr, 1);
601
602
    if (sbr->bs_coupling)
603
        unmap_envelope_noise(sbr);
604
#endif
605
606
12.1k
    sbr->bs_extended_data = faad_get1bit(ld
607
12.1k
        DEBUGVAR(1,233,"sbr_channel_pair_element(): bs_extended_data[0]"));
608
12.1k
    if (sbr->bs_extended_data)
609
4.91k
    {
610
4.91k
        uint16_t nr_bits_left;
611
4.91k
        uint16_t cnt = (uint16_t)faad_getbits(ld, 4
612
4.91k
            DEBUGVAR(1,234,"sbr_channel_pair_element(): bs_extension_size"));
613
4.91k
        if (cnt == 15)
614
2.97k
        {
615
2.97k
            cnt += (uint16_t)faad_getbits(ld, 8
616
2.97k
                DEBUGVAR(1,235,"sbr_channel_pair_element(): bs_esc_count"));
617
2.97k
        }
618
619
4.91k
        nr_bits_left = 8 * cnt;
620
685k
        while (nr_bits_left > 7)
621
681k
        {
622
681k
            uint16_t tmp_nr_bits = 0;
623
624
681k
            sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
625
681k
                DEBUGVAR(1,236,"sbr_channel_pair_element(): bs_extension_id"));
626
681k
            tmp_nr_bits += 2;
627
681k
            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
628
629
            /* check if the data read is bigger than the number of available bits */
630
681k
            if (tmp_nr_bits > nr_bits_left)
631
964
                return 1;
632
633
680k
            nr_bits_left -= tmp_nr_bits;
634
680k
        }
635
636
        /* Corrigendum */
637
3.94k
        if (nr_bits_left > 0)
638
2.60k
        {
639
2.60k
            faad_getbits(ld, nr_bits_left
640
2.60k
                DEBUGVAR(1,280,"sbr_channel_pair_element(): nr_bits_left"));
641
2.60k
        }
642
3.94k
    }
643
644
11.1k
    return 0;
645
12.1k
}
646
647
/* integer log[2](x): input range [0,10) */
648
static uint8_t sbr_log2(const uint8_t val)
649
64.9k
{
650
64.9k
    uint8_t log2tab[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4 };
651
64.9k
    if (val < 10 && val >= 0)
652
64.9k
        return log2tab[val];
653
0
    else
654
0
        return 0;
655
64.9k
}
656
657
658
/* table 7 */
659
static uint8_t sbr_grid(bitfile *ld, sbr_info *sbr, uint8_t ch)
660
103k
{
661
103k
    uint8_t i, j, env, rel, result;
662
103k
    uint8_t bs_abs_bord, bs_abs_bord_1;
663
103k
    uint8_t bs_num_env = 0;
664
103k
    uint8_t saved_L_E = sbr->L_E[ch];
665
103k
    uint8_t saved_L_Q = sbr->L_Q[ch];
666
103k
    uint8_t saved_frame_class = sbr->bs_frame_class[ch];
667
668
103k
    sbr->bs_frame_class[ch] = (uint8_t)faad_getbits(ld, 2
669
103k
        DEBUGVAR(1,248,"sbr_grid(): bs_frame_class"));
670
671
103k
    switch (sbr->bs_frame_class[ch])
672
103k
    {
673
38.3k
    case FIXFIX:
674
38.3k
        i = (uint8_t)faad_getbits(ld, 2
675
38.3k
            DEBUGVAR(1,249,"sbr_grid(): bs_num_env_raw"));
676
677
38.3k
        bs_num_env = min(1u << i, 5u);
678
679
38.3k
        i = (uint8_t)faad_get1bit(ld
680
38.3k
            DEBUGVAR(1,250,"sbr_grid(): bs_freq_res_flag"));
681
105k
        for (env = 0; env < bs_num_env; env++)
682
67.6k
            sbr->f[ch][env] = i;
683
684
38.3k
        sbr->abs_bord_lead[ch] = 0;
685
38.3k
        sbr->abs_bord_trail[ch] = sbr->numTimeSlots;
686
38.3k
        sbr->n_rel_lead[ch] = bs_num_env - 1;
687
38.3k
        sbr->n_rel_trail[ch] = 0;
688
38.3k
        break;
689
690
20.9k
    case FIXVAR:
691
20.9k
        bs_abs_bord = (uint8_t)faad_getbits(ld, 2
692
20.9k
            DEBUGVAR(1,251,"sbr_grid(): bs_abs_bord")) + sbr->numTimeSlots;
693
20.9k
        bs_num_env = (uint8_t)faad_getbits(ld, 2
694
20.9k
            DEBUGVAR(1,252,"sbr_grid(): bs_num_env")) + 1;
695
696
42.4k
        for (rel = 0; rel < bs_num_env-1; rel++)
697
21.4k
        {
698
21.4k
            sbr->bs_rel_bord[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2
699
21.4k
                DEBUGVAR(1,253,"sbr_grid(): bs_rel_bord")) + 2;
700
21.4k
        }
701
20.9k
        j = bs_num_env;
702
20.9k
        i = sbr_log2(j + 1);
703
20.9k
        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i
704
20.9k
            DEBUGVAR(1,254,"sbr_grid(): bs_pointer"));
705
20.9k
        sbr->bs_pointer[ch] = min(sbr->bs_pointer[ch], j);
706
707
63.4k
        for (env = 0; env < bs_num_env; env++)
708
42.4k
        {
709
42.4k
            sbr->f[ch][bs_num_env - env - 1] = (uint8_t)faad_get1bit(ld
710
42.4k
                DEBUGVAR(1,255,"sbr_grid(): bs_freq_res"));
711
42.4k
        }
712
713
20.9k
        sbr->abs_bord_lead[ch] = 0;
714
20.9k
        sbr->abs_bord_trail[ch] = bs_abs_bord;
715
20.9k
        sbr->n_rel_lead[ch] = 0;
716
20.9k
        sbr->n_rel_trail[ch] = bs_num_env - 1;
717
20.9k
        break;
718
719
24.0k
    case VARFIX:
720
24.0k
        bs_abs_bord = (uint8_t)faad_getbits(ld, 2
721
24.0k
            DEBUGVAR(1,256,"sbr_grid(): bs_abs_bord"));
722
24.0k
        bs_num_env = (uint8_t)faad_getbits(ld, 2
723
24.0k
            DEBUGVAR(1,257,"sbr_grid(): bs_num_env")) + 1;
724
725
50.7k
        for (rel = 0; rel < bs_num_env-1; rel++)
726
26.7k
        {
727
26.7k
            sbr->bs_rel_bord[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2
728
26.7k
                DEBUGVAR(1,258,"sbr_grid(): bs_rel_bord")) + 2;
729
26.7k
        }
730
24.0k
        j = bs_num_env;
731
24.0k
        i = sbr_log2(j + 1);
732
24.0k
        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i
733
24.0k
            DEBUGVAR(1,259,"sbr_grid(): bs_pointer"));
734
24.0k
        sbr->bs_pointer[ch] = min(sbr->bs_pointer[ch], j);
735
736
74.7k
        for (env = 0; env < bs_num_env; env++)
737
50.7k
        {
738
50.7k
            sbr->f[ch][env] = (uint8_t)faad_get1bit(ld
739
50.7k
                DEBUGVAR(1,260,"sbr_grid(): bs_freq_res"));
740
50.7k
        }
741
742
24.0k
        sbr->abs_bord_lead[ch] = bs_abs_bord;
743
24.0k
        sbr->abs_bord_trail[ch] = sbr->numTimeSlots;
744
24.0k
        sbr->n_rel_lead[ch] = bs_num_env - 1;
745
24.0k
        sbr->n_rel_trail[ch] = 0;
746
24.0k
        break;
747
748
20.0k
    case VARVAR:
749
20.0k
        bs_abs_bord = (uint8_t)faad_getbits(ld, 2
750
20.0k
            DEBUGVAR(1,261,"sbr_grid(): bs_abs_bord_0"));
751
20.0k
        bs_abs_bord_1 = (uint8_t)faad_getbits(ld, 2
752
20.0k
            DEBUGVAR(1,262,"sbr_grid(): bs_abs_bord_1")) + sbr->numTimeSlots;
753
20.0k
        sbr->bs_num_rel_0[ch] = (uint8_t)faad_getbits(ld, 2
754
20.0k
            DEBUGVAR(1,263,"sbr_grid(): bs_num_rel_0"));
755
20.0k
        sbr->bs_num_rel_1[ch] = (uint8_t)faad_getbits(ld, 2
756
20.0k
            DEBUGVAR(1,264,"sbr_grid(): bs_num_rel_1"));
757
758
20.0k
        bs_num_env = min(5, sbr->bs_num_rel_0[ch] + sbr->bs_num_rel_1[ch] + 1);
759
760
50.9k
        for (rel = 0; rel < sbr->bs_num_rel_0[ch]; rel++)
761
30.9k
        {
762
30.9k
            sbr->bs_rel_bord_0[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2
763
30.9k
                DEBUGVAR(1,265,"sbr_grid(): bs_rel_bord")) + 2;
764
30.9k
        }
765
53.2k
        for(rel = 0; rel < sbr->bs_num_rel_1[ch]; rel++)
766
33.2k
        {
767
33.2k
            sbr->bs_rel_bord_1[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2
768
33.2k
                DEBUGVAR(1,266,"sbr_grid(): bs_rel_bord")) + 2;
769
33.2k
        }
770
20.0k
        j = sbr->bs_num_rel_0[ch] + sbr->bs_num_rel_1[ch] + 1;
771
20.0k
        i = sbr_log2(j + 1);
772
20.0k
        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i
773
20.0k
            DEBUGVAR(1,267,"sbr_grid(): bs_pointer"));
774
20.0k
        sbr->bs_pointer[ch] = min(sbr->bs_pointer[ch], j);
775
776
95.5k
        for (env = 0; env < bs_num_env; env++)
777
75.5k
        {
778
75.5k
            sbr->f[ch][env] = (uint8_t)faad_get1bit(ld
779
75.5k
                DEBUGVAR(1,268,"sbr_grid(): bs_freq_res"));
780
75.5k
        }
781
782
20.0k
        sbr->abs_bord_lead[ch] = bs_abs_bord;
783
20.0k
        sbr->abs_bord_trail[ch] = bs_abs_bord_1;
784
20.0k
        sbr->n_rel_lead[ch] = sbr->bs_num_rel_0[ch];
785
20.0k
        sbr->n_rel_trail[ch] = sbr->bs_num_rel_1[ch];
786
20.0k
        break;
787
103k
    }
788
789
103k
    if (sbr->bs_frame_class[ch] == VARVAR)
790
20.0k
        sbr->L_E[ch] = min(bs_num_env, 5);
791
83.2k
    else
792
83.2k
        sbr->L_E[ch] = min(bs_num_env, 4);
793
794
103k
    if (sbr->L_E[ch] <= 0)
795
0
        return 1;
796
797
103k
    if (sbr->L_E[ch] > 1)
798
51.3k
        sbr->L_Q[ch] = 2;
799
51.9k
    else
800
51.9k
        sbr->L_Q[ch] = 1;
801
802
    /* TODO: this code can probably be integrated into the code above! */
803
103k
    if ((result = envelope_time_border_vector(sbr, ch)) > 0)
804
4.03k
    {
805
4.03k
        sbr->bs_frame_class[ch] = saved_frame_class;
806
4.03k
        sbr->L_E[ch] = saved_L_E;
807
4.03k
        sbr->L_Q[ch] = saved_L_Q;
808
4.03k
        return result;
809
4.03k
    }
810
99.2k
    noise_floor_time_border_vector(sbr, ch);
811
812
#if 0
813
    for (env = 0; env < bs_num_env; env++)
814
    {
815
        printf("freq_res[ch:%d][env:%d]: %d\n", ch, env, sbr->f[ch][env]);
816
    }
817
#endif
818
819
99.2k
    return 0;
820
103k
}
821
822
/* table 8 */
823
static void sbr_dtdf(bitfile *ld, sbr_info *sbr, uint8_t ch)
824
112k
{
825
112k
    uint8_t i;
826
827
366k
    for (i = 0; i < sbr->L_E[ch]; i++)
828
254k
    {
829
254k
        sbr->bs_df_env[ch][i] = faad_get1bit(ld
830
254k
            DEBUGVAR(1,269,"sbr_dtdf(): bs_df_env"));
831
254k
    }
832
833
281k
    for (i = 0; i < sbr->L_Q[ch]; i++)
834
168k
    {
835
168k
        sbr->bs_df_noise[ch][i] = faad_get1bit(ld
836
168k
            DEBUGVAR(1,270,"sbr_dtdf(): bs_df_noise"));
837
168k
    }
838
112k
}
839
840
/* table 9 */
841
static void invf_mode(bitfile *ld, sbr_info *sbr, uint8_t ch)
842
98.4k
{
843
98.4k
    uint8_t n;
844
845
274k
    for (n = 0; n < sbr->N_Q; n++)
846
176k
    {
847
176k
        sbr->bs_invf_mode[ch][n] = (uint8_t)faad_getbits(ld, 2
848
176k
            DEBUGVAR(1,271,"invf_mode(): bs_invf_mode"));
849
176k
    }
850
98.4k
}
851
852
static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
853
                              uint8_t bs_extension_id, uint16_t num_bits_left)
854
2.37M
{
855
2.37M
#ifdef PS_DEC
856
2.37M
    uint8_t header;
857
2.37M
    uint16_t ret;
858
2.37M
#endif
859
2.37M
    (void)num_bits_left;  /* TODO: remove or actually use parameter. */
860
861
2.37M
    switch (bs_extension_id)
862
2.37M
    {
863
0
#ifdef PS_DEC
864
106k
    case EXTENSION_ID_PS:
865
106k
        if (!sbr->ps)
866
31.6k
        {
867
31.6k
            sbr->ps = ps_init(get_sr_index(sbr->sample_rate), sbr->numTimeSlotsRate);
868
31.6k
        }
869
106k
        if (sbr->psResetFlag)
870
31.0k
        {
871
31.0k
            sbr->ps->header_read = 0;
872
31.0k
        }
873
106k
        ret = ps_data(sbr->ps, ld, &header);
874
875
        /* enable PS if and only if: a header has been decoded */
876
106k
        if (sbr->ps_used == 0 && header == 1)
877
26.7k
        {
878
26.7k
            sbr->ps_used = 1;
879
26.7k
        }
880
881
106k
        if (header == 1)
882
53.0k
        {
883
53.0k
            sbr->psResetFlag = 0;
884
53.0k
        }
885
886
106k
        return ret;
887
0
#endif
888
#ifdef DRM_PS
889
1.01M
    case DRM_PARAMETRIC_STEREO:
890
        /* If not expected then only decode but do not expose. */
891
1.01M
        if (sbr->Is_DRM_SBR)
892
1.61k
        {
893
1.61k
            sbr->ps_used = 1;
894
1.61k
        }
895
1.01M
        if (!sbr->drm_ps)
896
7.70k
        {
897
7.70k
            sbr->drm_ps = drm_ps_init();
898
7.70k
        }
899
1.01M
        return drm_ps_data(sbr->drm_ps, ld);
900
0
#endif
901
1.25M
    default:
902
1.25M
        sbr->bs_extension_data = (uint8_t)faad_getbits(ld, 6
903
1.25M
            DEBUGVAR(1,279,"sbr_single_channel_element(): bs_extension_data"));
904
1.25M
        return 6;
905
2.37M
    }
906
2.37M
}
sbr_syntax.c:sbr_extension
Line
Count
Source
854
1.19M
{
855
1.19M
#ifdef PS_DEC
856
1.19M
    uint8_t header;
857
1.19M
    uint16_t ret;
858
1.19M
#endif
859
1.19M
    (void)num_bits_left;  /* TODO: remove or actually use parameter. */
860
861
1.19M
    switch (bs_extension_id)
862
1.19M
    {
863
0
#ifdef PS_DEC
864
55.0k
    case EXTENSION_ID_PS:
865
55.0k
        if (!sbr->ps)
866
13.3k
        {
867
13.3k
            sbr->ps = ps_init(get_sr_index(sbr->sample_rate), sbr->numTimeSlotsRate);
868
13.3k
        }
869
55.0k
        if (sbr->psResetFlag)
870
16.1k
        {
871
16.1k
            sbr->ps->header_read = 0;
872
16.1k
        }
873
55.0k
        ret = ps_data(sbr->ps, ld, &header);
874
875
        /* enable PS if and only if: a header has been decoded */
876
55.0k
        if (sbr->ps_used == 0 && header == 1)
877
11.3k
        {
878
11.3k
            sbr->ps_used = 1;
879
11.3k
        }
880
881
55.0k
        if (header == 1)
882
25.9k
        {
883
25.9k
            sbr->psResetFlag = 0;
884
25.9k
        }
885
886
55.0k
        return ret;
887
0
#endif
888
0
#ifdef DRM_PS
889
1.01M
    case DRM_PARAMETRIC_STEREO:
890
        /* If not expected then only decode but do not expose. */
891
1.01M
        if (sbr->Is_DRM_SBR)
892
1.61k
        {
893
1.61k
            sbr->ps_used = 1;
894
1.61k
        }
895
1.01M
        if (!sbr->drm_ps)
896
7.70k
        {
897
7.70k
            sbr->drm_ps = drm_ps_init();
898
7.70k
        }
899
1.01M
        return drm_ps_data(sbr->drm_ps, ld);
900
0
#endif
901
122k
    default:
902
122k
        sbr->bs_extension_data = (uint8_t)faad_getbits(ld, 6
903
122k
            DEBUGVAR(1,279,"sbr_single_channel_element(): bs_extension_data"));
904
122k
        return 6;
905
1.19M
    }
906
1.19M
}
sbr_syntax.c:sbr_extension
Line
Count
Source
854
1.17M
{
855
1.17M
#ifdef PS_DEC
856
1.17M
    uint8_t header;
857
1.17M
    uint16_t ret;
858
1.17M
#endif
859
1.17M
    (void)num_bits_left;  /* TODO: remove or actually use parameter. */
860
861
1.17M
    switch (bs_extension_id)
862
1.17M
    {
863
0
#ifdef PS_DEC
864
51.1k
    case EXTENSION_ID_PS:
865
51.1k
        if (!sbr->ps)
866
18.2k
        {
867
18.2k
            sbr->ps = ps_init(get_sr_index(sbr->sample_rate), sbr->numTimeSlotsRate);
868
18.2k
        }
869
51.1k
        if (sbr->psResetFlag)
870
14.8k
        {
871
14.8k
            sbr->ps->header_read = 0;
872
14.8k
        }
873
51.1k
        ret = ps_data(sbr->ps, ld, &header);
874
875
        /* enable PS if and only if: a header has been decoded */
876
51.1k
        if (sbr->ps_used == 0 && header == 1)
877
15.3k
        {
878
15.3k
            sbr->ps_used = 1;
879
15.3k
        }
880
881
51.1k
        if (header == 1)
882
27.1k
        {
883
27.1k
            sbr->psResetFlag = 0;
884
27.1k
        }
885
886
51.1k
        return ret;
887
0
#endif
888
#ifdef DRM_PS
889
    case DRM_PARAMETRIC_STEREO:
890
        /* If not expected then only decode but do not expose. */
891
        if (sbr->Is_DRM_SBR)
892
        {
893
            sbr->ps_used = 1;
894
        }
895
        if (!sbr->drm_ps)
896
        {
897
            sbr->drm_ps = drm_ps_init();
898
        }
899
        return drm_ps_data(sbr->drm_ps, ld);
900
#endif
901
1.12M
    default:
902
1.12M
        sbr->bs_extension_data = (uint8_t)faad_getbits(ld, 6
903
1.12M
            DEBUGVAR(1,279,"sbr_single_channel_element(): bs_extension_data"));
904
1.12M
        return 6;
905
1.17M
    }
906
1.17M
}
907
908
/* table 12 */
909
static void sinusoidal_coding(bitfile *ld, sbr_info *sbr, uint8_t ch)
910
39.8k
{
911
39.8k
    uint8_t n;
912
913
454k
    for (n = 0; n < sbr->N_high; n++)
914
414k
    {
915
414k
        sbr->bs_add_harmonic[ch][n] = faad_get1bit(ld
916
414k
            DEBUGVAR(1,278,"sinusoidal_coding(): bs_add_harmonic"));
917
414k
    }
918
39.8k
}
919
920
921
#endif /* SBR_DEC */