Coverage Report

Created: 2026-09-14 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/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: syntax.c,v 1.93 2009/01/26 23:51:15 menno Exp $
29
**/
30
31
/*
32
   Reads the AAC bitstream as defined in 14496-3 (MPEG-4 Audio)
33
*/
34
35
#include "common.h"
36
#include "structs.h"
37
38
#include <stdlib.h>
39
#include <stdio.h>
40
41
#include "syntax.h"
42
#include "specrec.h"
43
#include "huffman.h"
44
#include "bits.h"
45
#include "pulse.h"
46
#include "analysis.h"
47
#include "drc.h"
48
#ifdef ERROR_RESILIENCE
49
#include "rvlc.h"
50
#endif
51
#ifdef SBR_DEC
52
#include "sbr_syntax.h"
53
#endif
54
#include "mp4.h"
55
56
57
/* static function declarations */
58
static void decode_sce_lfe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
59
                           uint8_t id_syn_ele);
60
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
61
                       uint8_t id_syn_ele);
62
static uint8_t single_lfe_channel_element(NeAACDecStruct *hDecoder, bitfile *ld,
63
                                          uint8_t channel, uint8_t *tag);
64
static uint8_t channel_pair_element(NeAACDecStruct *hDecoder, bitfile *ld,
65
                                    uint8_t channel, uint8_t *tag);
66
#ifdef COUPLING_DEC
67
static uint8_t coupling_channel_element(NeAACDecStruct *hDecoder, bitfile *ld);
68
#endif
69
static uint16_t data_stream_element(NeAACDecStruct *hDecoder, bitfile *ld);
70
static uint8_t program_config_element(program_config *pce, bitfile *ld);
71
static uint8_t fill_element(NeAACDecStruct *hDecoder, bitfile *ld, drc_info *drc
72
#ifdef SBR_DEC
73
                            ,uint8_t sbr_ele
74
#endif
75
                            );
76
static uint8_t individual_channel_stream(NeAACDecStruct *hDecoder, element *ele,
77
                                         bitfile *ld, ic_stream *ics, uint8_t scal_flag,
78
                                         int16_t *spec_data);
79
static uint8_t ics_info(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
80
                        uint8_t common_window);
81
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
82
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
83
#ifdef SSR_DEC
84
static void gain_control_data(bitfile *ld, ic_stream *ics);
85
#endif
86
static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
87
                             int16_t *spectral_data);
88
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld);
89
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld);
90
#ifdef LTP_DEC
91
static uint8_t ltp_data(NeAACDecStruct *hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld);
92
#endif
93
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld);
94
static void adts_variable_header(adts_header *adts, bitfile *ld);
95
static void adts_error_check(adts_header *adts, bitfile *ld);
96
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
97
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag);
98
#ifdef DRM
99
static int8_t DRM_aac_scalable_main_header(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
100
                                           bitfile *ld, uint8_t this_layer_stereo);
101
#else
102
static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count);
103
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc);
104
static uint8_t excluded_channels(bitfile *ld, drc_info *drc);
105
#endif
106
107
108
/* Table 4.4.1 */
109
int8_t GASpecificConfig(bitfile *ld, mp4AudioSpecificConfig *mp4ASC,
110
                        program_config *pce_out)
111
9.25k
{
112
9.25k
    program_config pce;
113
114
    /* 1024 or 960 */
115
9.25k
    mp4ASC->frameLengthFlag = faad_get1bit(ld
116
9.25k
        DEBUGVAR(1,138,"GASpecificConfig(): FrameLengthFlag"));
117
#ifndef ALLOW_SMALL_FRAMELENGTH
118
    if (mp4ASC->frameLengthFlag == 1)
119
        return -3;
120
#endif
121
122
9.25k
    mp4ASC->dependsOnCoreCoder = faad_get1bit(ld
123
9.25k
        DEBUGVAR(1,139,"GASpecificConfig(): DependsOnCoreCoder"));
124
9.25k
    if (mp4ASC->dependsOnCoreCoder == 1)
125
2.70k
    {
126
2.70k
        mp4ASC->coreCoderDelay = (uint16_t)faad_getbits(ld, 14
127
2.70k
            DEBUGVAR(1,140,"GASpecificConfig(): CoreCoderDelay"));
128
2.70k
    }
129
130
9.25k
    mp4ASC->extensionFlag = faad_get1bit(ld DEBUGVAR(1,141,"GASpecificConfig(): ExtensionFlag"));
131
9.25k
    if (mp4ASC->channelsConfiguration == 0)
132
1.62k
    {
133
1.62k
        if (program_config_element(&pce, ld))
134
10
            return -3;
135
        //mp4ASC->channelsConfiguration = pce.channels;
136
137
1.61k
        if (pce_out != NULL)
138
1.39k
            memcpy(pce_out, &pce, sizeof(program_config));
139
140
        /*
141
        if (pce.num_valid_cc_elements)
142
            return -3;
143
        */
144
1.61k
    }
145
146
9.24k
#ifdef ERROR_RESILIENCE
147
9.24k
    if (mp4ASC->extensionFlag == 1)
148
6.26k
    {
149
        /* Error resilience not supported yet */
150
6.26k
        if (mp4ASC->objectTypeIndex >= ER_OBJECT_START)
151
5.37k
        {
152
5.37k
            mp4ASC->aacSectionDataResilienceFlag = faad_get1bit(ld
153
5.37k
                DEBUGVAR(1,144,"GASpecificConfig(): aacSectionDataResilienceFlag"));
154
5.37k
            mp4ASC->aacScalefactorDataResilienceFlag = faad_get1bit(ld
155
5.37k
                DEBUGVAR(1,145,"GASpecificConfig(): aacScalefactorDataResilienceFlag"));
156
5.37k
            mp4ASC->aacSpectralDataResilienceFlag = faad_get1bit(ld
157
5.37k
                DEBUGVAR(1,146,"GASpecificConfig(): aacSpectralDataResilienceFlag"));
158
5.37k
        }
159
        /* 1 bit: extensionFlag3 */
160
6.26k
        faad_getbits(ld, 1);
161
6.26k
  }
162
9.24k
#endif
163
164
9.24k
    return 0;
165
9.25k
}
166
167
/* Table 4.4.2 */
168
/* An MPEG-4 Audio decoder is only required to follow the Program
169
   Configuration Element in GASpecificConfig(). The decoder shall ignore
170
   any Program Configuration Elements that may occur in raw data blocks.
171
   PCEs transmitted in raw data blocks cannot be used to convey decoder
172
   configuration information.
173
*/
174
static uint8_t program_config_element(program_config *pce, bitfile *ld)
175
10.0k
{
176
10.0k
    uint8_t i;
177
178
10.0k
    memset(pce, 0, sizeof(program_config));
179
180
10.0k
    pce->channels = 0;
181
182
10.0k
    pce->element_instance_tag = (uint8_t)faad_getbits(ld, 4
183
10.0k
        DEBUGVAR(1,10,"program_config_element(): element_instance_tag"));
184
185
10.0k
    pce->object_type = (uint8_t)faad_getbits(ld, 2
186
10.0k
        DEBUGVAR(1,11,"program_config_element(): object_type"));
187
10.0k
    pce->sf_index = (uint8_t)faad_getbits(ld, 4
188
10.0k
        DEBUGVAR(1,12,"program_config_element(): sf_index"));
189
10.0k
    pce->num_front_channel_elements = (uint8_t)faad_getbits(ld, 4
190
10.0k
        DEBUGVAR(1,13,"program_config_element(): num_front_channel_elements"));
191
10.0k
    pce->num_side_channel_elements = (uint8_t)faad_getbits(ld, 4
192
10.0k
        DEBUGVAR(1,14,"program_config_element(): num_side_channel_elements"));
193
10.0k
    pce->num_back_channel_elements = (uint8_t)faad_getbits(ld, 4
194
10.0k
        DEBUGVAR(1,15,"program_config_element(): num_back_channel_elements"));
195
10.0k
    pce->num_lfe_channel_elements = (uint8_t)faad_getbits(ld, 2
196
10.0k
        DEBUGVAR(1,16,"program_config_element(): num_lfe_channel_elements"));
197
10.0k
    pce->num_assoc_data_elements = (uint8_t)faad_getbits(ld, 3
198
10.0k
        DEBUGVAR(1,17,"program_config_element(): num_assoc_data_elements"));
199
10.0k
    pce->num_valid_cc_elements = (uint8_t)faad_getbits(ld, 4
200
10.0k
        DEBUGVAR(1,18,"program_config_element(): num_valid_cc_elements"));
201
202
10.0k
    pce->mono_mixdown_present = faad_get1bit(ld
203
10.0k
        DEBUGVAR(1,19,"program_config_element(): mono_mixdown_present"));
204
10.0k
    if (pce->mono_mixdown_present == 1)
205
2.78k
    {
206
2.78k
        pce->mono_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
207
2.78k
            DEBUGVAR(1,20,"program_config_element(): mono_mixdown_element_number"));
208
2.78k
    }
209
210
10.0k
    pce->stereo_mixdown_present = faad_get1bit(ld
211
10.0k
        DEBUGVAR(1,21,"program_config_element(): stereo_mixdown_present"));
212
10.0k
    if (pce->stereo_mixdown_present == 1)
213
2.56k
    {
214
2.56k
        pce->stereo_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
215
2.56k
            DEBUGVAR(1,22,"program_config_element(): stereo_mixdown_element_number"));
216
2.56k
    }
217
218
10.0k
    pce->matrix_mixdown_idx_present = faad_get1bit(ld
219
10.0k
        DEBUGVAR(1,23,"program_config_element(): matrix_mixdown_idx_present"));
220
10.0k
    if (pce->matrix_mixdown_idx_present == 1)
221
2.57k
    {
222
2.57k
        pce->matrix_mixdown_idx = (uint8_t)faad_getbits(ld, 2
223
2.57k
            DEBUGVAR(1,24,"program_config_element(): matrix_mixdown_idx"));
224
2.57k
        pce->pseudo_surround_enable = faad_get1bit(ld
225
2.57k
            DEBUGVAR(1,25,"program_config_element(): pseudo_surround_enable"));
226
2.57k
    }
227
228
42.6k
    for (i = 0; i < pce->num_front_channel_elements; i++)
229
32.6k
    {
230
32.6k
        pce->front_element_is_cpe[i] = faad_get1bit(ld
231
32.6k
            DEBUGVAR(1,26,"program_config_element(): front_element_is_cpe"));
232
32.6k
        pce->front_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
233
32.6k
            DEBUGVAR(1,27,"program_config_element(): front_element_tag_select"));
234
235
32.6k
        if (pce->front_element_is_cpe[i] & 1)
236
11.2k
        {
237
11.2k
            pce->cpe_channel[pce->front_element_tag_select[i]] = pce->channels;
238
11.2k
            pce->num_front_channels += 2;
239
11.2k
            pce->channels += 2;
240
21.3k
        } else {
241
21.3k
            pce->sce_channel[pce->front_element_tag_select[i]] = pce->channels;
242
21.3k
            pce->num_front_channels++;
243
21.3k
            pce->channels++;
244
21.3k
        }
245
32.6k
    }
246
247
44.1k
    for (i = 0; i < pce->num_side_channel_elements; i++)
248
34.1k
    {
249
34.1k
        pce->side_element_is_cpe[i] = faad_get1bit(ld
250
34.1k
            DEBUGVAR(1,28,"program_config_element(): side_element_is_cpe"));
251
34.1k
        pce->side_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
252
34.1k
            DEBUGVAR(1,29,"program_config_element(): side_element_tag_select"));
253
254
34.1k
        if (pce->side_element_is_cpe[i] & 1)
255
10.6k
        {
256
10.6k
            pce->cpe_channel[pce->side_element_tag_select[i]] = pce->channels;
257
10.6k
            pce->num_side_channels += 2;
258
10.6k
            pce->channels += 2;
259
23.4k
        } else {
260
23.4k
            pce->sce_channel[pce->side_element_tag_select[i]] = pce->channels;
261
23.4k
            pce->num_side_channels++;
262
23.4k
            pce->channels++;
263
23.4k
        }
264
34.1k
    }
265
266
41.4k
    for (i = 0; i < pce->num_back_channel_elements; i++)
267
31.4k
    {
268
31.4k
        pce->back_element_is_cpe[i] = faad_get1bit(ld
269
31.4k
            DEBUGVAR(1,30,"program_config_element(): back_element_is_cpe"));
270
31.4k
        pce->back_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
271
31.4k
            DEBUGVAR(1,31,"program_config_element(): back_element_tag_select"));
272
273
31.4k
        if (pce->back_element_is_cpe[i] & 1)
274
11.0k
        {
275
11.0k
            pce->cpe_channel[pce->back_element_tag_select[i]] = pce->channels;
276
11.0k
            pce->channels += 2;
277
11.0k
            pce->num_back_channels += 2;
278
20.3k
        } else {
279
20.3k
            pce->sce_channel[pce->back_element_tag_select[i]] = pce->channels;
280
20.3k
            pce->num_back_channels++;
281
20.3k
            pce->channels++;
282
20.3k
        }
283
31.4k
    }
284
285
17.3k
    for (i = 0; i < pce->num_lfe_channel_elements; i++)
286
7.28k
    {
287
7.28k
        pce->lfe_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
288
7.28k
            DEBUGVAR(1,32,"program_config_element(): lfe_element_tag_select"));
289
290
7.28k
        pce->sce_channel[pce->lfe_element_tag_select[i]] = pce->channels;
291
7.28k
        pce->num_lfe_channels++;
292
7.28k
        pce->channels++;
293
7.28k
    }
294
295
22.8k
    for (i = 0; i < pce->num_assoc_data_elements; i++)
296
12.7k
        pce->assoc_data_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
297
12.7k
        DEBUGVAR(1,33,"program_config_element(): assoc_data_element_tag_select"));
298
299
37.3k
    for (i = 0; i < pce->num_valid_cc_elements; i++)
300
27.2k
    {
301
27.2k
        pce->cc_element_is_ind_sw[i] = faad_get1bit(ld
302
27.2k
            DEBUGVAR(1,34,"program_config_element(): cc_element_is_ind_sw"));
303
27.2k
        pce->valid_cc_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
304
27.2k
            DEBUGVAR(1,35,"program_config_element(): valid_cc_element_tag_select"));
305
27.2k
    }
306
307
10.0k
    faad_byte_align(ld);
308
309
10.0k
    pce->comment_field_bytes = (uint8_t)faad_getbits(ld, 8
310
10.0k
        DEBUGVAR(1,36,"program_config_element(): comment_field_bytes"));
311
312
90.0k
    for (i = 0; i < pce->comment_field_bytes; i++)
313
79.9k
    {
314
79.9k
        pce->comment_field_data[i] = (uint8_t)faad_getbits(ld, 8
315
79.9k
            DEBUGVAR(1,37,"program_config_element(): comment_field_data"));
316
79.9k
    }
317
10.0k
    pce->comment_field_data[i] = 0;
318
319
10.0k
    if (pce->channels > MAX_CHANNELS)
320
414
        return 22;
321
322
9.66k
    return 0;
323
10.0k
}
324
325
static void decode_sce_lfe(NeAACDecStruct *hDecoder,
326
                           NeAACDecFrameInfo *hInfo, bitfile *ld,
327
                           uint8_t id_syn_ele)
328
555k
{
329
555k
    uint8_t channels = hDecoder->fr_channels;
330
555k
    uint8_t tag = 0;
331
332
    /* One or two channels are used;
333
       exact number will be known after single_lfe_channel_element
334
    */
335
555k
    if (channels+2 > MAX_CHANNELS)
336
7.58k
    {
337
7.58k
        hInfo->error = 12;
338
7.58k
        return;
339
7.58k
    }
340
548k
    if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
341
5.77k
    {
342
5.77k
        hInfo->error = 13;
343
5.77k
        return;
344
5.77k
    }
345
346
    /* for SCE hDecoder->element_output_channels[] is not set here because this
347
       can become 2 when some form of Parametric Stereo coding is used
348
    */
349
350
542k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
351
71.6k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
352
359
    {
353
        /* element inconsistency */
354
359
        hInfo->error = 21;
355
359
        return;
356
359
    }
357
358
    /* save the syntax element id */
359
542k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
360
361
    /* decode the element */
362
542k
    hInfo->error = single_lfe_channel_element(hDecoder, ld, channels, &tag);
363
364
    /* map output channels position to internal data channels */
365
542k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
366
240k
    {
367
        /* this might be faulty when pce_set is true */
368
240k
        hDecoder->internal_channel[channels] = channels;
369
240k
        hDecoder->internal_channel[channels+1] = channels+1;
370
301k
    } else {
371
301k
        if (hDecoder->pce_set)
372
24.6k
        {
373
24.6k
            if (hDecoder->pce.channels > MAX_CHANNELS)
374
19
            {
375
19
                hInfo->error = 22;
376
19
                return;
377
19
            }
378
24.6k
            hDecoder->internal_channel[hDecoder->pce.sce_channel[tag]] = channels;
379
276k
        } else {
380
276k
            hDecoder->internal_channel[channels] = channels;
381
276k
        }
382
301k
    }
383
384
542k
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
385
542k
    hDecoder->fr_ch_ele++;
386
542k
}
387
388
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
389
                       uint8_t id_syn_ele)
