Coverage Report

Created: 2026-10-28 07:04

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