Coverage Report

Created: 2026-10-17 06:34

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