390
84.0k
{
391
84.0k
    uint8_t channels = hDecoder->fr_channels;
392
84.0k
    uint8_t tag = 0;
393
394
84.0k
    if (channels+2 > MAX_CHANNELS)
395
461
    {
396
461
        hInfo->error = 12;
397
461
        return;
398
461
    }
399
83.6k
    if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
400
6
    {
401
6
        hInfo->error = 13;
402
6
        return;
403
6
    }
404
83.5k
    if (hDecoder->pce_set && (hDecoder->pce.channels > MAX_CHANNELS))
405
12
    {
406
12
        hInfo->error = 22;
407
12
        return;
408
12
    }
409
410
    /* for CPE the number of output channels is always 2 */
411
83.5k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
412
69.7k
    {
413
        /* element_output_channels not set yet */
414
69.7k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
415
69.7k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != 2) {
416
        /* element inconsistency */
417
36
        hInfo->error = 21;
418
36
        return;
419
36
    }
420
421
83.5k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
422
13.7k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
423
148
    {
424
        /* element inconsistency */
425
148
        hInfo->error = 21;
426
148
        return;
427
148
    }
428
429
    /* save the syntax element id */
430
83.4k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
431
432
    /* decode the element */
433
83.4k
    hInfo->error = channel_pair_element(hDecoder, ld, channels, &tag);
434
435
    /* map output channel position to internal data channels */
436
83.4k
    if (hDecoder->pce_set)
437
6.07k
    {
438
6.07k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]] = channels;
439
6.07k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]+1] = channels+1;
440
77.3k
    } else {
441
77.3k
        hDecoder->internal_channel[channels] = channels;
442
77.3k
        hDecoder->internal_channel[channels+1] = channels+1;
443
77.3k
    }
444
445
83.4k
    hDecoder->fr_channels += 2;
446
83.4k
    hDecoder->fr_ch_ele++;
447
83.4k
}
448
449
void raw_data_block(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo,
450
                    bitfile *ld, program_config *pce, drc_info *drc)
451
32.6k
{
452
32.6k
    uint8_t id_syn_ele;
453
32.6k
    uint8_t ele_this_frame = 0;
454
455
32.6k
    hDecoder->fr_channels = 0;
456
32.6k
    hDecoder->fr_ch_ele = 0;
457
32.6k
    hDecoder->first_syn_ele = 25;
458
32.6k
    hDecoder->has_lfe = 0;
459
460
32.6k
#ifdef ERROR_RESILIENCE
461
32.6k
    if (hDecoder->object_type < ER_OBJECT_START)
462
21.1k
    {
463
21.1k
#endif
464
        /* Table 4.4.3: raw_data_block() */
465
2.74M
        while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
466
2.74M
            DEBUGVAR(1,4,"NeAACDecDecode(): id_syn_ele"))) != ID_END)
467
2.74M
        {
468
2.74M
            switch (id_syn_ele) {
469
540k
            case ID_SCE:
470
540k
                ele_this_frame++;
471
540k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
472
540k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
473
540k
                if (hInfo->error > 0)
474
15.8k
                    return;
475
525k
                break;
476
525k
            case ID_CPE:
477
68.6k
                ele_this_frame++;
478
68.6k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
479
68.6k
                decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
480
68.6k
                if (hInfo->error > 0)
481
1.90k
                    return;
482
66.7k
                break;
483
66.7k
            case ID_LFE:
484
#ifdef DRM
485
                hInfo->error = 32;
486
#else
487
                ele_this_frame++;
488
                hDecoder->has_lfe++;
489
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
490
#endif
491
5.11k
                if (hInfo->error > 0)
492
364
                    return;
493
4.75k
                break;
494
4.75k
            case ID_CCE: /* not implemented yet, but skip the bits */
495
#ifdef DRM
496
                hInfo->error = 32;
497
#else
498
                ele_this_frame++;
499
#ifdef COUPLING_DEC
500
                hInfo->error = coupling_channel_element(hDecoder, ld);
501
#else
502
                hInfo->error = 6;
503
#endif
504
#endif
505
442
                if (hInfo->error > 0)
506
442
                    return;
507
0
                break;
508
2.09M
            case ID_DSE:
509
2.09M
                ele_this_frame++;
510
2.09M
                data_stream_element(hDecoder, ld);
511
2.09M
                break;
512
3.53k
            case ID_PCE:
513
3.53k
                if (ele_this_frame != 0)
514
309
                {
515
309
                    hInfo->error = 31;
516
309
                    return;
517
309
                }
518
3.22k
                ele_this_frame++;
519
                /* 14496-4: 5.6.4.1.2.1.3: */
520
                /* program_configuration_element()'s in access units shall be ignored */
521
3.22k
                program_config_element(pce, ld);
522
                //if ((hInfo->error = program_config_element(pce, ld)) > 0)
523
                //    return;
524
                //hDecoder->pce_set = 1;
525
3.22k
                break;
526
27.5k
            case ID_FIL:
527
27.5k
                ele_this_frame++;
528
                /* one sbr_info describes a channel_element not a channel! */
529
                /* if we encounter SBR data here: error */
530
                /* SBR data will be read directly in the SCE/LFE/CPE element */
531
27.5k
                if ((hInfo->error = fill_element(hDecoder, ld, drc
532
27.5k
#ifdef SBR_DEC
533
27.5k
                    , INVALID_SBR_ELEMENT
534
27.5k
#endif
535
27.5k
                    )) > 0)
536
244
                    return;
537
27.3k
                break;
538
2.74M
            }
539
2.72M
            if (ld->error != 0)
540
0
            {
541
0
                hInfo->error = 32;
542
0
                return;
543
0
            }
544
2.72M
        }
545
21.1k
#ifdef ERROR_RESILIENCE
546
21.1k
    } else {
547
        /* Table 262: er_raw_data_block() */
548
11.4k
        switch (hDecoder->channelConfiguration)
549
11.4k
        {
550
0
        case 1:
551
0
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
552
0
            if (hInfo->error > 0)
553
0
                return;
554
0
            break;
555
4.68k
        case 2:
556
4.68k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
557
4.68k
            if (hInfo->error > 0)
558
1.18k
                return;
559
3.49k
            break;
560
3.49k
        case 3:
561
969
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
562
969
            if (hInfo->error > 0)
563
157
                return;
564
812
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
565
812
            if (hInfo->error > 0)
566
66
                return;
567
746
            break;
568
1.47k
        case 4:
569
1.47k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
570
1.47k
            if (hInfo->error > 0)
571
206
                return;
572
1.26k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
573
1.26k
            if (hInfo->error > 0)
574
60
                return;
575
1.20k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
576
1.20k
            if (hInfo->error > 0)
577
14
                return;
578
1.19k
            break;
579
1.75k
        case 5:
580
1.75k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
581
1.75k
            if (hInfo->error > 0)
582
361
                return;
583
1.39k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
584
1.39k
            if (hInfo->error > 0)
585
55
                return;
586
1.34k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
587
1.34k
            if (hInfo->error > 0)
588
17
                return;
589
1.32k
            break;
590
1.32k
        case 6:
591
839
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
592
839
            if (hInfo->error > 0)
593
105
                return;
594
734
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
595
734
            if (hInfo->error > 0)
596
40
                return;
597
694
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
598
694
            if (hInfo->error > 0)
599
19
                return;
600
675
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
601
675
            if (hInfo->error > 0)
602
41
                return;
603
634
            break;
604
1.70k
        case 7: /* 8 channels */
605
1.70k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
606
1.70k
            if (hInfo->error > 0)
607
152
                return;
608
1.55k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
609
1.55k
            if (hInfo->error > 0)
610
96
                return;
611
1.45k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
612
1.45k
            if (hInfo->error > 0)
613
25
                return;
614
1.43k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
615
1.43k
            if (hInfo->error > 0)
616
111
                return;
617
1.32k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
618
1.32k
            if (hInfo->error > 0)
619
111
                return;
620
1.20k
            break;
621
1.20k
        default:
622
15
            hInfo->error = 7;
623
15
            return;
624
11.4k
        }
625
#if 0
626
        cnt = bits_to_decode() / 8;
627
        while (cnt >= 1)
628
        {
629
            cnt -= extension_payload(cnt);
630
        }
631
#endif
632
11.4k
    }
633
5.71k
#endif
634
635
    /* new in corrigendum 14496-3:2002 */
636
#ifdef DRM
637
5.71k
    if (hDecoder->object_type != DRM_ER_LC
638
#if 0
639
        && !hDecoder->latm_header_present
640
#endif
641
5.71k
        )
642
5.71k
#endif
643
5.71k
    {
644
5.71k
        faad_byte_align(ld);
645
5.71k
    }
646
647
4.96k
    return;
648
32.6k
}
raw_data_block
Line
Count
Source
451
17.3k
{
452
17.3k
    uint8_t id_syn_ele;
453
17.3k
    uint8_t ele_this_frame = 0;
454
455
17.3k
    hDecoder->fr_channels = 0;
456
17.3k
    hDecoder->fr_ch_ele = 0;
457
17.3k
    hDecoder->first_syn_ele = 25;
458
17.3k
    hDecoder->has_lfe = 0;
459
460
17.3k
#ifdef ERROR_RESILIENCE
461
17.3k
    if (hDecoder->object_type < ER_OBJECT_START)
462
10.9k
    {
463
10.9k
#endif
464
        /* Table 4.4.3: raw_data_block() */
465
813k
        while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
466
813k
            DEBUGVAR(1,4,"NeAACDecDecode(): id_syn_ele"))) != ID_END)
467
812k
        {
468
812k
            switch (id_syn_ele) {
469
232k
            case ID_SCE:
470
232k
                ele_this_frame++;
471
232k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
472
232k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
473
232k
                if (hInfo->error > 0)
474
8.21k
                    return;
475
224k
                break;
476
224k
            case ID_CPE:
477
31.0k
                ele_this_frame++;
478
31.0k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
479
31.0k
                decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
480
31.0k
                if (hInfo->error > 0)
481
954
                    return;
482
30.1k
                break;
483
30.1k
            case ID_LFE:
484
154
#ifdef DRM
485
154
                hInfo->error = 32;
486
#else
487
                ele_this_frame++;
488
                hDecoder->has_lfe++;
489
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
490
#endif
491
154
                if (hInfo->error > 0)
492
154
                    return;
493
0
                break;
494
224
            case ID_CCE: /* not implemented yet, but skip the bits */
495
224
#ifdef DRM
496
224
                hInfo->error = 32;
497
#else
498
                ele_this_frame++;
499
#ifdef COUPLING_DEC
500
                hInfo->error = coupling_channel_element(hDecoder, ld);
501
#else
502
                hInfo->error = 6;
503
#endif
504
#endif
505
224
                if (hInfo->error > 0)
506
224
                    return;
507
0
                break;
508
545k
            case ID_DSE:
509
545k
                ele_this_frame++;
510
545k
                data_stream_element(hDecoder, ld);
511
545k
                break;
512
1.14k
            case ID_PCE:
513
1.14k
                if (ele_this_frame != 0)
514
163
                {
515
163
                    hInfo->error = 31;
516
163
                    return;
517
163
                }
518
984
                ele_this_frame++;
519
                /* 14496-4: 5.6.4.1.2.1.3: */
520
                /* program_configuration_element()'s in access units shall be ignored */
521
984
                program_config_element(pce, ld);
522
                //if ((hInfo->error = program_config_element(pce, ld)) > 0)
523
                //    return;
524
                //hDecoder->pce_set = 1;
525
984
                break;
526
2.03k
            case ID_FIL:
527
2.03k
                ele_this_frame++;
528
                /* one sbr_info describes a channel_element not a channel! */
529
                /* if we encounter SBR data here: error */
530
                /* SBR data will be read directly in the SCE/LFE/CPE element */
531
2.03k
                if ((hInfo->error = fill_element(hDecoder, ld, drc
532
2.03k
#ifdef SBR_DEC
533
2.03k
                    , INVALID_SBR_ELEMENT
534
2.03k
#endif
535
2.03k
                    )) > 0)
536
199
                    return;
537
1.84k
                break;
538
812k
            }
539
803k
            if (ld->error != 0)
540
0
            {
541
0
                hInfo->error = 32;
542
0
                return;
543
0
            }
544
803k
        }
545
10.9k
#ifdef ERROR_RESILIENCE
546
10.9k
    } else {
547
        /* Table 262: er_raw_data_block() */
548
6.43k
        switch (hDecoder->channelConfiguration)
549
6.43k
        {
550
0
        case 1:
551
0
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
552
0
            if (hInfo->error > 0)
553
0
                return;
554
0
            break;
555
2.76k
        case 2:
556
2.76k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
557
2.76k
            if (hInfo->error > 0)
558
733
                return;
559
2.03k
            break;
560
2.03k
        case 3:
561
434
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
562
434
            if (hInfo->error > 0)
563
99
                return;
564
335
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
565
335
            if (hInfo->error > 0)
566
30
                return;
567
305
            break;
568
877
        case 4:
569
877
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
570
877
            if (hInfo->error > 0)
571
110
                return;
572
767
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
573
767
            if (hInfo->error > 0)
574
44
                return;
575
723
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
576
723
            if (hInfo->error > 0)
577
11
                return;
578
712
            break;
579
1.14k
        case 5:
580
1.14k
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
581
1.14k
            if (hInfo->error > 0)
582
257
                return;
583
890
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
584
890
            if (hInfo->error > 0)
585
30
                return;
586
860
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
587
860
            if (hInfo->error > 0)
588
9
                return;
589
851
            break;
590
851
        case 6:
591
286
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
592
286
            if (hInfo->error > 0)
593
45
                return;
594
241
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
595
241
            if (hInfo->error > 0)
596
19
                return;
597
222
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
598
222
            if (hInfo->error > 0)
599
9
                return;
600
213
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
601
213
            if (hInfo->error > 0)
602
30
                return;
603
183
            break;
604
910
        case 7: /* 8 channels */
605
910
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
606
910
            if (hInfo->error > 0)
607
72
                return;
608
838
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
609
838
            if (hInfo->error > 0)
610
54
                return;
611
784
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
612
784
            if (hInfo->error > 0)
613
8
                return;
614
776
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
615
776
            if (hInfo->error > 0)
616
98
                return;
617
678
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
618
678
            if (hInfo->error > 0)
619
57
                return;
620
621
            break;
621
621
        default:
622
11
            hInfo->error = 7;
623
11
            return;
624
6.43k
        }
625
#if 0
626
        cnt = bits_to_decode() / 8;
627
        while (cnt >= 1)
628
        {
629
            cnt -= extension_payload(cnt);
630
        }
631
#endif
632
6.43k
    }
633
5.71k
#endif
634
635
    /* new in corrigendum 14496-3:2002 */
636
5.71k
#ifdef DRM
637
5.71k
    if (hDecoder->object_type != DRM_ER_LC
638
#if 0
639
        && !hDecoder->latm_header_present
640
#endif
641
5.71k
        )
642
5.71k
#endif
643
5.71k
    {
644
5.71k
        faad_byte_align(ld);
645
5.71k
    }
646
647
5.71k
    return;
648
17.3k
}
raw_data_block
Line
Count
Source
451
15.2k
{
452
15.2k
    uint8_t id_syn_ele;
453
15.2k
    uint8_t ele_this_frame = 0;
454
455
15.2k
    hDecoder->fr_channels = 0;
456
15.2k
    hDecoder->fr_ch_ele = 0;
457
15.2k
    hDecoder->first_syn_ele = 25;
458
15.2k
    hDecoder->has_lfe = 0;
459
460
15.2k
#ifdef ERROR_RESILIENCE
461
15.2k
    if (hDecoder->object_type < ER_OBJECT_START)
462
10.2k
    {
463
10.2k
#endif
464
        /* Table 4.4.3: raw_data_block() */
465
1.92M
        while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
466
1.92M
            DEBUGVAR(1,4,"NeAACDecDecode(): id_syn_ele"))) != ID_END)
