Coverage Report

Created: 2026-11-12 07:28

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