467
1.92M
        {
468
1.92M
            switch (id_syn_ele) {
469
308k
            case ID_SCE:
470
308k
                ele_this_frame++;
471
308k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
472
308k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
473
308k
                if (hInfo->error > 0)
474
7.64k
                    return;
475
300k
                break;
476
300k
            case ID_CPE:
477
37.6k
                ele_this_frame++;
478
37.6k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
479
37.6k
                decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
480
37.6k
                if (hInfo->error > 0)
481
950
                    return;
482
36.6k
                break;
483
36.6k
            case ID_LFE:
484
#ifdef DRM
485
                hInfo->error = 32;
486
#else
487
4.96k
                ele_this_frame++;
488
4.96k
                hDecoder->has_lfe++;
489
4.96k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
490
4.96k
#endif
491
4.96k
                if (hInfo->error > 0)
492
210
                    return;
493
4.75k
                break;
494
4.75k
            case ID_CCE: /* not implemented yet, but skip the bits */
495
#ifdef DRM
496
                hInfo->error = 32;
497
#else
498
218
                ele_this_frame++;
499
#ifdef COUPLING_DEC
500
                hInfo->error = coupling_channel_element(hDecoder, ld);
501
#else
502
218
                hInfo->error = 6;
503
218
#endif
504
218
#endif
505
218
                if (hInfo->error > 0)
506
218
                    return;
507
0
                break;
508
1.54M
            case ID_DSE:
509
1.54M
                ele_this_frame++;
510
1.54M
                data_stream_element(hDecoder, ld);
511
1.54M
                break;
512
2.38k
            case ID_PCE:
513
2.38k
                if (ele_this_frame != 0)
514
146
                {
515
146
                    hInfo->error = 31;
516
146
                    return;
517
146
                }
518
2.23k
                ele_this_frame++;
519
                /* 14496-4: 5.6.4.1.2.1.3: */
520
                /* program_configuration_element()'s in access units shall be ignored */
521
2.23k
                program_config_element(pce, ld);
522
                //if ((hInfo->error = program_config_element(pce, ld)) > 0)
523
                //    return;
524
                //hDecoder->pce_set = 1;
525
2.23k
                break;
526
25.5k
            case ID_FIL:
527
25.5k
                ele_this_frame++;
528
                /* one sbr_info describes a channel_element not a channel! */
529
                /* if we encounter SBR data here: error */
530
                /* SBR data will be read directly in the SCE/LFE/CPE element */
531
25.5k
                if ((hInfo->error = fill_element(hDecoder, ld, drc
532
25.5k
#ifdef SBR_DEC
533
25.5k
                    , INVALID_SBR_ELEMENT
534
25.5k
#endif
535
25.5k
                    )) > 0)
536
45
                    return;
537
25.4k
                break;
538
1.92M
            }
539
1.91M
            if (ld->error != 0)
540
0
            {
541
0
                hInfo->error = 32;
542
0
                return;
543
0
            }
544
1.91M
        }
545
10.2k
#ifdef ERROR_RESILIENCE
546
10.2k
    } else {
547
        /* Table 262: er_raw_data_block() */
548
5.00k
        switch (hDecoder->channelConfiguration)
549
5.00k
        {
550
0
        case 1:
551
0
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
552
0
            if (hInfo->error > 0)
553
0
                return;
554
0
            break;
555
1.91k
        case 2:
556
1.91k
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
557
1.91k
            if (hInfo->error > 0)
558
450
                return;
559
1.46k
            break;
560
1.46k
        case 3:
561
535
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
562
535
            if (hInfo->error > 0)
563
58
                return;
564
477
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
565
477
            if (hInfo->error > 0)
566
36
                return;
567
441
            break;
568
596
        case 4:
569
596
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
570
596
            if (hInfo->error > 0)
571
96
                return;
572
500
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
573
500
            if (hInfo->error > 0)
574
16
                return;
575
484
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
576
484
            if (hInfo->error > 0)
577
3
                return;
578
481
            break;
579
611
        case 5:
580
611
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
581
611
            if (hInfo->error > 0)
582
104
                return;
583
507
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
584
507
            if (hInfo->error > 0)
585
25
                return;
586
482
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
587
482
            if (hInfo->error > 0)
588
8
                return;
589
474
            break;
590
553
        case 6:
591
553
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
592
553
            if (hInfo->error > 0)
593
60
                return;
594
493
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
595
493
            if (hInfo->error > 0)
596
21
                return;
597
472
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
598
472
            if (hInfo->error > 0)
599
10
                return;
600
462
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
601
462
            if (hInfo->error > 0)
602
11
                return;
603
451
            break;
604
794
        case 7: /* 8 channels */
605
794
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
606
794
            if (hInfo->error > 0)
607
80
                return;
608
714
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
609
714
            if (hInfo->error > 0)
610
42
                return;
611
672
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
612
672
            if (hInfo->error > 0)
613
17
                return;
614
655
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
615
655
            if (hInfo->error > 0)
616
13
                return;
617
642
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
618
642
            if (hInfo->error > 0)
619
54
                return;
620
588
            break;
621
588
        default:
622
4
            hInfo->error = 7;
623
4
            return;
624
5.00k
        }
625
#if 0
626
        cnt = bits_to_decode() / 8;
627
        while (cnt >= 1)
628
        {
629
            cnt -= extension_payload(cnt);
630
        }
631
#endif
632
5.00k
    }
633
4.96k
#endif
634
635
    /* new in corrigendum 14496-3:2002 */
636
#ifdef DRM
637
    if (hDecoder->object_type != DRM_ER_LC
638
#if 0
639
        && !hDecoder->latm_header_present
640
#endif
641
        )
642
#endif
643
4.96k
    {
644
4.96k
        faad_byte_align(ld);
645
4.96k
    }
646
647
4.96k
    return;
648
15.2k
}
649
650
/* Table 4.4.4 and */
651
/* Table 4.4.9 */
652
static uint8_t single_lfe_channel_element(NeAACDecStruct *hDecoder, bitfile *ld,
653
                                          uint8_t channel, uint8_t *tag)
654
542k
{
655
542k
    uint8_t retval = 0;
656
542k
    element sce = {0};
657
542k
    ic_stream *ics = &(sce.ics1);
658
542k
    ALIGN int16_t spec_data[1024] = {0};
659
660
542k
    sce.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
661
542k
        DEBUGVAR(1,38,"single_lfe_channel_element(): element_instance_tag"));
662
663
542k
    *tag = sce.element_instance_tag;
664
542k
    sce.channel = channel;
665
542k
    sce.paired_channel = -1;
666
667
542k
    retval = individual_channel_stream(hDecoder, &sce, ld, ics, 0, spec_data);
668
542k
    if (retval > 0)
669
2.74k
        return retval;
670
671
    /* IS not allowed in single channel */
672
539k
    if (ics->is_used)
673
290
        return 32;
674
675
539k
#ifdef SBR_DEC
676
    /* check if next bitstream element is a fill element */
677
    /* if so, read it now so SBR decoding can be done in case of a file with SBR */
678
539k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
679
61.1k
    {
680
61.1k
        faad_flushbits(ld, LEN_SE_ID);
681
682
        /* one sbr_info describes a channel_element not a channel! */
683
61.1k
        if ((retval = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
684
107
        {
685
107
            return retval;
686
107
        }
687
61.1k
    }
688
539k
#endif
689
690
    /* noiseless coding is done, spectral reconstruction is done now */
691
539k
    retval = reconstruct_single_channel(hDecoder, ics, &sce, spec_data);
692
539k
    if (retval > 0)
693
349
        return retval;
694
695
538k
    return 0;
696
539k
}
697
698
/* Table 4.4.5 */
699
static uint8_t channel_pair_element(NeAACDecStruct *hDecoder, bitfile *ld,
700
                                    uint8_t channels, uint8_t *tag)
701
39.1k
{
702
39.1k
    ALIGN int16_t spec_data1[1024] = {0};
703
39.1k
    ALIGN int16_t spec_data2[1024] = {0};
704
39.1k
    element cpe = {0};
705
39.1k
    ic_stream *ics1 = &(cpe.ics1);
706
39.1k
    ic_stream *ics2 = &(cpe.ics2);
707
39.1k
    uint8_t result;
708
709
39.1k
    cpe.channel        = channels;
710
39.1k
    cpe.paired_channel = channels+1;
711
712
39.1k
    cpe.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
713
39.1k
        DEBUGVAR(1,39,"channel_pair_element(): element_instance_tag"));
714
39.1k
    *tag = cpe.element_instance_tag;
715
716
39.1k
    if ((cpe.common_window = faad_get1bit(ld
717
39.1k
        DEBUGVAR(1,40,"channel_pair_element(): common_window"))) & 1)
718
20.5k
    {
719
        /* both channels have common ics information */
720
20.5k
        if ((result = ics_info(hDecoder, ics1, ld, cpe.common_window)) > 0)
721
197
            return result;
722
723
20.3k
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
724
20.3k
            DEBUGVAR(1,41,"channel_pair_element(): ms_mask_present"));
725
20.3k
        if (ics1->ms_mask_present == 3)
726
36
        {
727
            /* bitstream error */
728
36
            return 32;
729
36
        }
730
20.2k
        if (ics1->ms_mask_present == 1)
731
4.85k
        {
732
4.85k
            uint8_t g, sfb;
733
14.7k
            for (g = 0; g < ics1->num_window_groups; g++)
734
9.87k
            {
735
23.0k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
736
13.1k
                {
737
13.1k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
738
13.1k
                        DEBUGVAR(1,42,"channel_pair_element(): faad_get1bit"));
739
13.1k
                }
740
9.87k
            }
741
4.85k
        }
742
743
20.2k
#ifdef ERROR_RESILIENCE
744
20.2k
        if ((hDecoder->object_type >= ER_OBJECT_START) && (ics1->predictor_data_present))
745
206
        {
746
206
            if ((
747
#ifdef LTP_DEC
748
                ics1->ltp.data_present =
749
#endif
750
206
                faad_get1bit(ld DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
751
9
            {
752
#ifdef LTP_DEC
753
                if ((result = ltp_data(hDecoder, ics1, &(ics1->ltp), ld)) > 0)
754
                {
755
                    return result;
756
                }
757
#else
758
9
                return 26;
759
9
#endif
760
9
            }
761
206
        }
762
20.2k
#endif
763
764
20.2k
        memcpy(ics2, ics1, sizeof(ic_stream));
765
20.2k
    } else {
766
18.6k
        ics1->ms_mask_present = 0;
767
18.6k
    }
768
769
38.9k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics1,
770
38.9k
        0, spec_data1)) > 0)
771
690
    {
772
690
        return result;
773
690
    }
774
775
38.2k
#ifdef ERROR_RESILIENCE
776
38.2k
    if (cpe.common_window && (hDecoder->object_type >= ER_OBJECT_START) &&
777
1.15k
        (ics1->predictor_data_present))
778
174
    {
779
174
        if ((
780
#ifdef LTP_DEC
781
            ics1->ltp2.data_present =
782
#endif
783
174
            faad_get1bit(ld DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
784
14
        {
785
#ifdef LTP_DEC
786
            if ((result = ltp_data(hDecoder, ics1, &(ics1->ltp2), ld)) > 0)
787
            {
788
                return result;
789
            }
790
#else
791
14
            return 26;
792
14
#endif
793
14
        }
794
174
    }
795
38.2k
#endif
796
797
38.2k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics2,
798
38.2k
        0, spec_data2)) > 0)
799
537
    {
800
537
        return result;
801
537
    }
802
803
37.7k
#ifdef SBR_DEC
804
    /* check if next bitstream element is a fill element */
805
    /* if so, read it now so SBR decoding can be done in case of a file with SBR */
806
37.7k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
807
20.4k
    {
808
20.4k
        faad_flushbits(ld, LEN_SE_ID);
809
810
        /* one sbr_info describes a channel_element not a channel! */
811
20.4k
        if ((result = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
812
31
        {
813
31
            return result;
814
31
        }
815
20.4k
    }
816
37.6k
#endif
817
818
    /* noiseless coding is done, spectral reconstruction is done now */
819
37.6k
    if ((result = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe,
820
37.6k
        spec_data1, spec_data2)) > 0)
821
104
    {
822
104
        return result;
823
104
    }
824
825
37.5k
    return 0;
826
37.6k
}
827
828
/* Table 4.4.6 */
829
static uint8_t ics_info(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
830
                        uint8_t common_window)
831
663k
{
832
663k
    uint8_t retval = 0;
833
663k
    uint8_t ics_reserved_bit;
834
835
663k
    ics_reserved_bit = faad_get1bit(ld
836
663k
        DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
837
663k
    if (ics_reserved_bit != 0)
838
1.31k
        return 32;
839
661k
    ics->window_sequence = (uint8_t)faad_getbits(ld, 2
840
661k
        DEBUGVAR(1,44,"ics_info(): window_sequence"));
841
661k
    ics->window_shape = faad_get1bit(ld
842
661k
        DEBUGVAR(1,45,"ics_info(): window_shape"));
843
844
#ifdef LD_DEC
845
    /* No block switching in LD */
846
374k
    if ((hDecoder->object_type == LD) && (ics->window_sequence != ONLY_LONG_SEQUENCE))
847
38
        return 32;
848
374k
#endif
849
850
661k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
851
71.4k
    {
852
71.4k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 4
853
71.4k
            DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
854
71.4k
        ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
855
71.4k
            DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
856
590k
    } else {
857
590k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 6
858
590k
            DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
859
590k
    }
860
861
    /* get the grouping information */
862
661k
    if ((retval = window_grouping_info(hDecoder, ics)) > 0)
863
328
        return retval;
864
865
866
    /* should be an error */
867
    /* check the range of max_sfb */
868
661k
    if (ics->max_sfb > ics->num_swb)
869
0
        return 16;
870
871
661k
    if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
872
590k
    {
873
590k
        if ((ics->predictor_data_present = faad_get1bit(ld
874
590k
            DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
875
52.3k
        {
876
52.3k
            if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
877
18.5k
            {
878
18.5k
                uint8_t sfb;
879
18.5k
                uint8_t predictor_reset, predictor_reset_group_number, prediction_used;
880
18.5k
                uint8_t limit = min(ics->max_sfb, max_pred_sfb(hDecoder->sf_index));
881
882
18.5k
                predictor_reset = faad_get1bit(ld DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"));
883
18.5k
                if (predictor_reset)
884
16.0k
                {
885
16.0k
                    predictor_reset_group_number =
886
16.0k
                        (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
887
16.0k
                } else {
888
2.48k
                    predictor_reset_group_number = 0;
889
2.48k
                }
890
891
62.2k
                for (sfb = 0; sfb < limit; sfb++)
892
43.7k
                {
893
43.7k
                    prediction_used = faad_get1bit(ld DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
894
#ifdef MAIN_DEC
895
                    ics->pred.prediction_used[sfb] = prediction_used;
896
#endif
897
43.7k
                }
898
#ifdef MAIN_DEC
899
                ics->pred.limit = limit;
900
                ics->pred.predictor_reset = predictor_reset;
901
                ics->pred.predictor_reset_group_number = predictor_reset_group_number;
902
#else
903
                (void)predictor_reset_group_number;
904
                (void)prediction_used;
905
#endif
906
18.5k
            }
907
#ifdef LTP_DEC
908
21.2k
            else { /* Long Term Prediction */
909
21.2k
                if (hDecoder->object_type < ER_OBJECT_START)
910
19.8k
                {
911
19.8k
                    if ((ics->ltp.data_present = faad_get1bit(ld
912
19.8k
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
913
12.4k
                    {
914
12.4k
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
915
6
                        {
916
6
                            return retval;
917
6
                        }
918
12.4k
                    }
919
19.8k
                    if (common_window)
920
3.53k
                    {
921
3.53k
                        if ((ics->ltp2.data_present = faad_get1bit(ld
922
3.53k
                            DEBUGVAR(1,51,"ics_info(): ltp2.data_present"))) & 1)
923
2.60k
                        {
924
2.60k
                            if ((retval = ltp_data(hDecoder, ics, &(ics->ltp2), ld)) > 0)
925
3
                            {
926
3
                                return retval;
927
3
                            }
928
2.60k
                        }
929
3.53k
                    }
930
19.8k
                }
931
21.2k
#ifdef ERROR_RESILIENCE
932
21.2k
                if (!common_window && (hDecoder->object_type >= ER_OBJECT_START))
933
1.20k
                {
934
1.20k
                    if ((ics->ltp.data_present = faad_get1bit(ld
935
1.20k
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
936
480
                    {
937
480
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
938
4
                        {
939
4
                            return retval;
940
4
                        }
941
480
                    }
942
1.20k
                }
943
21.2k
#endif  /* ERROR_RESILIENCE */
944
21.2k
            }
945
#else  /* LTP_DEC */
946
            (void)common_window;
947
#endif  /* LTP_DEC */
948
52.3k
        }
949
590k
    }
950
951
373k
    return retval;
952
373k
}
syntax.c:ics_info
Line
Count
Source
831
288k
{
832
288k
    uint8_t retval = 0;
833
288k
    uint8_t ics_reserved_bit;
834
835
288k
    ics_reserved_bit = faad_get1bit(ld
836
288k
        DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
837
288k
    if (ics_reserved_bit != 0)
838
701
        return 32;
839
287k
    ics->window_sequence = (uint8_t)faad_getbits(ld, 2
840
287k
        DEBUGVAR(1,44,"ics_info(): window_sequence"));
841
287k
    ics->window_shape = faad_get1bit(ld
842
287k
        DEBUGVAR(1,45,"ics_info(): window_shape"));
843
844
#ifdef LD_DEC
845
    /* No block switching in LD */
846
    if ((hDecoder->object_type == LD) && (ics->window_sequence != ONLY_LONG_SEQUENCE))
847
        return 32;
848
#endif
849
850
287k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
851
30.4k
    {
852
30.4k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 4
853
30.4k
            DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
854
30.4k
        ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
855
30.4k
            DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
856
257k
    } else {
857
257k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 6
858
257k
            DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
859
257k
    }
860
861
    /* get the grouping information */
862
287k
    if ((retval = window_grouping_info(hDecoder, ics)) > 0)
863
133
        return retval;
864
865
866
    /* should be an error */
867
    /* check the range of max_sfb */
868
287k
    if (ics->max_sfb > ics->num_swb)
869
0
        return 16;
870
871
287k
    if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
872
257k
    {
873
257k
        if ((ics->predictor_data_present = faad_get1bit(ld
874
257k
            DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
875
18.3k
        {
876
18.3k
            if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
877
5.84k
            {
878
5.84k
                uint8_t sfb;
879
5.84k
                uint8_t predictor_reset, predictor_reset_group_number, prediction_used;
880
5.84k
                uint8_t limit = min(ics->max_sfb, max_pred_sfb(hDecoder->sf_index));
881
882
5.84k
                predictor_reset = faad_get1bit(ld DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"));
883
5.84k
                if (predictor_reset)
884
5.45k
                {
885
5.45k
                    predictor_reset_group_number =
886
5.45k
                        (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
887
5.45k
                } else {
888
386
                    predictor_reset_group_number = 0;
889
386
                }
890
891
31.4k
                for (sfb = 0; sfb < limit; sfb++)
892
25.5k
                {
893
25.5k
                    prediction_used = faad_get1bit(ld DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
894
#ifdef MAIN_DEC
895
                    ics->pred.prediction_used[sfb] = prediction_used;
896
#endif
897
25.5k
                }
898
#ifdef MAIN_DEC
899
                ics->pred.limit = limit;
900
                ics->pred.predictor_reset = predictor_reset;
901
                ics->pred.predictor_reset_group_number = predictor_reset_group_number;
902
#else
903
5.84k
                (void)predictor_reset_group_number;
904
5.84k
                (void)prediction_used;
905
5.84k
#endif
906
5.84k
            }
907
#ifdef LTP_DEC
908
            else { /* Long Term Prediction */
909
                if (hDecoder->object_type < ER_OBJECT_START)
910
                {
911
                    if ((ics->ltp.data_present = faad_get1bit(ld
912
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
913
                    {
914
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
915
                        {
916
                            return retval;
917
                        }
918
                    }
919
                    if (common_window)
920
                    {
921
                        if ((ics->ltp2.data_present = faad_get1bit(ld
922
                            DEBUGVAR(1,51,"ics_info(): ltp2.data_present"))) & 1)
923
                        {
924
                            if ((retval = ltp_data(hDecoder, ics, &(ics->ltp2), ld)) > 0)
925
                            {
926
                                return retval;
927
                            }
928
                        }
929
                    }
930
                }
931
#ifdef ERROR_RESILIENCE
932
                if (!common_window && (hDecoder->object_type >= ER_OBJECT_START))
933
                {
934
                    if ((ics->ltp.data_present = faad_get1bit(ld
935
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
936
                    {
937
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
938
                        {
939
                            return retval;
940
                        }
941
                    }
942
                }
943
#endif  /* ERROR_RESILIENCE */
944
            }
945
#else  /* LTP_DEC */
946
18.3k
            (void)common_window;
947
18.3k
#endif  /* LTP_DEC */
948
18.3k
        }
949
257k
    }
950
951
287k
    return retval;
952
287k
}
syntax.c:ics_info
Line
Count
Source
831
374k
{
832
374k
    uint8_t retval = 0;
833
374k
    uint8_t ics_reserved_bit;
834
835
374k
    ics_reserved_bit = faad_get1bit(ld
836
374k
        DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
837
374k
    if (ics_reserved_bit != 0)
838
615
        return 32;
839
374k
    ics->window_sequence = (uint8_t)faad_getbits(ld, 2
840
374k
        DEBUGVAR(1,44,"ics_info(): window_sequence"));
841
374k
    ics->window_shape = faad_get1bit(ld
842
374k
        DEBUGVAR(1,45,"ics_info(): window_shape"));
843
844
374k
#ifdef LD_DEC
845
    /* No block switching in LD */
846
374k
    if ((hDecoder->object_type == LD) && (ics->window_sequence != ONLY_LONG_SEQUENCE))
847
38
        return 32;
848
374k
#endif
849
850
374k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
851
40.9k
    {
852
40.9k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 4
853
40.9k
            DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
854
40.9k
        ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
855
40.9k
            DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
856
333k
    } else {
857
333k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 6
858
333k
            DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
859
333k
    }
860
861
    /* get the grouping information */
862
374k
    if ((retval = window_grouping_info(hDecoder, ics)) > 0)
863
195
        return retval;
864
865
866
    /* should be an error */
867
    /* check the range of max_sfb */
868
373k
    if (ics->max_sfb > ics->num_swb)
869
0
        return 16;
870
871
373k
    if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
872
332k
    {
873
332k
        if ((ics->predictor_data_present = faad_get1bit(ld
874
332k
            DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
875
33.9k
        {
876
33.9k
            if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
877
12.6k
            {
878
12.6k
                uint8_t sfb;
879
12.6k
                uint8_t predictor_reset, predictor_reset_group_number, prediction_used;
880
12.6k
                uint8_t limit = min(ics->max_sfb, max_pred_sfb(hDecoder->sf_index));
881
882
12.6k
                predictor_reset = faad_get1bit(ld DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"));
883
12.6k
                if (predictor_reset)
884
10.5k
                {
885
10.5k
                    predictor_reset_group_number =
886
10.5k
                        (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
887
10.5k
                } else {
888
2.09k
                    predictor_reset_group_number = 0;
889
2.09k
                }
890
891
30.8k
                for (sfb = 0; sfb < limit; sfb++)
892
18.1k
                {
893
18.1k
                    prediction_used = faad_get1bit(ld DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
894
18.1k
#ifdef MAIN_DEC
895
18.1k
                    ics->pred.prediction_used[sfb] = prediction_used;
896
18.1k
#endif
897
18.1k
                }
898
12.6k
#ifdef MAIN_DEC
899
12.6k
                ics->pred.limit = limit;
900
12.6k
                ics->pred.predictor_reset = predictor_reset;
901
12.6k
                ics->pred.predictor_reset_group_number = predictor_reset_group_number;
902
#else
903
                (void)predictor_reset_group_number;
904
                (void)prediction_used;
905
#endif
906
12.6k
            }
907
21.2k
#ifdef LTP_DEC
908
21.2k
            else { /* Long Term Prediction */
909
21.2k
                if (hDecoder->object_type < ER_OBJECT_START)
910
19.8k
                {
911
19.8k
                    if ((ics->ltp.data_present = faad_get1bit(ld
912
19.8k
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
913
12.4k
                    {
914
12.4k
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
915
6
                        {
916
6
                            return retval;
917
6
                        }
918
12.4k
                    }
919
19.8k
                    if (common_window)
920
3.53k
                    {
921
3.53k
                        if ((ics->ltp2.data_present = faad_get1bit(ld
922
3.53k
                            DEBUGVAR(1,51,"ics_info(): ltp2.data_present"))) & 1)
923
2.60k
                        {
924
2.60k
                            if ((retval = ltp_data(hDecoder, ics, &(ics->ltp2), ld)) > 0)
925
3
                            {
926
3
                                return retval;
927
3
                            }
928
2.60k
                        }
929
3.53k
                    }
930
19.8k
                }
931
21.2k
#ifdef ERROR_RESILIENCE
932
21.2k
                if (!common_window && (hDecoder->object_type >= ER_OBJECT_START))
933
1.20k
                {
934
1.20k
                    if ((ics->ltp.data_present = faad_get1bit(ld
935
1.20k
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
936
480
                    {
937
480
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
938
4
                        {
939
4
                            return retval;
940
4
                        }
941
480
                    }
942
1.20k
                }
943
21.2k
#endif  /* ERROR_RESILIENCE */
944
21.2k
            }
945
#else  /* LTP_DEC */
946
            (void)common_window;
947
#endif  /* LTP_DEC */
948
33.9k
        }
949
332k
    }
950
951
373k
    return retval;
952
373k
}
953
954
/* Table 4.4.7 */
955
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld)
956
22.3k
{
957
22.3k
    uint8_t i;
958
959
22.3k
    pul->number_pulse = (uint8_t)faad_getbits(ld, 2
960
22.3k
        DEBUGVAR(1,56,"pulse_data(): number_pulse"));
961
22.3k
    pul->pulse_start_sfb = (uint8_t)faad_getbits(ld, 6
962
22.3k
        DEBUGVAR(1,57,"pulse_data(): pulse_start_sfb"));
963
964
    /* check the range of pulse_start_sfb */
965
22.3k
    if (pul->pulse_start_sfb > ics->num_swb)
966
186
        return 16;
967
968
67.2k
    for (i = 0; i < pul->number_pulse+1; i++)
969
45.1k
    {
970
45.1k
        pul->pulse_offset[i] = (uint8_t)faad_getbits(ld, 5
971
45.1k
            DEBUGVAR(1,58,"pulse_data(): pulse_offset"));
972
#if 0
973
        printf("%d\n", pul->pulse_offset[i]);
974
#endif
975
45.1k
        pul->pulse_amp[i] = (uint8_t)faad_getbits(ld, 4
976
45.1k
            DEBUGVAR(1,59,"pulse_data(): pulse_amp"));
977
#if 0
978
        printf("%d\n", pul->pulse_amp[i]);
979
#endif
980
45.1k
    }
981
982
22.1k
    return 0;
983
22.3k
}
984
985
#ifdef COUPLING_DEC
986
/* Table 4.4.8: Currently just for skipping the bits... */
987
static uint8_t coupling_channel_element(NeAACDecStruct *hDecoder, bitfile *ld)
988
{
989
    uint8_t c, result = 0;
990
    uint8_t ind_sw_cce_flag = 0;
991
    uint8_t num_gain_element_lists = 0;
992
    uint8_t num_coupled_elements = 0;
993
994
    element el_empty = {0};
995
    ic_stream ics_empty = {0};
996
    int16_t sh_data[1024];
997
998
    c = faad_getbits(ld, LEN_TAG
999
        DEBUGVAR(1,900,"coupling_channel_element(): element_instance_tag"));
1000
1001
    ind_sw_cce_flag = faad_get1bit(ld
1002
        DEBUGVAR(1,901,"coupling_channel_element(): ind_sw_cce_flag"));
1003
    num_coupled_elements = faad_getbits(ld, 3
1004
        DEBUGVAR(1,902,"coupling_channel_element(): num_coupled_elements"));
1005
1006
    for (c = 0; c < num_coupled_elements + 1; c++)
1007
    {
1008
        uint8_t cc_target_is_cpe, cc_target_tag_select;
1009
1010
        num_gain_element_lists++;
1011
1012
        cc_target_is_cpe = faad_get1bit(ld
1013
            DEBUGVAR(1,903,"coupling_channel_element(): cc_target_is_cpe"));
1014
        cc_target_tag_select = faad_getbits(ld, 4
1015
            DEBUGVAR(1,904,"coupling_channel_element(): cc_target_tag_select"));
1016
1017
        if (cc_target_is_cpe)
1018
        {
1019
            uint8_t cc_l = faad_get1bit(ld
1020
                DEBUGVAR(1,905,"coupling_channel_element(): cc_l"));
1021
            uint8_t cc_r = faad_get1bit(ld
1022
                DEBUGVAR(1,906,"coupling_channel_element(): cc_r"));
1023
1024
            if (cc_l && cc_r)
1025
                num_gain_element_lists++;
1026
        }
1027
    }
1028
1029
    faad_get1bit(ld
1030
        DEBUGVAR(1,907,"coupling_channel_element(): cc_domain"));
1031
    faad_get1bit(ld
1032
        DEBUGVAR(1,908,"coupling_channel_element(): gain_element_sign"));
1033
    faad_getbits(ld, 2
1034
        DEBUGVAR(1,909,"coupling_channel_element(): gain_element_scale"));
1035
1036
    if ((result = individual_channel_stream(hDecoder, &el_empty, ld, &ics_empty,
1037
        0, sh_data)) > 0)
1038
    {
1039
        return result;
1040
    }
1041
1042
    /* IS not allowed in single channel */
1043
    if (ics->is_used)
1044
        return 32;
1045
1046
    for (c = 1; c < num_gain_element_lists; c++)
1047
    {
1048
        uint8_t cge;
1049
1050
        if (ind_sw_cce_flag)
1051
        {
1052
            cge = 1;
1053
        } else {
1054
            cge = faad_get1bit(ld
1055
                DEBUGVAR(1,910,"coupling_channel_element(): common_gain_element_present"));
1056
        }
1057
1058
        if (cge)
1059
        {
1060
            huffman_scale_factor(ld);
1061
        } else {
1062
            uint8_t g, sfb;
1063
1064
            for (g = 0; g < ics_empty.num_window_groups; g++)
1065
            {
1066
                for (sfb = 0; sfb < ics_empty.max_sfb; sfb++)
1067
                {
1068
                    if (ics_empty.sfb_cb[g][sfb] != ZERO_HCB)
1069
                        huffman_scale_factor(ld);
1070
                }
1071
            }
1072
        }
1073
    }
1074
1075
    return 0;
1076
}
1077
#endif
1078
1079
/* Table 4.4.10 */
1080
static uint16_t data_stream_element(NeAACDecStruct *hDecoder, bitfile *ld)
1081
2.09M
{
1082
2.09M
    uint8_t byte_aligned;
1083
2.09M
    uint16_t i, count;
1084
2.09M
    (void)hDecoder;  /* TODO: remove parameter; rename method; why result is unused? */
1085
1086
2.09M
    /* element_instance_tag = */ faad_getbits(ld, LEN_TAG
1087
2.09M
        DEBUGVAR(1,60,"data_stream_element(): element_instance_tag"));
1088
2.09M
    byte_aligned = faad_get1bit(ld
1089
2.09M
        DEBUGVAR(1,61,"data_stream_element(): byte_aligned"));
1090
2.09M
    count = (uint16_t)faad_getbits(ld, 8
1091
2.09M
        DEBUGVAR(1,62,"data_stream_element(): count"));
1092
2.09M
    if (count == 255)
1093
23.2k
    {
1094
23.2k
        count += (uint16_t)faad_getbits(ld, 8
1095
23.2k
            DEBUGVAR(1,63,"data_stream_element(): extra count"));
1096
23.2k
    }
1097
2.09M
    if (byte_aligned)
1098
1.46M
        faad_byte_align(ld);
1099
1100
61.6M
    for (i = 0; i < count; i++)
1101
59.5M
    {
1102
59.5M
        faad_getbits(ld, LEN_BYTE
1103
59.5M
            DEBUGVAR(1,64,"data_stream_element(): data_stream_byte"));
1104
59.5M
    }
1105
1106
2.09M
    return count;
1107
2.09M
}
1108
1109
/* Table 4.4.11 */
1110
static uint8_t fill_element(NeAACDecStruct *hDecoder, bitfile *ld, drc_info *drc
1111
#ifdef SBR_DEC
1112
                            ,uint8_t sbr_ele
1113
#endif
1114
                            )
1115
47.9k
{
1116
47.9k
    uint16_t count;
1117
47.9k
#ifdef SBR_DEC
1118
47.9k
    uint8_t bs_extension_type;
1119
47.9k
#endif
1120
1121
47.9k
    count = (uint16_t)faad_getbits(ld, 4
1122
47.9k
        DEBUGVAR(1,65,"fill_element(): count"));
1123
47.9k
    if (count == 15)
1124
5.42k
    {
1125
5.42k
        count += (uint16_t)faad_getbits(ld, 8
1126
5.42k
            DEBUGVAR(1,66,"fill_element(): extra count")) - 1;
1127
5.42k
    }
1128
1129
47.9k
    if (count > 0)
1130
45.7k
    {
1131
45.7k
#ifdef SBR_DEC
1132
45.7k
        bs_extension_type = (uint8_t)faad_showbits(ld, 4);
1133
1134
45.7k
        if ((bs_extension_type == EXT_SBR_DATA) ||
1135
21.7k
            (bs_extension_type == EXT_SBR_DATA_CRC))
1136
45.4k
        {
1137
45.4k
            if (sbr_ele == INVALID_SBR_ELEMENT)
1138
51
                return 24;
1139
1140
45.4k
            if (!hDecoder->sbr[sbr_ele])
1141
39.2k
            {
1142
39.2k
                hDecoder->sbr[sbr_ele] = sbrDecodeInit(hDecoder->frameLength,
1143
39.2k
                    hDecoder->element_id[sbr_ele], 2*get_sample_rate(hDecoder->sf_index),
1144
39.2k
                    hDecoder->downSampledSBR
1145
39.2k
#ifdef DRM
1146
39.2k
                    , 0
1147
39.2k
#endif
1148
39.2k
                    );
1149
39.2k
            }
1150
45.4k
            if (!hDecoder->sbr[sbr_ele])
1151
0
                return 19;
1152
1153
45.4k
            hDecoder->sbr_present_flag = 1;
1154
1155
            /* parse the SBR data */
1156
45.4k
            hDecoder->sbr[sbr_ele]->ret = sbr_extension_data(ld, hDecoder->sbr[sbr_ele], count,
1157
45.4k
                hDecoder->postSeekResetFlag);
1158
1159
#if 0
1160
            if (hDecoder->sbr[sbr_ele]->ret > 0)
1161
            {
1162
                printf("%s\n", NeAACDecGetErrorMessage(hDecoder->sbr[sbr_ele]->ret));
1163
            }
1164
#endif
1165
1166
45.4k
#if (defined(PS_DEC) || defined(DRM_PS))
1167
45.4k
            if (hDecoder->sbr[sbr_ele]->ps_used)
1168
7.33k
            {
1169
7.33k
                hDecoder->ps_used[sbr_ele] = 1;
1170
1171
                /* set element independent flag to 1 as well */
1172
7.33k
                hDecoder->ps_used_global = 1;
1173
7.33k
            }
1174
45.4k
#endif
1175
45.4k
        } else {
1176
282
#endif
1177
#ifndef DRM
1178
            while (count > 0)
1179
            {
1180
                uint16_t payload_bytes = extension_payload(ld, drc, count);
1181
                if (payload_bytes <= count) {
1182
                    count -= payload_bytes;
1183
                } else {
1184
                    count = 0;
1185
                }
1186
            }
1187
#else
1188
282
            (void)drc;
1189
282
            return 30;
1190
282
#endif
1191
282
#ifdef SBR_DEC
1192
282
        }
1193
45.7k
#endif
1194
45.7k
    }
1195
1196
47.5k
    return 0;
1197
47.9k
}
1198
1199
/* Table 4.4.12 */
1200
#ifdef SSR_DEC
1201
static void gain_control_data(bitfile *ld, ic_stream *ics)
1202
{
1203
    uint8_t bd, wd, ad;
1204
    ssr_info *ssr = &(ics->ssr);
1205
1206
    ssr->max_band = (uint8_t)faad_getbits(ld, 2
1207
        DEBUGVAR(1,1000,"gain_control_data(): max_band"));
1208
1209
    if (ics->window_sequence == ONLY_LONG_SEQUENCE)
1210
    {
1211
        for (bd = 1; bd <= ssr->max_band; bd++)
1212
        {
1213
            for (wd = 0; wd < 1; wd++)
1214
            {
1215
                ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
1216
                    DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
1217
1218
                for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
1219
                {
1220
                    ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1221
                        DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
1222
                    ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 5
1223
                        DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1224
                }
1225
            }
1226
        }
1227
    } else if (ics->window_sequence == LONG_START_SEQUENCE) {
1228
        for (bd = 1; bd <= ssr->max_band; bd++)
1229
        {
1230
            for (wd = 0; wd < 2; wd++)
1231
            {
1232
                ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
1233
                    DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
1234
1235
                for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
1236
                {
1237
                    ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1238
                        DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
1239
                    if (wd == 0)
1240
                    {
1241
                        ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1242
                            DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1243
                    } else {
1244
                        ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 2
1245
                            DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1246
                    }
1247
                }
1248
            }
1249
        }
1250
    } else if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) {
1251
        for (bd = 1; bd <= ssr->max_band; bd++)
1252
        {
1253
            for (wd = 0; wd < 8; wd++)
1254
            {
1255
                ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
1256
                    DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
1257
1258
                for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
1259
                {
1260
                    ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1261
                        DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
1262
                    ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 2
1263
                        DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1264
                }
1265
            }
1266
        }
1267
    } else if (ics->window_sequence == LONG_STOP_SEQUENCE) {
1268
        for (bd = 1; bd <= ssr->max_band; bd++)
1269
        {
1270
            for (wd = 0; wd < 2; wd++)
1271
            {
1272
                ssr->adjust_num[bd][wd] = (uint8_t)faad_getbits(ld, 3
1273
                    DEBUGVAR(1,1001,"gain_control_data(): adjust_num"));
1274
1275
                for (ad = 0; ad < ssr->adjust_num[bd][wd]; ad++)
1276
                {
1277
                    ssr->alevcode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1278
                        DEBUGVAR(1,1002,"gain_control_data(): alevcode"));
1279
1280
                    if (wd == 0)
1281
                    {
1282
                        ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 4
1283
                            DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1284
                    } else {
1285
                        ssr->aloccode[bd][wd][ad] = (uint8_t)faad_getbits(ld, 5
1286
                            DEBUGVAR(1,1003,"gain_control_data(): aloccode"));
1287
                    }
1288
                }
1289
            }
1290
        }
1291
    }
1292
}
1293
#endif
1294
1295
#ifdef DRM
1296
/* Table 4.4.13 ASME */
1297
void DRM_aac_scalable_main_element(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo,
1298
                                   bitfile *ld, program_config *pce, drc_info *drc)
1299
1.51k
{
1300
1.51k
    uint8_t channels = hDecoder->fr_channels = 0;
1301
1.51k
    uint8_t this_layer_stereo = (hDecoder->channelConfiguration > 1) ? 1 : 0;
1302
1.51k
    element cpe = {0};
1303
1.51k
    ic_stream *ics1 = &(cpe.ics1);
1304
1.51k
    ic_stream *ics2 = &(cpe.ics2);
1305
1.51k
    ALIGN int16_t spec_data1[1024] = {0};
1306
1.51k
    ALIGN int16_t spec_data2[1024] = {0};
1307
1308
1.51k
    (void)drc;  /* TODO: remove unused parameter? */
1309
1.51k
    (void)pce;  /* TODO: remove unused parameter? */
1310
1311
1.51k
    hDecoder->fr_ch_ele = 0;
1312
1313
1.51k
    hInfo->error = DRM_aac_scalable_main_header(hDecoder, ics1, ics2, ld, this_layer_stereo);
1314
1.51k
    if (hInfo->error > 0)
1315
32
        return;
1316
1317
1.47k
    cpe.common_window = 1;
1318
1.47k
    if (this_layer_stereo)
1319
444
    {
1320
444
        hDecoder->element_id[0] = ID_CPE;
1321
444
        if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
1322
324
            hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
1323
1.03k
    } else {
1324
1.03k
        hDecoder->element_id[0] = ID_SCE;
1325
1.03k
    }
1326
1327
1.47k
    if (this_layer_stereo)
1328
444
    {
1329
444
        cpe.channel        = 0;
1330
444
        cpe.paired_channel = 1;
1331
444
    }
1332
1333
1334
    /* Stereo2 / Mono1 */
1335
1.47k
    ics1->tns_data_present = faad_get1bit(ld);
1336
1337
#if defined(LTP_DEC)
1338
    ics1->ltp.data_present = faad_get1bit(ld);
1339
#elif defined (DRM)
1340
1.47k
    if(faad_get1bit(ld)) {
1341
28
         hInfo->error = 26;
1342
28
         return;
1343
28
    }
1344
#else
1345
    faad_get1bit(ld);
1346
#endif
1347
1348
1.45k
    hInfo->error = side_info(hDecoder, &cpe, ld, ics1, 1);
1349
1.45k
    if (hInfo->error > 0)
1350
148
        return;
1351
1.30k
    if (this_layer_stereo)
1352
346
    {
1353
        /* Stereo3 */
1354
346
        ics2->tns_data_present = faad_get1bit(ld);
1355
#ifdef LTP_DEC
1356
        ics1->ltp.data_present =
1357
#endif
1358
346
            faad_get1bit(ld);
1359
346
        hInfo->error = side_info(hDecoder, &cpe, ld, ics2, 1);
1360
346
        if (hInfo->error > 0)
1361
55
            return;
1362
346
    }
1363
    /* Stereo4 / Mono2 */
1364
1.24k
    if (ics1->tns_data_present)
1365
243
        tns_data(ics1, &(ics1->tns), ld);
1366
1.24k
    if (this_layer_stereo)
1367
291
    {
1368
        /* Stereo5 */
1369
291
        if (ics2->tns_data_present)
1370
108
            tns_data(ics2, &(ics2->tns), ld);
1371
291
    }
1372
1373
1.24k
#ifdef DRM
1374
    /* CRC check */
1375
1.24k
    if (hDecoder->object_type == DRM_ER_LC)
1376
1.24k
    {
1377
1.24k
        if ((hInfo->error = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1378
381
            return;
1379
1.24k
    }
1380
866
#endif
1381
1382
    /* Stereo6 / Mono3 */
1383
    /* error resilient spectral data decoding */
1384
866
    if ((hInfo->error = reordered_spectral_data(hDecoder, ics1, ld, spec_data1)) > 0)
1385
24
    {
1386
24
        return;
1387
24
    }
1388
842
    if (this_layer_stereo)
1389
69
    {
1390
        /* Stereo7 */
1391
        /* error resilient spectral data decoding */
1392
69
        if ((hInfo->error = reordered_spectral_data(hDecoder, ics2, ld, spec_data2)) > 0)
1393
6
        {
1394
6
            return;
1395
6
        }
1396
69
    }
1397
1398
1399
836
#ifdef DRM
1400
836
#ifdef SBR_DEC
1401
    /* In case of DRM we need to read the SBR info before channel reconstruction */
1402
836
    if ((hDecoder->sbr_present_flag == 1) && (hDecoder->object_type == DRM_ER_LC))
1403
788
    {
1404
788
        bitfile ld_sbr = {0};
1405
788
        uint32_t i;
1406
788
        uint16_t count = 0;
1407
788
        uint8_t *revbuffer;
1408
788
        uint8_t *prevbufstart;
1409
788
        uint8_t *pbufend;
1410
1411
        /* all forward bitreading should be finished at this point */
1412
788
        uint32_t bitsconsumed = faad_get_processed_bits(ld);
1413
788
        uint32_t buffer_size = faad_origbitbuffer_size(ld);
1414
788
        uint8_t *buffer = (uint8_t*)faad_origbitbuffer(ld);
1415
1416
788
        if (bitsconsumed + 8 > buffer_size*8)
1417
154
        {
1418
154
            hInfo->error = 14;
1419
154
            return;
1420
154
        }
1421
1422
634
        if (!hDecoder->sbr[0])
1423
481
        {
1424
481
            hDecoder->sbr[0] = sbrDecodeInit(hDecoder->frameLength, hDecoder->element_id[0],
1425
481
                2*get_sample_rate(hDecoder->sf_index), 0 /* ds SBR */, 1);
1426
481
        }
1427
634
        if (!hDecoder->sbr[0])
1428
0
        {
1429
0
            hInfo->error = 19;
1430
0
            return;
1431
0
        }
1432
1433
        /* Reverse bit reading of SBR data in DRM audio frame */
1434
634
        revbuffer = (uint8_t*)faad_malloc(buffer_size*sizeof(uint8_t));
1435
634
        prevbufstart = revbuffer;
1436
634
        pbufend = &buffer[buffer_size - 1];
1437
6.87M
        for (i = 0; i < buffer_size; i++)
1438
6.87M
            *prevbufstart++ = reverse_byte(*pbufend--);
1439
1440
        /* Set SBR data */
1441
        /* consider 8 bits from AAC-CRC */
1442
        /* SBR buffer size is original buffer size minus AAC buffer size */
1443
634
        count = (uint16_t)bit2byte(buffer_size*8 - bitsconsumed);
1444
634
        faad_initbits(&ld_sbr, revbuffer, count);
1445
1446
634
        hDecoder->sbr[0]->sample_rate = get_sample_rate(hDecoder->sf_index);
1447
634
        hDecoder->sbr[0]->sample_rate *= 2;
1448
1449
634
        faad_getbits(&ld_sbr, 8); /* Skip 8-bit CRC */
1450
1451
634
        hDecoder->sbr[0]->ret = sbr_extension_data(&ld_sbr, hDecoder->sbr[0], count, hDecoder->postSeekResetFlag);
1452
634
#if (defined(PS_DEC) || defined(DRM_PS))
1453
634
        if (hDecoder->sbr[0]->ps_used)
1454
402
        {
1455
402
            hDecoder->ps_used[0] = 1;
1456
402
            hDecoder->ps_used_global = 1;
1457
402
        }
1458
634
#endif
1459
1460
634
        if (ld_sbr.error)
1461
5
        {
1462
5
            hDecoder->sbr[0]->ret = 1;
1463
5
        }
1464
1465
        /* check CRC */
1466
        /* no need to check it if there was already an error */
1467
634
        if (hDecoder->sbr[0]->ret == 0)
1468
351
            hDecoder->sbr[0]->ret = (uint8_t)faad_check_CRC(&ld_sbr, (uint16_t)faad_get_processed_bits(&ld_sbr) - 8);
1469
1470
        /* SBR data was corrupted, disable it until the next header */
1471
634
        if (hDecoder->sbr[0]->ret != 0)
1472
363
        {
1473
363
            hDecoder->sbr[0]->header_count = 0;
1474
363
        }
1475
1476
634
        faad_endbits(&ld_sbr);
1477
1478
634
        if (revbuffer)
1479
634
            faad_free(revbuffer);
1480
634
    }
1481
682
#endif
1482
682
#endif
1483
1484
682
    if (this_layer_stereo)
1485
56
    {
1486
56
        hInfo->error = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe, spec_data1, spec_data2);
1487
56
        if (hInfo->error > 0)
1488
5
            return;
1489
626
    } else {
1490
626
        hInfo->error = reconstruct_single_channel(hDecoder, ics1, &cpe, spec_data1);
1491
626
        if (hInfo->error > 0)
1492
4
            return;
1493
626
    }
1494
1495
    /* map output channels position to internal data channels */
1496
673
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
1497
673
    {
1498
        /* this might be faulty when pce_set is true */
1499
673
        hDecoder->internal_channel[channels] = channels;
1500
673
        hDecoder->internal_channel[channels+1] = channels+1;
1501
673
    } else {
1502
0
        hDecoder->internal_channel[channels] = channels;
1503
0
    }
1504
1505
673
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
1506
673
    hDecoder->fr_ch_ele++;
1507
1508
673
    return;
1509
682
}
1510
1511
/* Table 4.4.15 */
1512
static int8_t DRM_aac_scalable_main_header(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
1513
                                           bitfile *ld, uint8_t this_layer_stereo)
1514
1.51k
{
1515
1.51k
    uint8_t retval = 0;
1516
1.51k
    uint8_t ics_reserved_bit;
1517
1518
1.51k
    ics_reserved_bit = faad_get1bit(ld
1519
1.51k
        DEBUGVAR(1,300,"aac_scalable_main_header(): ics_reserved_bits"));
1520
1.51k
    if (ics_reserved_bit != 0)
1521
10
        return 32;
1522
1.50k
    ics1->window_sequence = (uint8_t)faad_getbits(ld, 2
1523
1.50k
        DEBUGVAR(1,301,"aac_scalable_main_header(): window_sequence"));
1524
1.50k
    ics1->window_shape = faad_get1bit(ld
1525
1.50k
        DEBUGVAR(1,302,"aac_scalable_main_header(): window_shape"));
1526
1527
1.50k
    if (ics1->window_sequence == EIGHT_SHORT_SEQUENCE)
1528
326
    {
1529
326
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 4
1530
326
            DEBUGVAR(1,303,"aac_scalable_main_header(): max_sfb (short)"));
1531
326
        ics1->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
1532
326
            DEBUGVAR(1,304,"aac_scalable_main_header(): scale_factor_grouping"));
1533
1.17k
    } else {
1534
1.17k
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 6
1535
1.17k
            DEBUGVAR(1,305,"aac_scalable_main_header(): max_sfb (long)"));
1536
1.17k
    }
1537
1538
    /* get the grouping information */
1539
1.50k
    if ((retval = window_grouping_info(hDecoder, ics1)) > 0)
1540
16
        return retval;
1541
1542
    /* should be an error */
1543
    /* check the range of max_sfb */
1544
1.48k
    if (ics1->max_sfb > ics1->num_swb)
1545
0
        return 16;
1546
1547
1.48k
    if (this_layer_stereo)
1548
450
    {
1549
450
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
1550
450
            DEBUGVAR(1,306,"aac_scalable_main_header(): ms_mask_present"));
1551
450
        if (ics1->ms_mask_present == 3)
1552
6
        {
1553
            /* bitstream error */
1554
6
            return 32;
1555
6
        }
1556
444
        if (ics1->ms_mask_present == 1)
1557
148
        {
1558
148
            uint8_t g, sfb;
1559
571
            for (g = 0; g < ics1->num_window_groups; g++)
1560
423
            {
1561
3.36k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
1562
2.94k
                {
1563
2.94k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
1564
2.94k
                        DEBUGVAR(1,307,"aac_scalable_main_header(): faad_get1bit"));
1565
2.94k
                }
1566
423
            }
1567
148
        }
1568
1569
444
        memcpy(ics2, ics1, sizeof(ic_stream));
1570
1.03k
    } else {
1571
1.03k
        ics1->ms_mask_present = 0;
1572
1.03k
    }
1573
1574
1.47k
    return 0;
1575
1.48k
}
1576
#endif
1577
1578
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
1579
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag)
1580
708k
{
1581
708k
    uint8_t result;
1582
1583
708k
    ics->global_gain = (uint8_t)faad_getbits(ld, 8
1584
708k
        DEBUGVAR(1,67,"individual_channel_stream(): global_gain"));
1585
1586
708k
    if (!ele->common_window && !scal_flag)
1587
618k
    {
1588
618k
        if ((result = ics_info(hDecoder, ics, ld, ele->common_window)) > 0)
1589
1.33k
            return result;
1590
618k
    }
1591
1592
707k
    if ((result = section_data(hDecoder, ics, ld)) > 0)
1593
2.65k
        return result;
1594
1595
704k
    if ((result = scale_factor_data(hDecoder, ics, ld)) > 0)
1596
57
        return result;
1597
1598
704k
    if (!scal_flag)
1599
702k
    {
1600
        /**
1601
         **  NOTE: It could be that pulse data is available in scalable AAC too,
1602
         **        as said in Amendment 1, this could be only the case for ER AAC,
1603
         **        though. (have to check this out later)
1604
         **/
1605
        /* get pulse data */
1606
702k
        if ((ics->pulse_data_present = faad_get1bit(ld
1607
702k
            DEBUGVAR(1,68,"individual_channel_stream(): pulse_data_present"))) & 1)
1608
22.3k
        {
1609
22.3k
            if ((result = pulse_data(ics, &(ics->pul), ld)) > 0)
1610
186
                return result;
1611
22.3k
        }
1612
1613
        /* get tns data */
1614
702k
        if ((ics->tns_data_present = faad_get1bit(ld
1615
702k
            DEBUGVAR(1,69,"individual_channel_stream(): tns_data_present"))) & 1)
1616
47.4k
        {
1617
47.4k
#ifdef ERROR_RESILIENCE
1618
47.4k
            if (hDecoder->object_type < ER_OBJECT_START)
1619
45.5k
#endif
1620
45.5k
                tns_data(ics, &(ics->tns), ld);
1621
47.4k
        }
1622
1623
        /* get gain control data */
1624
702k
        if ((ics->gain_control_data_present = faad_get1bit(ld
1625
702k
            DEBUGVAR(1,70,"individual_channel_stream(): gain_control_data_present"))) & 1)
1626
215
        {
1627
#ifdef SSR_DEC
1628
            if (hDecoder->object_type != SSR)
1629
                return 1;
1630
            else
1631
                gain_control_data(ld, ics);
1632
#else
1633
215
            return 1;
1634
215
#endif
1635
215
        }
1636
702k
    }
1637
1638
703k
#ifdef ERROR_RESILIENCE
1639
703k
    if (hDecoder->aacSpectralDataResilienceFlag)
1640
19.1k
    {
1641
19.1k
        ics->length_of_reordered_spectral_data = (uint16_t)faad_getbits(ld, 14
1642
19.1k
            DEBUGVAR(1,147,"individual_channel_stream(): length_of_reordered_spectral_data"));
1643
1644
19.1k
        if (hDecoder->channelConfiguration == 2)
1645
5.44k
        {
1646
5.44k
            if (ics->length_of_reordered_spectral_data > 6144)
1647
3.00k
                ics->length_of_reordered_spectral_data = 6144;
1648
13.6k
        } else {
1649
13.6k
            if (ics->length_of_reordered_spectral_data > 12288)
1650
313
                ics->length_of_reordered_spectral_data = 12288;
1651
13.6k
        }
1652
1653
19.1k
        ics->length_of_longest_codeword = (uint8_t)faad_getbits(ld, 6
1654
19.1k
            DEBUGVAR(1,148,"individual_channel_stream(): length_of_longest_codeword"));
1655
19.1k
        if (ics->length_of_longest_codeword >= 49)
1656
747
            ics->length_of_longest_codeword = 49;
1657
19.1k
    }
1658
1659
    /* RVLC spectral data is put here */
1660
703k
    if (hDecoder->aacScalefactorDataResilienceFlag)
1661
29.8k
    {
1662
29.8k
        if ((result = rvlc_decode_scale_factors(ics, ld)) > 0)
1663
97
            return result;
1664
29.8k
    }
1665
703k
#endif
1666
1667
703k
    return 0;
1668
703k
}
1669
1670
/* Table 4.4.24 */
1671
static uint8_t individual_channel_stream(NeAACDecStruct *hDecoder, element *ele,
1672
                                         bitfile *ld, ic_stream *ics, uint8_t scal_flag,
1673
                                         int16_t *spec_data)
1674
706k
{
1675
706k
    uint8_t result;
1676
1677
706k
    result = side_info(hDecoder, ele, ld, ics, scal_flag);
1678
706k
    if (result > 0)
1679
4.34k
        return result;
1680
1681
702k
    if (hDecoder->object_type >= ER_OBJECT_START)
1682
37.9k
    {
1683
37.9k
        if (ics->tns_data_present)
1684
1.90k
            tns_data(ics, &(ics->tns), ld);
1685
37.9k
    }
1686
1687
#ifdef DRM
1688
    /* CRC check */
1689
305k
    if (hDecoder->object_type == DRM_ER_LC)
1690
0
    {
1691
0
        if ((result = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1692
0
            return result;
1693
0
    }
1694
305k
#endif
1695
1696
305k
#ifdef ERROR_RESILIENCE
1697
702k
    if (hDecoder->aacSpectralDataResilienceFlag)
1698
17.7k
    {
1699
        /* error resilient spectral data decoding */
1700
17.7k
        if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1701
301
        {
1702
301
            return result;
1703
301
        }
1704
684k
    } else {
1705
684k
#endif
1706
        /* decode the spectral data */
1707
684k
        if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1708
154
        {
1709
154
            return result;
1710
154
        }
1711
684k
#ifdef ERROR_RESILIENCE
1712
684k
    }
1713
701k
#endif
1714
1715
    /* pulse coding reconstruction */
1716
701k
    if (ics->pulse_data_present)
1717
22.1k
    {
1718
22.1k
        if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
1719
22.0k
        {
1720
22.0k
            if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
1721
36
                return result;
1722
22.0k
        } else {
1723
76
            return 2; /* pulse coding not allowed for short blocks */
1724
76
        }
1725
22.1k
    }
1726
1727
701k
    return 0;
1728
701k
}
syntax.c:individual_channel_stream
Line
Count
Source
1674
308k
{
1675
308k
    uint8_t result;
1676
1677
308k
    result = side_info(hDecoder, ele, ld, ics, scal_flag);
1678
308k
    if (result > 0)
1679
2.25k
        return result;
1680
1681
305k
    if (hDecoder->object_type >= ER_OBJECT_START)
1682
20.5k
    {
1683
20.5k
        if (ics->tns_data_present)
1684
981
            tns_data(ics, &(ics->tns), ld);
1685
20.5k
    }
1686
1687
305k
#ifdef DRM
1688
    /* CRC check */
1689
305k
    if (hDecoder->object_type == DRM_ER_LC)
1690
0
    {
1691
0
        if ((result = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1692
0
            return result;
1693
0
    }
1694
305k
#endif
1695
1696
305k
#ifdef ERROR_RESILIENCE
1697
305k
    if (hDecoder->aacSpectralDataResilienceFlag)
1698
7.12k
    {
1699
        /* error resilient spectral data decoding */
1700
7.12k
        if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1701
146
        {
1702
146
            return result;
1703
146
        }
1704
298k
    } else {
1705
298k
#endif
1706
        /* decode the spectral data */
1707
298k
        if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1708
93
        {
1709
93
            return result;
1710
93
        }
1711
298k
#ifdef ERROR_RESILIENCE
1712
298k
    }
1713
305k
#endif
1714
1715
    /* pulse coding reconstruction */
1716
305k
    if (ics->pulse_data_present)
1717
8.13k
    {
1718
8.13k
        if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
1719
8.09k
        {
1720
8.09k
            if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
1721
18
                return result;
1722
8.09k
        } else {
1723
46
            return 2; /* pulse coding not allowed for short blocks */
1724
46
        }
1725
8.13k
    }
1726
1727
305k
    return 0;
1728
305k
}
syntax.c:individual_channel_stream
Line
Count
Source
1674
398k
{
1675
398k
    uint8_t result;
1676
1677
398k
    result = side_info(hDecoder, ele, ld, ics, scal_flag);
1678
398k
    if (result > 0)
1679
2.08k
        return result;
1680
1681
396k
    if (hDecoder->object_type >= ER_OBJECT_START)
1682
17.4k
    {
1683
17.4k
        if (ics->tns_data_present)
1684
927
            tns_data(ics, &(ics->tns), ld);
1685
17.4k
    }
1686
1687
#ifdef DRM
1688
    /* CRC check */
1689
    if (hDecoder->object_type == DRM_ER_LC)
1690
    {
1691
        if ((result = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1692
            return result;
1693
    }
1694
#endif
1695
1696
396k
#ifdef ERROR_RESILIENCE
1697
396k
    if (hDecoder->aacSpectralDataResilienceFlag)
1698
10.6k
    {
1699
        /* error resilient spectral data decoding */
1700
10.6k
        if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1701
155
        {
1702
155
            return result;
1703
155
        }
1704
385k
    } else {
1705
385k
#endif
1706
        /* decode the spectral data */
1707
385k
        if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1708
61
        {
1709
61
            return result;
1710
61
        }
1711
385k
#ifdef ERROR_RESILIENCE
1712
385k
    }
1713
396k
#endif
1714
1715
    /* pulse coding reconstruction */
1716
396k
    if (ics->pulse_data_present)
1717
13.9k
    {
1718
13.9k
        if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
1719
13.9k
        {
1720
13.9k
            if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
1721
18
                return result;
1722
13.9k
        } else {
1723
30
            return 2; /* pulse coding not allowed for short blocks */
1724
30
        }
1725
13.9k
    }
1726
1727
396k
    return 0;
1728
396k
}
1729
1730
/* Table 4.4.25 */
1731
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1732
309k
{
1733
309k
    uint8_t g;
1734
309k
    uint8_t sect_esc_val, sect_bits;
1735
309k
    uint8_t sect_lim; /* 51 or 120, anyways less than 127. */
1736
1737
309k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) {
1738
33.7k
        sect_bits = 3;
1739
33.7k
        sect_lim = 8 * 15;
1740
275k
    } else {
1741
275k
        sect_bits = 5;
1742
275k
        sect_lim = MAX_SFB;
1743
275k
    }
1744
309k
    sect_esc_val = (1u<<sect_bits) - 1;
1745
1746
#if 0
1747
    printf("\ntotal sfb %d\n", ics->max_sfb);
1748
    printf("   sect    top     cb\n");
1749
#endif
1750
1751
799k
    for (g = 0; g < ics->num_window_groups; g++)
1752
491k
    {
1753
491k
        uint8_t k = 0;
1754
491k
        uint8_t i = 0;
1755
1756
627k
        while (k < ics->max_sfb)
1757
137k
        {
1758
137k
#ifdef ERROR_RESILIENCE
1759
137k
            uint8_t vcb11 = 0;
1760
137k
#endif
1761
137k
            uint8_t sfb;
1762
137k
            uint8_t sect_len_incr;
1763
137k
            uint8_t sect_len = 0;
1764
137k
            uint8_t sect_cb_bits = 4;
1765
1766
            /* if "faad_getbits" detects error and returns "0", "k" is never
1767
               incremented and we cannot leave the while loop */
1768
137k
            if (ld->error != 0)
1769
0
                return 14;
1770
137k
            if (i >= sect_lim)
1771
949
                return 15;
1772
1773
136k
#ifdef ERROR_RESILIENCE
1774
136k
            if (hDecoder->aacSectionDataResilienceFlag)
1775
55.3k
                sect_cb_bits = 5;
1776
136k
#endif
1777
1778
136k
            ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits
1779
136k
                DEBUGVAR(1,71,"section_data(): sect_cb"));
1780
1781
136k
            if (ics->sect_cb[g][i] == 12)
1782
97
                return 32;
1783
1784
#if 0
1785
            printf("%d\n", ics->sect_cb[g][i]);
1786
#endif
1787
1788
#ifndef DRM
1789
            if (ics->sect_cb[g][i] == NOISE_HCB)
1790
                ics->noise_used = 1;
1791
#else
1792
            /* PNS not allowed in DRM */
1793
136k
            if (ics->sect_cb[g][i] == NOISE_HCB)
1794
29
                return 29;
1795
136k
#endif
1796
136k
            if (ics->sect_cb[g][i] == INTENSITY_HCB2 || ics->sect_cb[g][i] == INTENSITY_HCB)
1797
3.89k
                ics->is_used = 1;
1798
1799
136k
#ifdef ERROR_RESILIENCE
1800
136k
            if (hDecoder->aacSectionDataResilienceFlag)
1801
55.3k
            {
1802
55.3k
                if ((ics->sect_cb[g][i] == 11) ||
1803
54.8k
                    ((ics->sect_cb[g][i] >= 16) && (ics->sect_cb[g][i] <= 32)))
1804
11.5k
                {
1805
11.5k
                    vcb11 = 1;
1806
11.5k
                }
1807
55.3k
            }
1808
136k
            if (vcb11)
1809
11.5k
            {
1810
11.5k
                sect_len_incr = 1;
1811
124k
            } else {
1812
124k
#endif
1813
124k
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1814
124k
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1815
124k
#ifdef ERROR_RESILIENCE
1816
124k
            }
1817
136k
#endif
1818
137k
            while (sect_len_incr == sect_esc_val /* &&
1819
136k
                (k+sect_len < ics->max_sfb)*/)
1820
1.29k
            {
1821
1.29k
                sect_len += sect_len_incr;
1822
1.29k
                if (sect_len > sect_lim)
1823
25
                    return 15;
1824
1.27k
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1825
1.27k
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1826
1.27k
            }
1827
1828
136k
            sect_len += sect_len_incr;
1829
1830
136k
            ics->sect_start[g][i] = k;
1831
136k
            ics->sect_end[g][i] = k + sect_len;
1832
1833
#if 0
1834
            printf("%d\n", ics->sect_start[g][i]);
1835
#endif
1836
#if 0
1837
            printf("%d\n", ics->sect_end[g][i]);
1838
#endif
1839
1840
136k
            if (sect_len > sect_lim)
1841
27
                return 15;
1842
136k
            if (k + sect_len > sect_lim)
1843
23
                return 15;
1844
1845
401k
            for (sfb = k; sfb < k + sect_len; sfb++)
1846
265k
            {
1847
265k
                ics->sfb_cb[g][sfb] = ics->sect_cb[g][i];
1848
#if 0
1849
                printf("%d\n", ics->sfb_cb[g][sfb]);
1850
#endif
1851
265k
            }
1852
1853
#if 0
1854
            printf(" %6d %6d %6d\n",
1855
                i,
1856
                ics->sect_end[g][i],
1857
                ics->sect_cb[g][i]);
1858
#endif
1859
1860
136k
            k += sect_len; /* k <= sect_lim */
1861
136k
            i++;
1862
136k
        }
1863
490k
        ics->num_sec[g] = i;
1864
1865
        /* the sum of all sect_len_incr elements for a given window
1866
         * group shall equal max_sfb */
1867
490k
        if (k != ics->max_sfb)
1868
404
        {
1869
404
            return 32;
1870
404
        }
1871
#if 0
1872
        printf("%d\n", ics->num_sec[g]);
1873
#endif
1874
490k
    }
1875
1876
#if 0
1877
    printf("\n");
1878
#endif
1879
1880
307k
    return 0;
1881
309k
}
1882
1883
/*
1884
 *  decode_scale_factors()
1885
 *   decodes the scalefactors from the bitstream
1886
 */
1887
/*
1888
 * All scalefactors (and also the stereo positions and pns energies) are
1889
 * transmitted using Huffman coded DPCM relative to the previous active
1890
 * scalefactor (respectively previous stereo position or previous pns energy,
1891
 * see subclause 4.6.2 and 4.6.3). The first active scalefactor is
1892
 * differentially coded relative to the global gain.
1893
 */
1894
static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld)
1895
295k
{
1896
295k
    uint8_t g, sfb;
1897
295k
    int16_t t;
1898
1899
295k
    int16_t scale_factor = ics->global_gain;
1900
295k
    int16_t is_position = 0;
1901
295k
    int16_t scale_factor_max = 255;
1902
295k
#ifdef FIXED_POINT
1903
    /* TODO: consider rolling out to regular build. */
1904
295k
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
1905
    /* The value is inexact, adjusted to current fuzzer findings. */
1906
295k
    scale_factor_max = 165;
1907
295k
#endif  // FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
1908
295k
#endif  // FIXED_POINT
1909
#ifndef DRM
1910
    int8_t noise_pcm_flag = 1;
1911
    int16_t noise_energy = ics->global_gain - 90;
1912
#endif
1913
1914
767k
    for (g = 0; g < ics->num_window_groups; g++)
1915
472k
    {
1916
686k
        for (sfb = 0; sfb < ics->max_sfb; sfb++)
1917
213k
        {
1918
213k
            switch (ics->sfb_cb[g][sfb])
1919
213k
            {
1920
123k
            case ZERO_HCB: /* zero book */
1921
123k
                ics->scale_factors[g][sfb] = 0;
1922
//#define SF_PRINT
1923
#ifdef SF_PRINT
1924
                printf("%d\n", ics->scale_factors[g][sfb]);
1925
#endif
1926
123k
                break;
1927
7.26k
            case INTENSITY_HCB: /* intensity books */
1928
13.1k
            case INTENSITY_HCB2:
1929
1930
                /* decode intensity position */
1931
13.1k
                t = huffman_scale_factor(ld);
1932
13.1k
                is_position += (t - 60);
1933
13.1k
                ics->scale_factors[g][sfb] = is_position;
1934
#ifdef SF_PRINT
1935
                printf("%d\n", ics->scale_factors[g][sfb]);
1936
#endif
1937
1938
13.1k
                break;
1939
0
            case NOISE_HCB: /* noise books */
1940
1941
#ifndef DRM
1942
                /* decode noise energy */
1943
                if (noise_pcm_flag)
1944
                {
1945
                    noise_pcm_flag = 0;
1946
                    t = (int16_t)faad_getbits(ld, 9
1947
                        DEBUGVAR(1,73,"scale_factor_data(): first noise")) - 256;
1948
                } else {
1949
                    t = huffman_scale_factor(ld);
1950
                    t -= 60;
1951
                }
1952
                noise_energy += t;
1953
                ics->scale_factors[g][sfb] = noise_energy;
1954
#ifdef SF_PRINT
1955
                printf("%d\n", ics->scale_factors[g][sfb]);
1956
#endif
1957
#else
1958
                /* PNS not allowed in DRM */
1959
0
                return 29;
1960
0
#endif
1961
1962
0
                break;
1963
77.4k
            default: /* spectral books */
1964
1965
                /* ics->scale_factors[g][sfb] must be between 0 and 255 */
1966
1967
77.4k
                ics->scale_factors[g][sfb] = 0;
1968
1969
                /* decode scale factor */
1970
77.4k
                t = huffman_scale_factor(ld);
1971
77.4k
                scale_factor += (t - 60);
1972
77.4k
                if (scale_factor < 0 || scale_factor > 255)
1973
26
                    return 4;
1974
77.4k
                ics->scale_factors[g][sfb] = min(scale_factor, scale_factor_max);
1975
#ifdef SF_PRINT
1976
                printf("%d\n", ics->scale_factors[g][sfb]);
1977
#endif
1978
1979
77.4k
                break;
1980
213k
            }
1981
213k
        }
1982
472k
    }
1983
1984
295k
    return 0;
1985
295k
}
1986
1987
/* Table 4.4.26 */
1988
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1989
704k
{
1990
704k
    uint8_t ret = 0;
1991
#ifdef PROFILE
1992
    int64_t count = faad_get_ts();
1993
#endif
1994
1995
704k
#ifdef ERROR_RESILIENCE
1996
704k
    if (!hDecoder->aacScalefactorDataResilienceFlag)
1997
674k
    {
1998
674k
#endif
1999
674k
        ret = decode_scale_factors(ics, ld);
2000
674k
#ifdef ERROR_RESILIENCE
2001
674k
    } else {
2002
        /* In ER AAC the parameters for RVLC are seperated from the actual
2003
           data that holds the scale_factors.
2004
           Strangely enough, 2 parameters for HCR are put inbetween them.
2005
        */
2006
29.8k
        ret = rvlc_scale_factor_data(ics, ld);
2007
29.8k
    }
2008
704k
#endif
2009
2010
#ifdef PROFILE
2011
    count = faad_get_ts() - count;
2012
    hDecoder->scalefac_cycles += count;
2013
#endif
2014
2015
704k
    return ret;
2016
704k
}
2017
2018
/* Table 4.4.27 */
2019
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld)
2020
47.7k
{
2021
47.7k
    uint8_t w, filt, i, coef_bits;
2022
47.7k
    uint8_t n_filt_bits = 2;
2023
47.7k
    uint8_t length_bits = 6;
2024
47.7k
    uint8_t order_bits = 5;
2025
2026
47.7k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
2027
7.57k
    {
2028
7.57k
        n_filt_bits = 1;
2029
7.57k
        length_bits = 4;
2030
7.57k
        order_bits = 3;
2031
7.57k
    }
2032
2033
148k
    for (w = 0; w < ics->num_windows; w++)
2034
100k
    {
2035
100k
        uint8_t start_coef_bits = 3;
2036
100k
        tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits
2037
100k
            DEBUGVAR(1,74,"tns_data(): n_filt"));
2038
#if 0
2039
        printf("%d\n", tns->n_filt[w]);
2040
#endif
2041
2042
100k
        if (tns->n_filt[w])
2043
33.9k
        {
2044
33.9k
            if ((tns->coef_res[w] = faad_get1bit(ld
2045
33.9k
                DEBUGVAR(1,75,"tns_data(): coef_res"))) & 1)
2046
11.7k
                start_coef_bits = 4;
2047
#if 0
2048
            printf("%d\n", tns->coef_res[w]);
2049
#endif
2050
33.9k
        }
2051
2052
149k
        for (filt = 0; filt < tns->n_filt[w]; filt++)
2053
48.7k
        {
2054
48.7k
            tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits
2055
48.7k
                DEBUGVAR(1,76,"tns_data(): length"));
2056
#if 0
2057
            printf("%d\n", tns->length[w][filt]);
2058
#endif
2059
48.7k
            tns->order[w][filt]  = (uint8_t)faad_getbits(ld, order_bits
2060
48.7k
                DEBUGVAR(1,77,"tns_data(): order"));
2061
#if 0
2062
            printf("%d\n", tns->order[w][filt]);
2063
#endif
2064
48.7k
            if (tns->order[w][filt])
2065
28.7k
            {
2066
28.7k
                tns->direction[w][filt] = faad_get1bit(ld
2067
28.7k
                    DEBUGVAR(1,78,"tns_data(): direction"));
2068
#if 0
2069
                printf("%d\n", tns->direction[w][filt]);
2070
#endif
2071
28.7k
                tns->coef_compress[w][filt] = faad_get1bit(ld
2072
28.7k
                    DEBUGVAR(1,79,"tns_data(): coef_compress"));
2073
#if 0
2074
                printf("%d\n", tns->coef_compress[w][filt]);
2075
#endif
2076
2077
28.7k
                coef_bits = start_coef_bits - tns->coef_compress[w][filt];
2078
196k
                for (i = 0; i < tns->order[w][filt]; i++)
2079
168k
                {
2080
168k
                    tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits
2081
168k
                        DEBUGVAR(1,80,"tns_data(): coef"));
2082
#if 0
2083
                    printf("%d\n", tns->coef[w][filt][i]);
2084
#endif
2085
168k
                }
2086
28.7k
            }
2087
48.7k
        }
2088
100k
    }
2089
47.7k
}
2090
2091
#ifdef LTP_DEC
2092
/* Table 4.4.28 */
2093
static uint8_t ltp_data(NeAACDecStruct *hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld)
2094
15.7k
{
2095
15.7k
    uint8_t sfb, w;
2096
2097
15.7k
    ltp->lag = 0;
2098
2099
15.7k
#ifdef LD_DEC
2100
15.7k
    if (hDecoder->object_type == LD)
2101
551
    {
2102
551
        ltp->lag_update = (uint8_t)faad_getbits(ld, 1
2103
551
            DEBUGVAR(1,142,"ltp_data(): lag_update"));
2104
2105
551
        if (ltp->lag_update)
2106
232
        {
2107
232
            ltp->lag = (uint16_t)faad_getbits(ld, 10
2108
232
                DEBUGVAR(1,81,"ltp_data(): lag"));
2109
232
        }
2110
15.2k
    } else {
2111
15.2k
#endif
2112
15.2k
        ltp->lag = (uint16_t)faad_getbits(ld, 11
2113
15.2k
            DEBUGVAR(1,81,"ltp_data(): lag"));
2114
15.2k
#ifdef LD_DEC
2115
15.2k
    }
2116
15.7k
#endif
2117
2118
    /* Check length of lag */
2119
15.7k
    if (ltp->lag > (hDecoder->frameLength << 1))
2120
21
        return 18;
2121
2122
15.7k
    ltp->coef = (uint8_t)faad_getbits(ld, 3
2123
15.7k
        DEBUGVAR(1,82,"ltp_data(): coef"));
2124
2125
15.7k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
2126
0
    {
2127
0
        for (w = 0; w < ics->num_windows; w++)
2128
0
        {
2129
0
            if ((ltp->short_used[w] = faad_get1bit(ld
2130
0
                DEBUGVAR(1,83,"ltp_data(): short_used"))) & 1)
2131
0
            {
2132
0
                ltp->short_lag_present[w] = faad_get1bit(ld
2133
0
                    DEBUGVAR(1,84,"ltp_data(): short_lag_present"));
2134
0
                if (ltp->short_lag_present[w])
2135
0
                {
2136
0
                    ltp->short_lag[w] = (uint8_t)faad_getbits(ld, 4
2137
0
                        DEBUGVAR(1,85,"ltp_data(): short_lag"));
2138
0
                }
2139
0
            }
2140
0
        }
2141
15.7k
    } else {
2142
15.7k
        ltp->last_band = (ics->max_sfb < MAX_LTP_SFB ? ics->max_sfb : MAX_LTP_SFB);
2143
2144
36.5k
        for (sfb = 0; sfb < ltp->last_band; sfb++)
2145
20.7k
        {
2146
20.7k
            ltp->long_used[sfb] = faad_get1bit(ld
2147
20.7k
                DEBUGVAR(1,86,"ltp_data(): long_used"));
2148
20.7k
        }
2149
15.7k
    }
2150
2151
15.7k
    return 0;
2152
15.7k
}
2153
#endif
2154
2155
/* Table 4.4.29 */
2156
static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
2157
                             int16_t *spectral_data)
2158
684k
{
2159
684k
    int8_t i;
2160
684k
    uint8_t g;
2161
684k
    uint16_t inc, k, p = 0;
2162
684k
    uint8_t groups = 0;
2163
684k
    uint8_t sect_cb;
2164
684k
    uint8_t result;
2165
684k
    uint16_t nshort = hDecoder->frameLength/8;
2166
2167
#ifdef PROFILE
2168
    int64_t count = faad_get_ts();
2169
#endif
2170
2171
1.79M
    for(g = 0; g < ics->num_window_groups; g++)
2172
1.10M
    {
2173
1.10M
        p = groups*nshort;
2174
2175
1.20M
        for (i = 0; i < ics->num_sec[g]; i++)
2176
101k
        {
2177
101k
            sect_cb = ics->sect_cb[g][i];
2178
2179
101k
            inc = (sect_cb >= FIRST_PAIR_HCB) ? 2 : 4;
2180
2181
101k
            switch (sect_cb)
2182
101k
            {
2183
36.8k
            case ZERO_HCB:
2184
41.8k
            case NOISE_HCB:
2185
44.3k
            case INTENSITY_HCB:
2186
46.2k
            case INTENSITY_HCB2:
2187
//#define SD_PRINT
2188
#ifdef SD_PRINT
2189
                {
2190
                    int j;
2191
                    for (j = ics->sect_sfb_offset[g][ics->sect_start[g][i]]; j < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; j++)
2192
                    {
2193
                        printf("%d\n", 0);
2194
                    }
2195
                }
2196
#endif
2197
//#define SFBO_PRINT
2198
#ifdef SFBO_PRINT
2199
                printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2200
#endif
2201
46.2k
                p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] -
2202
46.2k
                    ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2203
46.2k
                break;
2204
55.1k
            default:
2205
#ifdef SFBO_PRINT
2206
                printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2207
#endif
2208
55.1k
                for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]];
2209
1.01M
                     k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += inc)
2210
963k
                {
2211
963k
                    if ((result = huffman_spectral_data(sect_cb, ld, &spectral_data[p])) > 0)
2212
154
                        return result;
2213
#ifdef SD_PRINT
2214
                    {
2215
                        int j;
2216
                        for (j = p; j < p+inc; j++)
2217
                        {
2218
                            printf("%d\n", spectral_data[j]);
2219
                        }
2220
                    }
2221
#endif
2222
962k
                    p += inc;
2223
962k
                }
2224
55.0k
                break;
2225
101k
            }
2226
101k
        }
2227
1.10M
        groups += ics->window_group_length[g];
2228
1.10M
    }
2229
2230
#ifdef PROFILE
2231
    count = faad_get_ts() - count;
2232
    hDecoder->spectral_cycles += count;
2233
#endif
2234
2235
684k
    return 0;
2236
684k
}
2237
2238
#ifndef DRM
2239
/* Table 4.4.30 */
2240
static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count)
2241
40.2k
{
2242
40.2k
    uint16_t i, n, dataElementLength;
2243
40.2k
    uint8_t dataElementLengthPart;
2244
40.2k
    uint8_t align = 4, data_element_version, loopCounter;
2245
2246
40.2k
    uint8_t extension_type = (uint8_t)faad_getbits(ld, 4
2247
40.2k
        DEBUGVAR(1,87,"extension_payload(): extension_type"));
2248
2249
40.2k
    switch (extension_type)
2250
40.2k
    {
2251
12.6k
    case EXT_DYNAMIC_RANGE:
2252
12.6k
        drc->present = 1;
2253
12.6k
        n = dynamic_range_info(ld, drc);
2254
12.6k
        return n;
2255
12.2k
    case EXT_FILL_DATA:
2256
12.2k
        /* fill_nibble = */ faad_getbits(ld, 4
2257
12.2k
            DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be '0000' */
2258
67.8k
        for (i = 0; i < count-1; i++)
2259
55.5k
        {
2260
55.5k
            /* fill_byte[i] = */ faad_getbits(ld, 8
2261
55.5k
                DEBUGVAR(1,88,"extension_payload(): fill_byte")); /* must be '10100101' */
2262
55.5k
        }
2263
12.2k
        return count;
2264
10.1k
    case EXT_DATA_ELEMENT:
2265
10.1k
        data_element_version = (uint8_t)faad_getbits(ld, 4
2266
10.1k
            DEBUGVAR(1,400,"extension_payload(): data_element_version"));
2267
10.1k
        switch (data_element_version)
2268
10.1k
        {
2269
2.21k
        case ANC_DATA:
2270
2.21k
            loopCounter = 0;
2271
2.21k
            dataElementLength = 0;
2272
6.58k
            do {
2273
6.58k
                dataElementLengthPart = (uint8_t)faad_getbits(ld, 8
2274
6.58k
                    DEBUGVAR(1,401,"extension_payload(): dataElementLengthPart"));
2275
6.58k
                dataElementLength += dataElementLengthPart;
2276
6.58k
                loopCounter++;
2277
6.58k
            } while (dataElementLengthPart == 255);
2278
2279
2.21k
            for (i = 0; i < dataElementLength; i++)
2280
2.07k
            {
2281
2.07k
                /* data_element_byte[i] = */ faad_getbits(ld, 8
2282
2.07k
                    DEBUGVAR(1,402,"extension_payload(): data_element_byte"));
2283
2.07k
                return (dataElementLength+loopCounter+1);
2284
2.07k
            }
2285
8.03k
        default:
2286
8.03k
            align = 0;
2287
10.1k
        }
2288
9.04k
    case EXT_FIL:
2289
13.3k
    default:
2290
13.3k
        faad_getbits(ld, align
2291
13.3k
            DEBUGVAR(1,88,"extension_payload(): fill_nibble"));
2292
642k
        for (i = 0; i < count-1; i++)
2293
628k
        {
2294
628k
            /* other_bits[i] = */ faad_getbits(ld, 8
2295
628k
               DEBUGVAR(1,89,"extension_payload(): fill_bit"));
2296
628k
        }
2297
13.3k
        return count;
2298
40.2k
    }
2299
40.2k
}
2300
2301
/* Table 4.4.31 */
2302
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc)
2303
12.6k
{
2304
12.6k
    uint8_t i, n = 1;
2305
12.6k
    uint8_t band_incr;
2306
2307
12.6k
    drc->num_bands = 1;
2308
2309
12.6k
    if (faad_get1bit(ld
2310
12.6k
        DEBUGVAR(1,90,"dynamic_range_info(): has instance_tag")) & 1)
2311
6.29k
    {
2312
6.29k
        drc->pce_instance_tag = (uint8_t)faad_getbits(ld, 4
2313
6.29k
            DEBUGVAR(1,91,"dynamic_range_info(): pce_instance_tag"));
2314
6.29k
        /* drc->drc_tag_reserved_bits = */ faad_getbits(ld, 4
2315
6.29k
            DEBUGVAR(1,92,"dynamic_range_info(): drc_tag_reserved_bits"));
2316
6.29k
        n++;
2317
6.29k
    }
2318
2319
12.6k
    drc->excluded_chns_present = faad_get1bit(ld
2320
12.6k
        DEBUGVAR(1,93,"dynamic_range_info(): excluded_chns_present"));
2321
12.6k
    if (drc->excluded_chns_present == 1)
2322
5.63k
    {
2323
5.63k
        n += excluded_channels(ld, drc);
2324
5.63k
    }
2325
2326
12.6k
    if (faad_get1bit(ld
2327
12.6k
        DEBUGVAR(1,94,"dynamic_range_info(): has bands data")) & 1)
2328
3.89k
    {
2329
3.89k
        band_incr = (uint8_t)faad_getbits(ld, 4
2330
3.89k
            DEBUGVAR(1,95,"dynamic_range_info(): band_incr"));
2331
3.89k
        /* drc->drc_bands_reserved_bits = */ faad_getbits(ld, 4
2332
3.89k
            DEBUGVAR(1,96,"dynamic_range_info(): drc_bands_reserved_bits"));
2333
3.89k
        n++;
2334
3.89k
        drc->num_bands += band_incr;
2335
2336
39.7k
        for (i = 0; i < drc->num_bands; i++)
2337
35.8k
        {
2338
35.8k
            drc->band_top[i] = (uint8_t)faad_getbits(ld, 8
2339
35.8k
                DEBUGVAR(1,97,"dynamic_range_info(): band_top"));
2340
35.8k
            n++;
2341
35.8k
        }
2342
3.89k
    }
2343
2344
12.6k
    if (faad_get1bit(ld
2345
12.6k
        DEBUGVAR(1,98,"dynamic_range_info(): has prog_ref_level")) & 1)
2346
5.13k
    {
2347
5.13k
        drc->prog_ref_level = (uint8_t)faad_getbits(ld, 7
2348
5.13k
            DEBUGVAR(1,99,"dynamic_range_info(): prog_ref_level"));
2349
5.13k
        /* drc->prog_ref_level_reserved_bits = */ faad_get1bit(ld
2350
5.13k
            DEBUGVAR(1,100,"dynamic_range_info(): prog_ref_level_reserved_bits"));
2351
5.13k
        n++;
2352
5.13k
    }
2353
2354
57.2k
    for (i = 0; i < drc->num_bands; i++)
2355
44.6k
    {
2356
44.6k
        drc->dyn_rng_sgn[i] = faad_get1bit(ld
2357
44.6k
            DEBUGVAR(1,101,"dynamic_range_info(): dyn_rng_sgn"));
2358
44.6k
        drc->dyn_rng_ctl[i] = (uint8_t)faad_getbits(ld, 7
2359
44.6k
            DEBUGVAR(1,102,"dynamic_range_info(): dyn_rng_ctl"));
2360
44.6k
        n++;
2361
44.6k
    }
2362
2363
12.6k
    return n;
2364
12.6k
}
2365
2366
/* Table 4.4.32 */
2367
static uint8_t excluded_channels(bitfile *ld, drc_info *drc)
2368
5.63k
{
2369
5.63k
    uint8_t i, n = 0;
2370
5.63k
    uint8_t num_excl_chan = 7;
2371
2372
45.0k
    for (i = 0; i < 7; i++)
2373
39.4k
    {
2374
39.4k
        drc->exclude_mask[i] = faad_get1bit(ld
2375
39.4k
            DEBUGVAR(1,103,"excluded_channels(): exclude_mask"));
2376
39.4k
    }
2377
5.63k
    n++;
2378
2379
21.3k
    while ((drc->additional_excluded_chns[n-1] = faad_get1bit(ld
2380
21.3k
        DEBUGVAR(1,104,"excluded_channels(): additional_excluded_chns"))) == 1)
2381
18.6k
    {
2382
18.6k
        if (i >= MAX_CHANNELS - num_excl_chan - 7)
2383
3.00k
            return n;
2384
125k
        for (i = num_excl_chan; i < num_excl_chan+7; i++)
2385
109k
        {
2386
109k
            drc->exclude_mask[i] = faad_get1bit(ld
2387
109k
                DEBUGVAR(1,105,"excluded_channels(): exclude_mask"));
2388
109k
        }
2389
15.6k
        n++;
2390
15.6k
        num_excl_chan += 7;
2391
15.6k
    }
2392
2393
2.63k
    return n;
2394
5.63k
}
2395
#endif
2396
2397
/* Annex A: Audio Interchange Formats */
2398
2399
/* Table 1.A.2 */
2400
void get_adif_header(adif_header *adif, bitfile *ld)
2401
425
{
2402
425
    uint8_t i;
2403
2404
    /* adif_id[0] = */ faad_getbits(ld, 8
2405
425
        DEBUGVAR(1,106,"get_adif_header(): adif_id[0]"));
2406
425
    /* adif_id[1] = */ faad_getbits(ld, 8
2407
425
        DEBUGVAR(1,107,"get_adif_header(): adif_id[1]"));
2408
425
    /* adif_id[2] = */ faad_getbits(ld, 8
2409
425
        DEBUGVAR(1,108,"get_adif_header(): adif_id[2]"));
2410
425
    /* adif_id[3] = */ faad_getbits(ld, 8
2411
425
        DEBUGVAR(1,109,"get_adif_header(): adif_id[3]"));
2412
425
    adif->copyright_id_present = faad_get1bit(ld
2413
425
        DEBUGVAR(1,110,"get_adif_header(): copyright_id_present"));
2414
425
    if(adif->copyright_id_present)
2415
62
    {
2416
620
        for (i = 0; i < 72/8; i++)
2417
558
        {
2418
558
            adif->copyright_id[i] = (int8_t)faad_getbits(ld, 8
2419
558
                DEBUGVAR(1,111,"get_adif_header(): copyright_id"));
2420
558
        }
2421
62
        adif->copyright_id[i] = 0;
2422
62
    }
2423
425
    adif->original_copy  = faad_get1bit(ld
2424
425
        DEBUGVAR(1,112,"get_adif_header(): original_copy"));
2425
425
    adif->home = faad_get1bit(ld
2426
425
        DEBUGVAR(1,113,"get_adif_header(): home"));
2427
425
    adif->bitstream_type = faad_get1bit(ld
2428
425
        DEBUGVAR(1,114,"get_adif_header(): bitstream_type"));
2429
425
    adif->bitrate = faad_getbits(ld, 23
2430
425
        DEBUGVAR(1,115,"get_adif_header(): bitrate"));
2431
425
    adif->num_program_config_elements = (uint8_t)faad_getbits(ld, 4
2432
425
        DEBUGVAR(1,116,"get_adif_header(): num_program_config_elements"));
2433
2434
5.66k
    for (i = 0; i < adif->num_program_config_elements + 1; i++)
2435
5.23k
    {
2436
5.23k
        if(adif->bitstream_type == 0)
2437
1.85k
        {
2438
1.85k
            adif->adif_buffer_fullness = faad_getbits(ld, 20
2439
1.85k
                DEBUGVAR(1,117,"get_adif_header(): adif_buffer_fullness"));
2440
3.38k
        } else {
2441
3.38k
            adif->adif_buffer_fullness = 0;
2442
3.38k
        }
2443
2444
5.23k
        program_config_element(&adif->pce[i], ld);
2445
5.23k
    }
2446
425
}
2447
2448
/* Table 1.A.5 */
2449
uint8_t adts_frame(adts_header *adts, bitfile *ld)
2450
20.2k
{
2451
    /* faad_byte_align(ld); */
2452
20.2k
    if (adts_fixed_header(adts, ld))
2453
18.9k
        return 5;
2454
1.30k
    adts_variable_header(adts, ld);
2455
1.30k
    adts_error_check(adts, ld);
2456
2457
1.30k
    return 0;
2458
20.2k
}
2459
2460
/* Table 1.A.6 */
2461
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld)
2462
20.2k
{
2463
20.2k
    uint16_t i;
2464
20.2k
    uint8_t sync_err = 1;
2465
2466
    /* try to recover from sync errors */
2467
14.6M
    for (i = 0; i < 768; i++)
2468
14.6M
    {
2469
14.6M
        adts->syncword = (uint16_t)faad_showbits(ld, 12);
2470
14.6M
        if (adts->syncword != 0xFFF)
2471
14.6M
        {
2472
14.6M
            faad_getbits(ld, 8
2473
14.6M
                DEBUGVAR(0,0,""));
2474
14.6M
        } else {
2475
1.30k
            sync_err = 0;
2476
1.30k
            faad_getbits(ld, 12
2477
1.30k
                DEBUGVAR(1,118,"adts_fixed_header(): syncword"));
2478
1.30k
            break;
2479
1.30k
        }
2480
14.6M
    }
2481
20.2k
    if (sync_err)
2482
18.9k
        return 5;
2483
2484
1.30k
    adts->id = faad_get1bit(ld
2485
1.30k
        DEBUGVAR(1,119,"adts_fixed_header(): id"));
2486
1.30k
    adts->layer = (uint8_t)faad_getbits(ld, 2
2487
1.30k
        DEBUGVAR(1,120,"adts_fixed_header(): layer"));
2488
1.30k
    adts->protection_absent = faad_get1bit(ld
2489
1.30k
        DEBUGVAR(1,121,"adts_fixed_header(): protection_absent"));
2490
1.30k
    adts->profile = (uint8_t)faad_getbits(ld, 2
2491
1.30k
        DEBUGVAR(1,122,"adts_fixed_header(): profile"));
2492
1.30k
    adts->sf_index = (uint8_t)faad_getbits(ld, 4
2493
1.30k
        DEBUGVAR(1,123,"adts_fixed_header(): sf_index"));
2494
1.30k
    adts->private_bit = faad_get1bit(ld
2495
1.30k
        DEBUGVAR(1,124,"adts_fixed_header(): private_bit"));
2496
1.30k
    adts->channel_configuration = (uint8_t)faad_getbits(ld, 3
2497
1.30k
        DEBUGVAR(1,125,"adts_fixed_header(): channel_configuration"));
2498
1.30k
    adts->original = faad_get1bit(ld
2499
1.30k
        DEBUGVAR(1,126,"adts_fixed_header(): original"));
2500
1.30k
    adts->home = faad_get1bit(ld
2501
1.30k
        DEBUGVAR(1,127,"adts_fixed_header(): home"));
2502
2503
1.30k
    if (adts->old_format == 1)
2504
0
    {
2505
        /* Removed in corrigendum 14496-3:2002 */
2506
0
        if (adts->id == 0)
2507
0
        {
2508
0
            adts->emphasis = (uint8_t)faad_getbits(ld, 2
2509
0
                DEBUGVAR(1,128,"adts_fixed_header(): emphasis"));
2510
0
        }
2511
0
    }
2512
2513
1.30k
    return 0;
2514
20.2k
}
2515
2516
/* Table 1.A.7 */
2517
static void adts_variable_header(adts_header *adts, bitfile *ld)
2518
1.30k
{
2519
1.30k
    adts->copyright_identification_bit = faad_get1bit(ld
2520
1.30k
        DEBUGVAR(1,129,"adts_variable_header(): copyright_identification_bit"));
2521
1.30k
    adts->copyright_identification_start = faad_get1bit(ld
2522
1.30k
        DEBUGVAR(1,130,"adts_variable_header(): copyright_identification_start"));
2523
1.30k
    adts->aac_frame_length = (uint16_t)faad_getbits(ld, 13
2524
1.30k
        DEBUGVAR(1,131,"adts_variable_header(): aac_frame_length"));
2525
1.30k
    adts->adts_buffer_fullness = (uint16_t)faad_getbits(ld, 11
2526
1.30k
        DEBUGVAR(1,132,"adts_variable_header(): adts_buffer_fullness"));
2527
1.30k
    adts->no_raw_data_blocks_in_frame = (uint8_t)faad_getbits(ld, 2
2528
1.30k
        DEBUGVAR(1,133,"adts_variable_header(): no_raw_data_blocks_in_frame"));
2529
1.30k
}
2530
2531
/* Table 1.A.8 */
2532
static void adts_error_check(adts_header *adts, bitfile *ld)
2533
1.30k
{
2534
1.30k
    if (adts->protection_absent == 0)
2535
269
    {
2536
269
        adts->crc_check = (uint16_t)faad_getbits(ld, 16
2537
269
            DEBUGVAR(1,134,"adts_error_check(): crc_check"));
2538
269
    }
2539
1.30k
}
2540
2541
/* LATM parsing functions */
2542
#if 0
2543
2544
static uint32_t latm_get_value(bitfile *ld)
2545
{
2546
    uint32_t l, value;
2547
    uint8_t bytesForValue;
2548
2549
    bytesForValue = (uint8_t)faad_getbits(ld, 2);
2550
    value = 0;
2551
    for(l=0; l<bytesForValue; l++)
2552
        value = (value << 8) | (uint8_t)faad_getbits(ld, 8);
2553
2554
    return value;
2555
}
2556
2557
static uint32_t latmParsePayload(latm_header *latm, bitfile *ld)
2558
{
2559
    //assuming there's only one program with a single layer and 1 subFrame,
2560
    //allStreamsSametimeframing is set,
2561
    uint32_t framelen;
2562
    uint8_t tmp;
2563
2564
    //this should be the payload length field for the current configuration
2565
    framelen = 0;
2566
    if(latm->framelen_type==0)
2567
    {
2568
        do
2569
        {
2570
            tmp = (uint8_t)faad_getbits(ld, 8);
2571
            framelen += tmp;
2572
        } while(tmp==0xff);
2573
    }
2574
    else if(latm->framelen_type==1)
2575
        framelen=latm->frameLength;
2576
2577
    return framelen;
2578
}
2579
2580
static uint32_t latmAudioMuxElement(latm_header *latm, bitfile *ld)
2581
{
2582
    uint32_t ascLen, asc_bits=0;
2583
    uint32_t x1, y1, m, n, i;
2584
    program_config pce;
2585
    mp4AudioSpecificConfig mp4ASC;
2586
2587
    latm->useSameStreamMux = (uint8_t)faad_getbits(ld, 1);
2588
    if(!latm->useSameStreamMux)
2589
    {
2590
        //parseSameStreamMuxConfig
2591
        latm->version = (uint8_t) faad_getbits(ld, 1);
2592
        if(latm->version)
2593
            latm->versionA = (uint8_t) faad_getbits(ld, 1);
2594
        if(latm->versionA)
2595
        {
2596
            //dunno the payload format for versionA
2597
            fprintf(stderr, "versionA not supported\n");
2598
            return 0;
2599
        }
2600
        if(latm->version) //read taraBufferFullness
2601
            latm_get_value(ld);
2602
        latm->allStreamsSameTimeFraming = (uint8_t)faad_getbits(ld, 1);
2603
        latm->numSubFrames = (uint8_t)faad_getbits(ld, 6) + 1;
2604
        latm->numPrograms = (uint8_t)faad_getbits(ld, 4) + 1;
2605
        latm->numLayers = faad_getbits(ld, 3) + 1;
2606
        if(latm->numPrograms>1 || !latm->allStreamsSameTimeFraming || latm->numSubFrames>1 || latm->numLayers>1)
2607
        {
2608
            fprintf(stderr, "\r\nUnsupported LATM configuration: %d programs/ %d subframes, %d layers, allstreams: %d\n",
2609
                latm->numPrograms, latm->numSubFrames, latm->numLayers, latm->allStreamsSameTimeFraming);
2610
            return 0;
2611
        }
2612
        ascLen = 0;
2613
        if(latm->version)
2614
            ascLen = latm_get_value(ld);
2615
2616
        x1 = faad_get_processed_bits(ld);
2617
        if(AudioSpecificConfigFromBitfile(ld, &mp4ASC, &pce, 0, 1) < 0)
2618
            return 0;
2619
2620
        //horrid hack to unread the ASC bits and store them in latm->ASC
2621
        //the correct code would rely on an ideal faad_ungetbits()
2622
        y1 = faad_get_processed_bits(ld);
2623
        if((y1-x1) <= MAX_ASC_BYTES*8)
2624
        {
2625
            faad_rewindbits(ld);
2626
            m = x1;
2627
            while(m>0)
2628
            {
2629
                n = min(m, 32);
2630
                faad_getbits(ld, n);
2631
                m -= n;
2632
            }
2633
2634
            i = 0;
2635
            m = latm->ASCbits = y1 - x1;
2636
            while(m > 0)
2637
            {
2638
                n = min(m, 8);
2639
                latm->ASC[i++] = (uint8_t) faad_getbits(ld, n);
2640
                m -= n;
2641
            }
2642
        }
2643
2644
        asc_bits = y1-x1;
2645
2646
        if(ascLen>asc_bits)
2647
            faad_getbits(ld, ascLen-asc_bits);
2648
2649
        latm->framelen_type = (uint8_t) faad_getbits(ld, 3);
2650
        if(latm->framelen_type == 0)
2651
        {
2652
            latm->frameLength = 0;
2653
            faad_getbits(ld, 8); //buffer fullness for frame_len_type==0, useless
2654
        }
2655
        else if(latm->framelen_type == 1)
2656
        {
2657
            latm->frameLength = faad_getbits(ld, 9);
2658
            if(latm->frameLength==0)
2659
            {
2660
                fprintf(stderr, "Invalid frameLength: 0\r\n");
2661
                return 0;
2662
            }
2663
            latm->frameLength = (latm->frameLength+20)*8;
2664
        }
2665
        else
2666
        {   //hellish CELP or HCVX stuff, discard
2667
            fprintf(stderr, "Unsupported CELP/HCVX framelentype: %d\n", latm->framelen_type);
2668
            return 0;
2669
        }
2670
2671
        latm->otherDataLenBits = 0;
2672
        if(faad_getbits(ld, 1))
2673
        {   //other data present
2674
            int esc, tmp;
2675
            if(latm->version)
2676
                latm->otherDataLenBits = latm_get_value(ld);
2677
            else do
2678
            {
2679
                esc = faad_getbits(ld, 1);
2680
                tmp = faad_getbits(ld, 8);
2681
                latm->otherDataLenBits = (latm->otherDataLenBits << 8) + tmp;
2682
            } while(esc);
2683
        }
2684
        if(faad_getbits(ld, 1)) //crc
2685
            faad_getbits(ld, 8);
2686
        latm->inited = 1;
2687
      }
2688
2689
      //read payload
2690
      if(latm->inited)
2691
          return latmParsePayload(latm, ld);
2692
      else
2693
          return 0;
2694
}
2695
2696
uint32_t faad_latm_frame(latm_header *latm, bitfile *ld)
2697
{
2698
    uint16_t len;
2699
    uint32_t initpos, endpos, firstpos, ret;
2700
2701
    firstpos = faad_get_processed_bits(ld);
2702
    while (ld->bytes_left)
2703
    {
2704
        faad_byte_align(ld);
2705
        if(faad_showbits(ld, 11) != 0x2B7)
2706
        {
2707
            faad_getbits(ld, 8);
2708
            continue;
2709
        }
2710
        faad_getbits(ld, 11);
2711
        len = faad_getbits(ld, 13);
2712
        if(!len)
2713
            continue;
2714
        initpos = faad_get_processed_bits(ld);
2715
        ret = latmAudioMuxElement(latm, ld);
2716
        endpos = faad_get_processed_bits(ld);
2717
        if(ret>0)
2718
            return (len*8)-(endpos-initpos);
2719
        //faad_getbits(ld, initpos-endpos); //go back to initpos, but is valid a getbits(-N) ?
2720
    }
2721
    return 0xFFFFFFFF;
2722
}
2723
#endif