Coverage Report

Created: 2026-10-28 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/syntax.c
Line
Count
Source
1
/*
2
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
4
**
5
** This program is free software; you can redistribute it and/or modify
6
** it under the terms of the GNU General Public License as published by
7
** the Free Software Foundation; either version 2 of the License, or
8
** (at your option) any later version.
9
**
10
** This program is distributed in the hope that it will be useful,
11
** but WITHOUT ANY WARRANTY; without even the implied warranty of
12
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
** GNU General Public License for more details.
14
**
15
** You should have received a copy of the GNU General Public License
16
** along with this program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
**
19
** Any non-GPL usage of this software or parts of this software is strictly
20
** forbidden.
21
**
22
** The "appropriate copyright message" mentioned in section 2c of the GPLv2
23
** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
24
**
25
** Commercial non-GPL licensing of this software is possible.
26
** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
27
**
28
** $Id: syntax.c,v 1.93 2009/01/26 23:51:15 menno Exp $
29
**/
30
31
/*
32
   Reads the AAC bitstream as defined in 14496-3 (MPEG-4 Audio)
33
*/
34
35
#include "common.h"
36
#include "structs.h"
37
38
#include <stdlib.h>
39
#include <stdio.h>
40
41
#include "syntax.h"
42
#include "specrec.h"
43
#include "huffman.h"
44
#include "bits.h"
45
#include "pulse.h"
46
#include "analysis.h"
47
#include "drc.h"
48
#ifdef ERROR_RESILIENCE
49
#include "rvlc.h"
50
#endif
51
#ifdef SBR_DEC
52
#include "sbr_syntax.h"
53
#endif
54
#include "mp4.h"
55
56
57
/* static function declarations */
58
static void decode_sce_lfe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
59
                           uint8_t id_syn_ele);
60
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
61
                       uint8_t id_syn_ele);
62
static uint8_t single_lfe_channel_element(NeAACDecStruct *hDecoder, bitfile *ld,
63
                                          uint8_t channel, uint8_t *tag);
64
static uint8_t channel_pair_element(NeAACDecStruct *hDecoder, bitfile *ld,
65
                                    uint8_t channel, uint8_t *tag);
66
#ifdef COUPLING_DEC
67
static uint8_t coupling_channel_element(NeAACDecStruct *hDecoder, bitfile *ld);
68
#endif
69
static uint16_t data_stream_element(NeAACDecStruct *hDecoder, bitfile *ld);
70
static uint8_t program_config_element(program_config *pce, bitfile *ld);
71
static uint8_t fill_element(NeAACDecStruct *hDecoder, bitfile *ld, drc_info *drc
72
#ifdef SBR_DEC
73
                            ,uint8_t sbr_ele
74
#endif
75
                            );
76
static uint8_t individual_channel_stream(NeAACDecStruct *hDecoder, element *ele,
77
                                         bitfile *ld, ic_stream *ics, uint8_t scal_flag,
78
                                         int16_t *spec_data);
79
static uint8_t ics_info(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
80
                        uint8_t common_window);
81
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
82
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
83
#ifdef SSR_DEC
84
static void gain_control_data(bitfile *ld, ic_stream *ics);
85
#endif
86
static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
87
                             int16_t *spectral_data);
88
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld);
89
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld);
90
#ifdef LTP_DEC
91
static uint8_t ltp_data(NeAACDecStruct *hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld);
92
#endif
93
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld);
94
static void adts_variable_header(adts_header *adts, bitfile *ld);
95
static void adts_error_check(adts_header *adts, bitfile *ld);
96
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
97
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag);
98
#ifdef DRM
99
static int8_t DRM_aac_scalable_main_header(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
100
                                           bitfile *ld, uint8_t this_layer_stereo);
101
#else
102
static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count);
103
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc);
104
static uint8_t excluded_channels(bitfile *ld, drc_info *drc);
105
#endif
106
107
108
/* Table 4.4.1 */
109
int8_t GASpecificConfig(bitfile *ld, mp4AudioSpecificConfig *mp4ASC,
110
                        program_config *pce_out)
111
2.55k
{
112
2.55k
    program_config pce;
113
114
    /* 1024 or 960 */
115
2.55k
    mp4ASC->frameLengthFlag = faad_get1bit(ld
116
2.55k
        DEBUGVAR(1,138,"GASpecificConfig(): FrameLengthFlag"));
117
#ifndef ALLOW_SMALL_FRAMELENGTH
118
    if (mp4ASC->frameLengthFlag == 1)
119
        return -3;
120
#endif
121
122
2.55k
    mp4ASC->dependsOnCoreCoder = faad_get1bit(ld
123
2.55k
        DEBUGVAR(1,139,"GASpecificConfig(): DependsOnCoreCoder"));
124
2.55k
    if (mp4ASC->dependsOnCoreCoder == 1)
125
701
    {
126
701
        mp4ASC->coreCoderDelay = (uint16_t)faad_getbits(ld, 14
127
701
            DEBUGVAR(1,140,"GASpecificConfig(): CoreCoderDelay"));
128
701
    }
129
130
2.55k
    mp4ASC->extensionFlag = faad_get1bit(ld DEBUGVAR(1,141,"GASpecificConfig(): ExtensionFlag"));
131
2.55k
    if (mp4ASC->channelsConfiguration == 0)
132
434
    {
133
434
        if (program_config_element(&pce, ld))
134
2
            return -3;
135
        //mp4ASC->channelsConfiguration = pce.channels;
136
137
432
        if (pce_out != NULL)
138
432
            memcpy(pce_out, &pce, sizeof(program_config));
139
140
        /*
141
        if (pce.num_valid_cc_elements)
142
            return -3;
143
        */
144
432
    }
145
146
2.55k
#ifdef ERROR_RESILIENCE
147
2.55k
    if (mp4ASC->extensionFlag == 1)
148
1.70k
    {
149
        /* Error resilience not supported yet */
150
1.70k
        if (mp4ASC->objectTypeIndex >= ER_OBJECT_START)
151
1.44k
        {
152
1.44k
            mp4ASC->aacSectionDataResilienceFlag = faad_get1bit(ld
153
1.44k
                DEBUGVAR(1,144,"GASpecificConfig(): aacSectionDataResilienceFlag"));
154
1.44k
            mp4ASC->aacScalefactorDataResilienceFlag = faad_get1bit(ld
155
1.44k
                DEBUGVAR(1,145,"GASpecificConfig(): aacScalefactorDataResilienceFlag"));
156
1.44k
            mp4ASC->aacSpectralDataResilienceFlag = faad_get1bit(ld
157
1.44k
                DEBUGVAR(1,146,"GASpecificConfig(): aacSpectralDataResilienceFlag"));
158
1.44k
        }
159
        /* 1 bit: extensionFlag3 */
160
1.70k
        faad_getbits(ld, 1);
161
1.70k
  }
162
2.55k
#endif
163
164
2.55k
    return 0;
165
2.55k
}
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
2.52k
{
176
2.52k
    uint8_t i;
177
178
2.52k
    memset(pce, 0, sizeof(program_config));
179
180
2.52k
    pce->channels = 0;
181
182
2.52k
    pce->element_instance_tag = (uint8_t)faad_getbits(ld, 4
183
2.52k
        DEBUGVAR(1,10,"program_config_element(): element_instance_tag"));
184
185
2.52k
    pce->object_type = (uint8_t)faad_getbits(ld, 2
186
2.52k
        DEBUGVAR(1,11,"program_config_element(): object_type"));
187
2.52k
    pce->sf_index = (uint8_t)faad_getbits(ld, 4
188
2.52k
        DEBUGVAR(1,12,"program_config_element(): sf_index"));
189
2.52k
    pce->num_front_channel_elements = (uint8_t)faad_getbits(ld, 4
190
2.52k
        DEBUGVAR(1,13,"program_config_element(): num_front_channel_elements"));
191
2.52k
    pce->num_side_channel_elements = (uint8_t)faad_getbits(ld, 4
192
2.52k
        DEBUGVAR(1,14,"program_config_element(): num_side_channel_elements"));
193
2.52k
    pce->num_back_channel_elements = (uint8_t)faad_getbits(ld, 4
194
2.52k
        DEBUGVAR(1,15,"program_config_element(): num_back_channel_elements"));
195
2.52k
    pce->num_lfe_channel_elements = (uint8_t)faad_getbits(ld, 2
196
2.52k
        DEBUGVAR(1,16,"program_config_element(): num_lfe_channel_elements"));
197
2.52k
    pce->num_assoc_data_elements = (uint8_t)faad_getbits(ld, 3
198
2.52k
        DEBUGVAR(1,17,"program_config_element(): num_assoc_data_elements"));
199
2.52k
    pce->num_valid_cc_elements = (uint8_t)faad_getbits(ld, 4
200
2.52k
        DEBUGVAR(1,18,"program_config_element(): num_valid_cc_elements"));
201
202
2.52k
    pce->mono_mixdown_present = faad_get1bit(ld
203
2.52k
        DEBUGVAR(1,19,"program_config_element(): mono_mixdown_present"));
204
2.52k
    if (pce->mono_mixdown_present == 1)
205
625
    {
206
625
        pce->mono_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
207
625
            DEBUGVAR(1,20,"program_config_element(): mono_mixdown_element_number"));
208
625
    }
209
210
2.52k
    pce->stereo_mixdown_present = faad_get1bit(ld
211
2.52k
        DEBUGVAR(1,21,"program_config_element(): stereo_mixdown_present"));
212
2.52k
    if (pce->stereo_mixdown_present == 1)
213
433
    {
214
433
        pce->stereo_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
215
433
            DEBUGVAR(1,22,"program_config_element(): stereo_mixdown_element_number"));
216
433
    }
217
218
2.52k
    pce->matrix_mixdown_idx_present = faad_get1bit(ld
219
2.52k
        DEBUGVAR(1,23,"program_config_element(): matrix_mixdown_idx_present"));
220
2.52k
    if (pce->matrix_mixdown_idx_present == 1)
221
607
    {
222
607
        pce->matrix_mixdown_idx = (uint8_t)faad_getbits(ld, 2
223
607
            DEBUGVAR(1,24,"program_config_element(): matrix_mixdown_idx"));
224
607
        pce->pseudo_surround_enable = faad_get1bit(ld
225
607
            DEBUGVAR(1,25,"program_config_element(): pseudo_surround_enable"));
226
607
    }
227
228
8.36k
    for (i = 0; i < pce->num_front_channel_elements; i++)
229
5.83k
    {
230
5.83k
        pce->front_element_is_cpe[i] = faad_get1bit(ld
231
5.83k
            DEBUGVAR(1,26,"program_config_element(): front_element_is_cpe"));
232
5.83k
        pce->front_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
233
5.83k
            DEBUGVAR(1,27,"program_config_element(): front_element_tag_select"));
234
235
5.83k
        if (pce->front_element_is_cpe[i] & 1)
236
1.58k
        {
237
1.58k
            pce->cpe_channel[pce->front_element_tag_select[i]] = pce->channels;
238
1.58k
            pce->num_front_channels += 2;
239
1.58k
            pce->channels += 2;
240
4.25k
        } else {
241
4.25k
            pce->sce_channel[pce->front_element_tag_select[i]] = pce->channels;
242
4.25k
            pce->num_front_channels++;
243
4.25k
            pce->channels++;
244
4.25k
        }
245
5.83k
    }
246
247
9.19k
    for (i = 0; i < pce->num_side_channel_elements; i++)
248
6.67k
    {
249
6.67k
        pce->side_element_is_cpe[i] = faad_get1bit(ld
250
6.67k
            DEBUGVAR(1,28,"program_config_element(): side_element_is_cpe"));
251
6.67k
        pce->side_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
252
6.67k
            DEBUGVAR(1,29,"program_config_element(): side_element_tag_select"));
253
254
6.67k
        if (pce->side_element_is_cpe[i] & 1)
255
1.56k
        {
256
1.56k
            pce->cpe_channel[pce->side_element_tag_select[i]] = pce->channels;
257
1.56k
            pce->num_side_channels += 2;
258
1.56k
            pce->channels += 2;
259
5.10k
        } else {
260
5.10k
            pce->sce_channel[pce->side_element_tag_select[i]] = pce->channels;
261
5.10k
            pce->num_side_channels++;
262
5.10k
            pce->channels++;
263
5.10k
        }
264
6.67k
    }
265
266
7.61k
    for (i = 0; i < pce->num_back_channel_elements; i++)
267
5.08k
    {
268
5.08k
        pce->back_element_is_cpe[i] = faad_get1bit(ld
269
5.08k
            DEBUGVAR(1,30,"program_config_element(): back_element_is_cpe"));
270
5.08k
        pce->back_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
271
5.08k
            DEBUGVAR(1,31,"program_config_element(): back_element_tag_select"));
272
273
5.08k
        if (pce->back_element_is_cpe[i] & 1)
274
1.44k
        {
275
1.44k
            pce->cpe_channel[pce->back_element_tag_select[i]] = pce->channels;
276
1.44k
            pce->channels += 2;
277
1.44k
            pce->num_back_channels += 2;
278
3.64k
        } else {
279
3.64k
            pce->sce_channel[pce->back_element_tag_select[i]] = pce->channels;
280
3.64k
            pce->num_back_channels++;
281
3.64k
            pce->channels++;
282
3.64k
        }
283
5.08k
    }
284
285
3.79k
    for (i = 0; i < pce->num_lfe_channel_elements; i++)
286
1.27k
    {
287
1.27k
        pce->lfe_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
288
1.27k
            DEBUGVAR(1,32,"program_config_element(): lfe_element_tag_select"));
289
290
1.27k
        pce->sce_channel[pce->lfe_element_tag_select[i]] = pce->channels;
291
1.27k
        pce->num_lfe_channels++;
292
1.27k
        pce->channels++;
293
1.27k
    }
294
295
5.28k
    for (i = 0; i < pce->num_assoc_data_elements; i++)
296
2.76k
        pce->assoc_data_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
297
2.76k
        DEBUGVAR(1,33,"program_config_element(): assoc_data_element_tag_select"));
298
299
7.23k
    for (i = 0; i < pce->num_valid_cc_elements; i++)
300
4.71k
    {
301
4.71k
        pce->cc_element_is_ind_sw[i] = faad_get1bit(ld
302
4.71k
            DEBUGVAR(1,34,"program_config_element(): cc_element_is_ind_sw"));
303
4.71k
        pce->valid_cc_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
304
4.71k
            DEBUGVAR(1,35,"program_config_element(): valid_cc_element_tag_select"));
305
4.71k
    }
306
307
2.52k
    faad_byte_align(ld);
308
309
2.52k
    pce->comment_field_bytes = (uint8_t)faad_getbits(ld, 8
310
2.52k
        DEBUGVAR(1,36,"program_config_element(): comment_field_bytes"));
311
312
25.3k
    for (i = 0; i < pce->comment_field_bytes; i++)
313
22.8k
    {
314
22.8k
        pce->comment_field_data[i] = (uint8_t)faad_getbits(ld, 8
315
22.8k
            DEBUGVAR(1,37,"program_config_element(): comment_field_data"));
316
22.8k
    }
317
2.52k
    pce->comment_field_data[i] = 0;
318
319
2.52k
    if (pce->channels > MAX_CHANNELS)
320
79
        return 22;
321
322
2.44k
    return 0;
323
2.52k
}
324
325
static void decode_sce_lfe(NeAACDecStruct *hDecoder,
326
                           NeAACDecFrameInfo *hInfo, bitfile *ld,
327
                           uint8_t id_syn_ele)
328
122k
{
329
122k
    uint8_t channels = hDecoder->fr_channels;
330
122k
    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
122k
    if (channels+2 > MAX_CHANNELS)
336
3.58k
    {
337
3.58k
        hInfo->error = 12;
338
3.58k
        return;
339
3.58k
    }
340
118k
    if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
341
0
    {
342
0
        hInfo->error = 13;
343
0
        return;
344
0
    }
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
118k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
351
16.1k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
352
85
    {
353
        /* element inconsistency */
354
85
        hInfo->error = 21;
355
85
        return;
356
85
    }
357
358
    /* save the syntax element id */
359
118k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
360
361
    /* decode the element */
362
118k
    hInfo->error = single_lfe_channel_element(hDecoder, ld, channels, &tag);
363
364
    /* map output channels position to internal data channels */
365
118k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
366
117k
    {
367
        /* this might be faulty when pce_set is true */
368
117k
        hDecoder->internal_channel[channels] = channels;
369
117k
        hDecoder->internal_channel[channels+1] = channels+1;
370
117k
    } else {
371
698
        if (hDecoder->pce_set)
372
45
        {
373
45
            if (hDecoder->pce.channels > MAX_CHANNELS)
374
3
            {
375
3
                hInfo->error = 22;
376
3
                return;
377
3
            }
378
42
            hDecoder->internal_channel[hDecoder->pce.sce_channel[tag]] = channels;
379
653
        } else {
380
653
            hDecoder->internal_channel[channels] = channels;
381
653
        }
382
698
    }
383
384
118k
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
385
118k
    hDecoder->fr_ch_ele++;
386
118k
}
387
388
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
389
                       uint8_t id_syn_ele)
390
22.1k
{
391
22.1k
    uint8_t channels = hDecoder->fr_channels;
392
22.1k
    uint8_t tag = 0;
393
394
22.1k
    if (channels+2 > MAX_CHANNELS)
395
180
    {
396
180
        hInfo->error = 12;
397
180
        return;
398
180
    }
399
21.9k
    if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
400
0
    {
401
0
        hInfo->error = 13;
402
0
        return;
403
0
    }
404
21.9k
    if (hDecoder->pce_set && (hDecoder->pce.channels > MAX_CHANNELS))
405
4
    {
406
4
        hInfo->error = 22;
407
4
        return;
408
4
    }
409
410
    /* for CPE the number of output channels is always 2 */
411
21.9k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
412
18.3k
    {
413
        /* element_output_channels not set yet */
414
18.3k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
415
18.3k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != 2) {
416
        /* element inconsistency */
417
0
        hInfo->error = 21;
418
0
        return;
419
0
    }
420
421
21.9k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
422
3.61k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
423
42
    {
424
        /* element inconsistency */
425
42
        hInfo->error = 21;
426
42
        return;
427
42
    }
428
429
    /* save the syntax element id */
430
21.9k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
431
432
    /* decode the element */
433
21.9k
    hInfo->error = channel_pair_element(hDecoder, ld, channels, &tag);
434
435
    /* map output channel position to internal data channels */
436
21.9k
    if (hDecoder->pce_set)
437
1.51k
    {
438
1.51k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]] = channels;
439
1.51k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]+1] = channels+1;
440
20.4k
    } else {
441
20.4k
        hDecoder->internal_channel[channels] = channels;
442
20.4k
        hDecoder->internal_channel[channels+1] = channels+1;
443
20.4k
    }
444
445
21.9k
    hDecoder->fr_channels += 2;
446
21.9k
    hDecoder->fr_ch_ele++;
447
21.9k
}
448
449
void raw_data_block(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo,
450
                    bitfile *ld, program_config *pce, drc_info *drc)
451
8.24k
{
452
8.24k
    uint8_t id_syn_ele;
453
8.24k
    uint8_t ele_this_frame = 0;
454
455
8.24k
    hDecoder->fr_channels = 0;
456
8.24k
    hDecoder->fr_ch_ele = 0;
457
8.24k
    hDecoder->first_syn_ele = 25;
458
8.24k
    hDecoder->has_lfe = 0;
459
460
8.24k
#ifdef ERROR_RESILIENCE
461
8.24k
    if (hDecoder->object_type < ER_OBJECT_START)
462
5.87k
    {
463
5.87k
#endif
464
        /* Table 4.4.3: raw_data_block() */
465
611k
        while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
466
611k
            DEBUGVAR(1,4,"NeAACDecDecode(): id_syn_ele"))) != ID_END)
467
611k
        {
468
611k
            switch (id_syn_ele) {
469
119k
            case ID_SCE:
470
119k
                ele_this_frame++;
471
119k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
472
119k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
473
119k
                if (hInfo->error > 0)
474
4.21k
                    return;
475
115k
                break;
476
115k
            case ID_CPE:
477
19.0k
                ele_this_frame++;
478
19.0k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
479
19.0k
                decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
480
19.0k
                if (hInfo->error > 0)
481
679
                    return;
482
18.3k
                break;
483
18.3k
            case ID_LFE:
484
92
#ifdef DRM
485
92
                hInfo->error = 32;
486
#else
487
                ele_this_frame++;
488
                hDecoder->has_lfe++;
489
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
490
#endif
491
92
                if (hInfo->error > 0)
492
92
                    return;
493
0
                break;
494
97
            case ID_CCE: /* not implemented yet, but skip the bits */
495
97
#ifdef DRM
496
97
                hInfo->error = 32;
497
#else
498
                ele_this_frame++;
499
#ifdef COUPLING_DEC
500
                hInfo->error = coupling_channel_element(hDecoder, ld);
501
#else
502
                hInfo->error = 6;
503
#endif
504
#endif
505
97
                if (hInfo->error > 0)
506
97
                    return;
507
0
                break;
508
470k
            case ID_DSE:
509
470k
                ele_this_frame++;
510
470k
                data_stream_element(hDecoder, ld);
511
470k
                break;
512
953
            case ID_PCE:
513
953
                if (ele_this_frame != 0)
514
97
                {
515
97
                    hInfo->error = 31;
516
97
                    return;
517
97
                }
518
856
                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
856
                program_config_element(pce, ld);
522
                //if ((hInfo->error = program_config_element(pce, ld)) > 0)
523
                //    return;
524
                //hDecoder->pce_set = 1;
525
856
                break;
526
1.81k
            case ID_FIL:
527
1.81k
                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
1.81k
                if ((hInfo->error = fill_element(hDecoder, ld, drc
532
1.81k
#ifdef SBR_DEC
533
1.81k
                    , INVALID_SBR_ELEMENT
534
1.81k
#endif
535
1.81k
                    )) > 0)
536
104
                    return;
537
1.71k
                break;
538
611k
            }
539
605k
            if (ld->error != 0)
540
0
            {
541
0
                hInfo->error = 32;
542
0
                return;
543
0
            }
544
605k
        }
545
5.87k
#ifdef ERROR_RESILIENCE
546
5.87k
    } else {
547
        /* Table 262: er_raw_data_block() */
548
2.37k
        switch (hDecoder->channelConfiguration)
549
2.37k
        {
550
407
        case 1:
551
407
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
552
407
            if (hInfo->error > 0)
553
64
                return;
554
343
            break;
555
343
        case 2:
556
106
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
557
106
            if (hInfo->error > 0)
558
20
                return;
559
86
            break;
560
132
        case 3:
561
132
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
562
132
            if (hInfo->error > 0)
563
11
                return;
564
121
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
565
121
            if (hInfo->error > 0)
566
10
                return;
567
111
            break;
568
458
        case 4:
569
458
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
570
458
            if (hInfo->error > 0)
571
62
                return;
572
396
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
573
396
            if (hInfo->error > 0)
574
12
                return;
575
384
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
576
384
            if (hInfo->error > 0)
577
5
                return;
578
379
            break;
579
684
        case 5:
580
684
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
581
684
            if (hInfo->error > 0)
582
127
                return;
583
557
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
584
557
            if (hInfo->error > 0)
585
21
                return;
586
536
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
587
536
            if (hInfo->error > 0)
588
5
                return;
589
531
            break;
590
531
        case 6:
591
128
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
592
128
            if (hInfo->error > 0)
593
24
                return;
594
104
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
595
104
            if (hInfo->error > 0)
596
12
                return;
597
92
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
598
92
            if (hInfo->error > 0)
599
6
                return;
600
86
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
601
86
            if (hInfo->error > 0)
602
17
                return;
603
69
            break;
604
455
        case 7: /* 8 channels */
605
455
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
606
455
            if (hInfo->error > 0)
607
19
                return;
608
436
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
609
436
            if (hInfo->error > 0)
610
27
                return;
611
409
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
612
409
            if (hInfo->error > 0)
613
6
                return;
614
403
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
615
403
            if (hInfo->error > 0)
616
30
                return;
617
373
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
618
373
            if (hInfo->error > 0)
619
23
                return;
620
350
            break;
621
350
        default:
622
3
            hInfo->error = 7;
623
3
            return;
624
2.37k
        }
625
#if 0
626
        cnt = bits_to_decode() / 8;
627
        while (cnt >= 1)
628
        {
629
            cnt -= extension_payload(cnt);
630
        }
631
#endif
632
2.37k
    }
633
2.45k
#endif
634
635
    /* new in corrigendum 14496-3:2002 */
636
2.45k
#ifdef DRM
637
2.45k
    if (hDecoder->object_type != DRM_ER_LC
638
#if 0
639
        && !hDecoder->latm_header_present
640
#endif
641
2.45k
        )
642
2.45k
#endif
643
2.45k
    {
644
2.45k
        faad_byte_align(ld);
645
2.45k
    }
646
647
2.45k
    return;
648
8.24k
}
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
118k
{
655
118k
    uint8_t retval = 0;
656
118k
    element sce = {0};
657
118k
    ic_stream *ics = &(sce.ics1);
658
118k
    ALIGN int16_t spec_data[1024] = {0};
659
660
118k
    sce.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
661
118k
        DEBUGVAR(1,38,"single_lfe_channel_element(): element_instance_tag"));
662
663
118k
    *tag = sce.element_instance_tag;
664
118k
    sce.channel = channel;
665
118k
    sce.paired_channel = -1;
666
667
118k
    retval = individual_channel_stream(hDecoder, &sce, ld, ics, 0, spec_data);
668
118k
    if (retval > 0)
669
625
        return retval;
670
671
    /* IS not allowed in single channel */
672
118k
    if (ics->is_used)
673
99
        return 32;
674
675
117k
#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
117k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
679
13.8k
    {
680
13.8k
        faad_flushbits(ld, LEN_SE_ID);
681
682
        /* one sbr_info describes a channel_element not a channel! */
683
13.8k
        if ((retval = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
684
40
        {
685
40
            return retval;
686
40
        }
687
13.8k
    }
688
117k
#endif
689
690
    /* noiseless coding is done, spectral reconstruction is done now */
691
117k
    retval = reconstruct_single_channel(hDecoder, ics, &sce, spec_data);
692
117k
    if (retval > 0)
693
132
        return retval;
694
695
117k
    return 0;
696
117k
}
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
21.9k
{
702
21.9k
    ALIGN int16_t spec_data1[1024] = {0};
703
21.9k
    ALIGN int16_t spec_data2[1024] = {0};
704
21.9k
    element cpe = {0};
705
21.9k
    ic_stream *ics1 = &(cpe.ics1);
706
21.9k
    ic_stream *ics2 = &(cpe.ics2);
707
21.9k
    uint8_t result;
708
709
21.9k
    cpe.channel        = channels;
710
21.9k
    cpe.paired_channel = channels+1;
711
712
21.9k
    cpe.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
713
21.9k
        DEBUGVAR(1,39,"channel_pair_element(): element_instance_tag"));
714
21.9k
    *tag = cpe.element_instance_tag;
715
716
21.9k
    if ((cpe.common_window = faad_get1bit(ld
717
21.9k
        DEBUGVAR(1,40,"channel_pair_element(): common_window"))) & 1)
718
13.7k
    {
719
        /* both channels have common ics information */
720
13.7k
        if ((result = ics_info(hDecoder, ics1, ld, cpe.common_window)) > 0)
721
90
            return result;
722
723
13.6k
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
724
13.6k
            DEBUGVAR(1,41,"channel_pair_element(): ms_mask_present"));
725
13.6k
        if (ics1->ms_mask_present == 3)
726
21
        {
727
            /* bitstream error */
728
21
            return 32;
729
21
        }
730
13.5k
        if (ics1->ms_mask_present == 1)
731
3.64k
        {
732
3.64k
            uint8_t g, sfb;
733
10.2k
            for (g = 0; g < ics1->num_window_groups; g++)
734
6.57k
            {
735
13.6k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
736
7.04k
                {
737
7.04k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
738
7.04k
                        DEBUGVAR(1,42,"channel_pair_element(): faad_get1bit"));
739
7.04k
                }
740
6.57k
            }
741
3.64k
        }
742
743
13.5k
#ifdef ERROR_RESILIENCE
744
13.5k
        if ((hDecoder->object_type >= ER_OBJECT_START) && (ics1->predictor_data_present))
745
61
        {
746
61
            if ((
747
#ifdef LTP_DEC
748
                ics1->ltp.data_present =
749
#endif
750
61
                faad_get1bit(ld DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
751
3
            {
752
#ifdef LTP_DEC
753
                if ((result = ltp_data(hDecoder, ics1, &(ics1->ltp), ld)) > 0)
754
                {
755
                    return result;
756
                }
757
#else
758
3
                return 26;
759
3
#endif
760
3
            }
761
61
        }
762
13.5k
#endif
763
764
13.5k
        memcpy(ics2, ics1, sizeof(ic_stream));
765
13.5k
    } else {
766
8.23k
        ics1->ms_mask_present = 0;
767
8.23k
    }
768
769
21.8k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics1,
770
21.8k
        0, spec_data1)) > 0)
771
345
    {
772
345
        return result;
773
345
    }
774
775
21.4k
#ifdef ERROR_RESILIENCE
776
21.4k
    if (cpe.common_window && (hDecoder->object_type >= ER_OBJECT_START) &&
777
149
        (ics1->predictor_data_present))
778
49
    {
779
49
        if ((
780
#ifdef LTP_DEC
781
            ics1->ltp2.data_present =
782
#endif
783
49
            faad_get1bit(ld DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
784
3
        {
785
#ifdef LTP_DEC
786
            if ((result = ltp_data(hDecoder, ics1, &(ics1->ltp2), ld)) > 0)
787
            {
788
                return result;
789
            }
790
#else
791
3
            return 26;
792
3
#endif
793
3
        }
794
49
    }
795
21.4k
#endif
796
797
21.4k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics2,
798
21.4k
        0, spec_data2)) > 0)
799
112
    {
800
112
        return result;
801
112
    }
802
803
21.3k
#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
21.3k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
807
13.3k
    {
808
13.3k
        faad_flushbits(ld, LEN_SE_ID);
809
810
        /* one sbr_info describes a channel_element not a channel! */
811
13.3k
        if ((result = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
812
21
        {
813
21
            return result;
814
21
        }
815
13.3k
    }
816
21.3k
#endif
817
818
    /* noiseless coding is done, spectral reconstruction is done now */
819
21.3k
    if ((result = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe,
820
21.3k
        spec_data1, spec_data2)) > 0)
821
7
    {
822
7
        return result;
823
7
    }
824
825
21.3k
    return 0;
826
21.3k
}
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
148k
{
832
148k
    uint8_t retval = 0;
833
148k
    uint8_t ics_reserved_bit;
834
835
148k
    ics_reserved_bit = faad_get1bit(ld
836
148k
        DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
837
148k
    if (ics_reserved_bit != 0)
838
319
        return 32;
839
148k
    ics->window_sequence = (uint8_t)faad_getbits(ld, 2
840
148k
        DEBUGVAR(1,44,"ics_info(): window_sequence"));
841
148k
    ics->window_shape = faad_get1bit(ld
842
148k
        DEBUGVAR(1,45,"ics_info(): window_shape"));
843
844
#ifdef LD_DEC
845
    /* No block switching in LD */
846
    if ((hDecoder->object_type == LD) && (ics->window_sequence != ONLY_LONG_SEQUENCE))
847
        return 32;
848
#endif
849
850
148k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
851
15.0k
    {
852
15.0k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 4
853
15.0k
            DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
854
15.0k
        ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
855
15.0k
            DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
856
133k
    } else {
857
133k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 6
858
133k
            DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
859
133k
    }
860
861
    /* get the grouping information */
862
148k
    if ((retval = window_grouping_info(hDecoder, ics)) > 0)
863
47
        return retval;
864
865
866
    /* should be an error */
867
    /* check the range of max_sfb */
868
148k
    if (ics->max_sfb > ics->num_swb)
869
0
        return 16;
870
871
148k
    if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
872
133k
    {
873
133k
        if ((ics->predictor_data_present = faad_get1bit(ld
874
133k
            DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
875
10.5k
        {
876
10.5k
            if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
877
2.17k
            {
878
2.17k
                uint8_t sfb;
879
2.17k
                uint8_t predictor_reset, predictor_reset_group_number, prediction_used;
880
2.17k
                uint8_t limit = min(ics->max_sfb, max_pred_sfb(hDecoder->sf_index));
881
882
2.17k
                predictor_reset = faad_get1bit(ld DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"));
883
2.17k
                if (predictor_reset)
884
1.99k
                {
885
1.99k
                    predictor_reset_group_number =
886
1.99k
                        (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
887
1.99k
                } else {
888
178
                    predictor_reset_group_number = 0;
889
178
                }
890
891
12.3k
                for (sfb = 0; sfb < limit; sfb++)
892
10.1k
                {
893
10.1k
                    prediction_used = faad_get1bit(ld DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
894
#ifdef MAIN_DEC
895
                    ics->pred.prediction_used[sfb] = prediction_used;
896
#endif
897
10.1k
                }
898
#ifdef MAIN_DEC
899
                ics->pred.limit = limit;
900
                ics->pred.predictor_reset = predictor_reset;
901
                ics->pred.predictor_reset_group_number = predictor_reset_group_number;
902
#else
903
2.17k
                (void)predictor_reset_group_number;
904
2.17k
                (void)prediction_used;
905
2.17k
#endif
906
2.17k
            }
907
#ifdef LTP_DEC
908
            else { /* Long Term Prediction */
909
                if (hDecoder->object_type < ER_OBJECT_START)
910
                {
911
                    if ((ics->ltp.data_present = faad_get1bit(ld
912
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
913
                    {
914
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
915
                        {
916
                            return retval;
917
                        }
918
                    }
919
                    if (common_window)
920
                    {
921
                        if ((ics->ltp2.data_present = faad_get1bit(ld
922
                            DEBUGVAR(1,51,"ics_info(): ltp2.data_present"))) & 1)
923
                        {
924
                            if ((retval = ltp_data(hDecoder, ics, &(ics->ltp2), ld)) > 0)
925
                            {
926
                                return retval;
927
                            }
928
                        }
929
                    }
930
                }
931
#ifdef ERROR_RESILIENCE
932
                if (!common_window && (hDecoder->object_type >= ER_OBJECT_START))
933
                {
934
                    if ((ics->ltp.data_present = faad_get1bit(ld
935
                        DEBUGVAR(1,50,"ics_info(): ltp.data_present"))) & 1)
936
                    {
937
                        if ((retval = ltp_data(hDecoder, ics, &(ics->ltp), ld)) > 0)
938
                        {
939
                            return retval;
940
                        }
941
                    }
942
                }
943
#endif  /* ERROR_RESILIENCE */
944
            }
945
#else  /* LTP_DEC */
946
10.5k
            (void)common_window;
947
10.5k
#endif  /* LTP_DEC */
948
10.5k
        }
949
133k
    }
950
951
148k
    return retval;
952
148k
}
953
954
/* Table 4.4.7 */
955
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld)
956
6.78k
{
957
6.78k
    uint8_t i;
958
959
6.78k
    pul->number_pulse = (uint8_t)faad_getbits(ld, 2
960
6.78k
        DEBUGVAR(1,56,"pulse_data(): number_pulse"));
961
6.78k
    pul->pulse_start_sfb = (uint8_t)faad_getbits(ld, 6
962
6.78k
        DEBUGVAR(1,57,"pulse_data(): pulse_start_sfb"));
963
964
    /* check the range of pulse_start_sfb */
965
6.78k
    if (pul->pulse_start_sfb > ics->num_swb)
966
50
        return 16;
967
968
16.2k
    for (i = 0; i < pul->number_pulse+1; i++)
969
9.49k
    {
970
9.49k
        pul->pulse_offset[i] = (uint8_t)faad_getbits(ld, 5
971
9.49k
            DEBUGVAR(1,58,"pulse_data(): pulse_offset"));
972
#if 0
973
        printf("%d\n", pul->pulse_offset[i]);
974
#endif
975
9.49k
        pul->pulse_amp[i] = (uint8_t)faad_getbits(ld, 4
976
9.49k
            DEBUGVAR(1,59,"pulse_data(): pulse_amp"));
977
#if 0
978
        printf("%d\n", pul->pulse_amp[i]);
979
#endif
980
9.49k
    }
981
982
6.73k
    return 0;
983
6.78k
}
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
470k
{
1082
470k
    uint8_t byte_aligned;
1083
470k
    uint16_t i, count;
1084
470k
    (void)hDecoder;  /* TODO: remove parameter; rename method; why result is unused? */
1085
1086
470k
    /* element_instance_tag = */ faad_getbits(ld, LEN_TAG
1087
470k
        DEBUGVAR(1,60,"data_stream_element(): element_instance_tag"));
1088
470k
    byte_aligned = faad_get1bit(ld
1089
470k
        DEBUGVAR(1,61,"data_stream_element(): byte_aligned"));
1090
470k
    count = (uint16_t)faad_getbits(ld, 8
1091
470k
        DEBUGVAR(1,62,"data_stream_element(): count"));
1092
470k
    if (count == 255)
1093
3.48k
    {
1094
3.48k
        count += (uint16_t)faad_getbits(ld, 8
1095
3.48k
            DEBUGVAR(1,63,"data_stream_element(): extra count"));
1096
3.48k
    }
1097
470k
    if (byte_aligned)
1098
110k
        faad_byte_align(ld);
1099
1100
20.9M
    for (i = 0; i < count; i++)
1101
20.4M
    {
1102
20.4M
        faad_getbits(ld, LEN_BYTE
1103
20.4M
            DEBUGVAR(1,64,"data_stream_element(): data_stream_byte"));
1104
20.4M
    }
1105
1106
470k
    return count;
1107
470k
}
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
28.9k
{
1116
28.9k
    uint16_t count;
1117
28.9k
#ifdef SBR_DEC
1118
28.9k
    uint8_t bs_extension_type;
1119
28.9k
#endif
1120
1121
28.9k
    count = (uint16_t)faad_getbits(ld, 4
1122
28.9k
        DEBUGVAR(1,65,"fill_element(): count"));
1123
28.9k
    if (count == 15)
1124
3.32k
    {
1125
3.32k
        count += (uint16_t)faad_getbits(ld, 8
1126
3.32k
            DEBUGVAR(1,66,"fill_element(): extra count")) - 1;
1127
3.32k
    }
1128
1129
28.9k
    if (count > 0)
1130
27.1k
    {
1131
27.1k
#ifdef SBR_DEC
1132
27.1k
        bs_extension_type = (uint8_t)faad_showbits(ld, 4);
1133
1134
27.1k
        if ((bs_extension_type == EXT_SBR_DATA) ||
1135
9.26k
            (bs_extension_type == EXT_SBR_DATA_CRC))
1136
26.9k
        {
1137
26.9k
            if (sbr_ele == INVALID_SBR_ELEMENT)
1138
25
                return 24;
1139
1140
26.9k
            if (!hDecoder->sbr[sbr_ele])
1141
23.0k
            {
1142
23.0k
                hDecoder->sbr[sbr_ele] = sbrDecodeInit(hDecoder->frameLength,
1143
23.0k
                    hDecoder->element_id[sbr_ele], 2*get_sample_rate(hDecoder->sf_index),
1144
23.0k
                    hDecoder->downSampledSBR
1145
23.0k
#ifdef DRM
1146
23.0k
                    , 0
1147
23.0k
#endif
1148
23.0k
                    );
1149
23.0k
            }
1150
26.9k
            if (!hDecoder->sbr[sbr_ele])
1151
0
                return 19;
1152
1153
26.9k
            hDecoder->sbr_present_flag = 1;
1154
1155
            /* parse the SBR data */
1156
26.9k
            hDecoder->sbr[sbr_ele]->ret = sbr_extension_data(ld, hDecoder->sbr[sbr_ele], count,
1157
26.9k
                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
26.9k
#if (defined(PS_DEC) || defined(DRM_PS))
1167
26.9k
            if (hDecoder->sbr[sbr_ele]->ps_used)
1168
4.21k
            {
1169
4.21k
                if (hDecoder->ps_present_flag != 0)
1170
4.21k
                {
1171
4.21k
                    hDecoder->ps_used[sbr_ele] = 1;
1172
1173
                    /* set element independent flag to 1 as well */
1174
4.21k
                    hDecoder->ps_used_global = 1;
1175
4.21k
                } else {
1176
0
                    hDecoder->sbr[sbr_ele]->ps_used = 0;
1177
0
                }
1178
4.21k
            }
1179
26.9k
#endif
1180
26.9k
        } else {
1181
140
#endif
1182
#ifndef DRM
1183
            while (count > 0)
1184
            {
1185
                uint16_t payload_bytes = extension_payload(ld, drc, count);
1186
                if (payload_bytes <= count) {
1187
                    count -= payload_bytes;
1188
                } else {
1189
                    count = 0;
1190
                }
1191
            }
1192
#else
1193
140
            (void)drc;
1194
140
            return 30;
1195
140
#endif
1196
140
#ifdef SBR_DEC
1197
140
        }
1198
27.1k
#endif
1199
27.1k
    }
1200
1201
28.8k
    return 0;
1202
28.9k
}
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
827
{
1305
827
    uint8_t channels = hDecoder->fr_channels = 0;
1306
827
    uint8_t this_layer_stereo = (hDecoder->channelConfiguration > 1) ? 1 : 0;
1307
827
    element cpe = {0};
1308
827
    ic_stream *ics1 = &(cpe.ics1);
1309
827
    ic_stream *ics2 = &(cpe.ics2);
1310
827
    ALIGN int16_t spec_data1[1024] = {0};
1311
827
    ALIGN int16_t spec_data2[1024] = {0};
1312
1313
827
    (void)drc;  /* TODO: remove unused parameter? */
1314
827
    (void)pce;  /* TODO: remove unused parameter? */
1315
1316
827
    hDecoder->fr_ch_ele = 0;
1317
1318
827
    hInfo->error = DRM_aac_scalable_main_header(hDecoder, ics1, ics2, ld, this_layer_stereo);
1319
827
    if (hInfo->error > 0)
1320
20
        return;
1321
1322
807
    cpe.common_window = 1;
1323
807
    if (this_layer_stereo)
1324
262
    {
1325
262
        hDecoder->element_id[0] = ID_CPE;
1326
262
        if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
1327
189
            hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
1328
545
    } else {
1329
545
        hDecoder->element_id[0] = ID_SCE;
1330
545
    }
1331
1332
807
    if (this_layer_stereo)
1333
262
    {
1334
262
        cpe.channel        = 0;
1335
262
        cpe.paired_channel = 1;
1336
262
    }
1337
1338
1339
    /* Stereo2 / Mono1 */
1340
807
    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
807
    if(faad_get1bit(ld)) {
1346
10
         hInfo->error = 26;
1347
10
         return;
1348
10
    }
1349
#else
1350
    faad_get1bit(ld);
1351
#endif
1352
1353
797
    hInfo->error = side_info(hDecoder, &cpe, ld, ics1, 1);
1354
797
    if (hInfo->error > 0)
1355
77
        return;
1356
720
    if (this_layer_stereo)
1357
219
    {
1358
        /* Stereo3 */
1359
219
        ics2->tns_data_present = faad_get1bit(ld);
1360
#ifdef LTP_DEC
1361
        ics1->ltp.data_present =
1362
#endif
1363
219
            faad_get1bit(ld);
1364
219
        hInfo->error = side_info(hDecoder, &cpe, ld, ics2, 1);
1365
219
        if (hInfo->error > 0)
1366
29
            return;
1367
219
    }
1368
    /* Stereo4 / Mono2 */
1369
691
    if (ics1->tns_data_present)
1370
134
        tns_data(ics1, &(ics1->tns), ld);
1371
691
    if (this_layer_stereo)
1372
190
    {
1373
        /* Stereo5 */
1374
190
        if (ics2->tns_data_present)
1375
73
            tns_data(ics2, &(ics2->tns), ld);
1376
190
    }
1377
1378
691
#ifdef DRM
1379
    /* CRC check */
1380
691
    if (hDecoder->object_type == DRM_ER_LC)
1381
691
    {
1382
691
        if ((hInfo->error = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1383
189
            return;
1384
691
    }
1385
502
#endif
1386
1387
    /* Stereo6 / Mono3 */
1388
    /* error resilient spectral data decoding */
1389
502
    if ((hInfo->error = reordered_spectral_data(hDecoder, ics1, ld, spec_data1)) > 0)
1390
16
    {
1391
16
        return;
1392
16
    }
1393
486
    if (this_layer_stereo)
1394
68
    {
1395
        /* Stereo7 */
1396
        /* error resilient spectral data decoding */
1397
68
        if ((hInfo->error = reordered_spectral_data(hDecoder, ics2, ld, spec_data2)) > 0)
1398
4
        {
1399
4
            return;
1400
4
        }
1401
68
    }
1402
1403
1404
482
#ifdef DRM
1405
482
#ifdef SBR_DEC
1406
    /* In case of DRM we need to read the SBR info before channel reconstruction */
1407
482
    if ((hDecoder->sbr_present_flag == 1) && (hDecoder->object_type == DRM_ER_LC))
1408
431
    {
1409
431
        bitfile ld_sbr = {0};
1410
431
        uint32_t i;
1411
431
        uint16_t count = 0;
1412
431
        uint8_t *revbuffer;
1413
431
        uint8_t *prevbufstart;
1414
431
        uint8_t *pbufend;
1415
1416
        /* all forward bitreading should be finished at this point */
1417
431
        uint32_t bitsconsumed = faad_get_processed_bits(ld);
1418
431
        uint32_t buffer_size = faad_origbitbuffer_size(ld);
1419
431
        uint8_t *buffer = (uint8_t*)faad_origbitbuffer(ld);
1420
1421
431
        if (bitsconsumed + 8 > buffer_size*8)
1422
111
        {
1423
111
            hInfo->error = 14;
1424
111
            return;
1425
111
        }
1426
1427
320
        if (!hDecoder->sbr[0])
1428
236
        {
1429
236
            hDecoder->sbr[0] = sbrDecodeInit(hDecoder->frameLength, hDecoder->element_id[0],
1430
236
                2*get_sample_rate(hDecoder->sf_index), 0 /* ds SBR */, 1);
1431
236
        }
1432
320
        if (!hDecoder->sbr[0])
1433
0
        {
1434
0
            hInfo->error = 19;
1435
0
            return;
1436
0
        }
1437
1438
        /* Reverse bit reading of SBR data in DRM audio frame */
1439
320
        revbuffer = (uint8_t*)faad_malloc(buffer_size*sizeof(uint8_t));
1440
320
        prevbufstart = revbuffer;
1441
320
        pbufend = &buffer[buffer_size - 1];
1442
7.86M
        for (i = 0; i < buffer_size; i++)
1443
7.86M
            *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
320
        count = (uint16_t)bit2byte(buffer_size*8 - bitsconsumed);
1449
320
        faad_initbits(&ld_sbr, revbuffer, count);
1450
1451
320
        hDecoder->sbr[0]->sample_rate = get_sample_rate(hDecoder->sf_index);
1452
320
        hDecoder->sbr[0]->sample_rate *= 2;
1453
1454
320
        faad_getbits(&ld_sbr, 8); /* Skip 8-bit CRC */
1455
1456
320
        hDecoder->sbr[0]->ret = sbr_extension_data(&ld_sbr, hDecoder->sbr[0], count, hDecoder->postSeekResetFlag);
1457
320
#if (defined(PS_DEC) || defined(DRM_PS))
1458
320
        if (hDecoder->sbr[0]->ps_used)
1459
199
        {
1460
199
            hDecoder->ps_used[0] = 1;
1461
199
            hDecoder->ps_used_global = 1;
1462
199
        }
1463
320
#endif
1464
1465
320
        if (ld_sbr.error)
1466
4
        {
1467
4
            hDecoder->sbr[0]->ret = 1;
1468
4
        }
1469
1470
        /* check CRC */
1471
        /* no need to check it if there was already an error */
1472
320
        if (hDecoder->sbr[0]->ret == 0)
1473
171
            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
320
        if (hDecoder->sbr[0]->ret != 0)
1477
192
        {
1478
192
            hDecoder->sbr[0]->header_count = 0;
1479
192
        }
1480
1481
320
        faad_endbits(&ld_sbr);
1482
1483
320
        if (revbuffer)
1484
320
            faad_free(revbuffer);
1485
320
    }
1486
371
#endif
1487
371
#endif
1488
1489
371
    if (this_layer_stereo)
1490
56
    {
1491
56
        hInfo->error = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe, spec_data1, spec_data2);
1492
56
        if (hInfo->error > 0)
1493
9
            return;
1494
315
    } else {
1495
315
        hInfo->error = reconstruct_single_channel(hDecoder, ics1, &cpe, spec_data1);
1496
315
        if (hInfo->error > 0)
1497
3
            return;
1498
315
    }
1499
1500
    /* map output channels position to internal data channels */
1501
359
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
1502
359
    {
1503
        /* this might be faulty when pce_set is true */
1504
359
        hDecoder->internal_channel[channels] = channels;
1505
359
        hDecoder->internal_channel[channels+1] = channels+1;
1506
359
    } else {
1507
0
        hDecoder->internal_channel[channels] = channels;
1508
0
    }
1509
1510
359
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
1511
359
    hDecoder->fr_ch_ele++;
1512
1513
359
    return;
1514
371
}
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
827
{
1520
827
    uint8_t retval = 0;
1521
827
    uint8_t ics_reserved_bit;
1522
1523
827
    ics_reserved_bit = faad_get1bit(ld
1524
827
        DEBUGVAR(1,300,"aac_scalable_main_header(): ics_reserved_bits"));
1525
827
    if (ics_reserved_bit != 0)
1526
4
        return 32;
1527
823
    ics1->window_sequence = (uint8_t)faad_getbits(ld, 2
1528
823
        DEBUGVAR(1,301,"aac_scalable_main_header(): window_sequence"));
1529
823
    ics1->window_shape = faad_get1bit(ld
1530
823
        DEBUGVAR(1,302,"aac_scalable_main_header(): window_shape"));
1531
1532
823
    if (ics1->window_sequence == EIGHT_SHORT_SEQUENCE)
1533
186
    {
1534
186
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 4
1535
186
            DEBUGVAR(1,303,"aac_scalable_main_header(): max_sfb (short)"));
1536
186
        ics1->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
1537
186
            DEBUGVAR(1,304,"aac_scalable_main_header(): scale_factor_grouping"));
1538
637
    } else {
1539
637
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 6
1540
637
            DEBUGVAR(1,305,"aac_scalable_main_header(): max_sfb (long)"));
1541
637
    }
1542
1543
    /* get the grouping information */
1544
823
    if ((retval = window_grouping_info(hDecoder, ics1)) > 0)
1545
13
        return retval;
1546
1547
    /* should be an error */
1548
    /* check the range of max_sfb */
1549
810
    if (ics1->max_sfb > ics1->num_swb)
1550
0
        return 16;
1551
1552
810
    if (this_layer_stereo)
1553
265
    {
1554
265
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
1555
265
            DEBUGVAR(1,306,"aac_scalable_main_header(): ms_mask_present"));
1556
265
        if (ics1->ms_mask_present == 3)
1557
3
        {
1558
            /* bitstream error */
1559
3
            return 32;
1560
3
        }
1561
262
        if (ics1->ms_mask_present == 1)
1562
70
        {
1563
70
            uint8_t g, sfb;
1564
309
            for (g = 0; g < ics1->num_window_groups; g++)
1565
239
            {
1566
1.94k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
1567
1.70k
                {
1568
1.70k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
1569
1.70k
                        DEBUGVAR(1,307,"aac_scalable_main_header(): faad_get1bit"));
1570
1.70k
                }
1571
239
            }
1572
70
        }
1573
1574
262
        memcpy(ics2, ics1, sizeof(ic_stream));
1575
545
    } else {
1576
545
        ics1->ms_mask_present = 0;
1577
545
    }
1578
1579
807
    return 0;
1580
810
}
1581
#endif
1582
1583
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
1584
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag)
1585
162k
{
1586
162k
    uint8_t result;
1587
1588
162k
    ics->global_gain = (uint8_t)faad_getbits(ld, 8
1589
162k
        DEBUGVAR(1,67,"individual_channel_stream(): global_gain"));
1590
1591
162k
    if (!ele->common_window && !scal_flag)
1592
135k
    {
1593
135k
        if ((result = ics_info(hDecoder, ics, ld, ele->common_window)) > 0)
1594
276
            return result;
1595
135k
    }
1596
1597
162k
    if ((result = section_data(hDecoder, ics, ld)) > 0)
1598
644
        return result;
1599
1600
162k
    if ((result = scale_factor_data(hDecoder, ics, ld)) > 0)
1601
15
        return result;
1602
1603
162k
    if (!scal_flag)
1604
161k
    {
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
161k
        if ((ics->pulse_data_present = faad_get1bit(ld
1612
161k
            DEBUGVAR(1,68,"individual_channel_stream(): pulse_data_present"))) & 1)
1613
6.78k
        {
1614
6.78k
            if ((result = pulse_data(ics, &(ics->pul), ld)) > 0)
1615
50
                return result;
1616
6.78k
        }
1617
1618
        /* get tns data */
1619
161k
        if ((ics->tns_data_present = faad_get1bit(ld
1620
161k
            DEBUGVAR(1,69,"individual_channel_stream(): tns_data_present"))) & 1)
1621
16.4k
        {
1622
16.4k
#ifdef ERROR_RESILIENCE
1623
16.4k
            if (hDecoder->object_type < ER_OBJECT_START)
1624
16.1k
#endif
1625
16.1k
                tns_data(ics, &(ics->tns), ld);
1626
16.4k
        }
1627
1628
        /* get gain control data */
1629
161k
        if ((ics->gain_control_data_present = faad_get1bit(ld
1630
161k
            DEBUGVAR(1,70,"individual_channel_stream(): gain_control_data_present"))) & 1)
1631
46
        {
1632
#ifdef SSR_DEC
1633
            if (hDecoder->object_type != SSR)
1634
                return 1;
1635
            else
1636
                gain_control_data(ld, ics);
1637
#else
1638
46
            return 1;
1639
46
#endif
1640
46
        }
1641
161k
    }
1642
1643
161k
#ifdef ERROR_RESILIENCE
1644
161k
    if (hDecoder->aacSpectralDataResilienceFlag)
1645
4.35k
    {
1646
4.35k
        ics->length_of_reordered_spectral_data = (uint16_t)faad_getbits(ld, 14
1647
4.35k
            DEBUGVAR(1,147,"individual_channel_stream(): length_of_reordered_spectral_data"));
1648
1649
4.35k
        if (hDecoder->channelConfiguration == 2)
1650
449
        {
1651
449
            if (ics->length_of_reordered_spectral_data > 6144)
1652
76
                ics->length_of_reordered_spectral_data = 6144;
1653
3.90k
        } else {
1654
3.90k
            if (ics->length_of_reordered_spectral_data > 12288)
1655
76
                ics->length_of_reordered_spectral_data = 12288;
1656
3.90k
        }
1657
1658
4.35k
        ics->length_of_longest_codeword = (uint8_t)faad_getbits(ld, 6
1659
4.35k
            DEBUGVAR(1,148,"individual_channel_stream(): length_of_longest_codeword"));
1660
4.35k
        if (ics->length_of_longest_codeword >= 49)
1661
242
            ics->length_of_longest_codeword = 49;
1662
4.35k
    }
1663
1664
    /* RVLC spectral data is put here */
1665
161k
    if (hDecoder->aacScalefactorDataResilienceFlag)
1666
6.67k
    {
1667
6.67k
        if ((result = rvlc_decode_scale_factors(ics, ld)) > 0)
1668
17
            return result;
1669
6.67k
    }
1670
161k
#endif
1671
1672
161k
    return 0;
1673
161k
}
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
161k
{
1680
161k
    uint8_t result;
1681
1682
161k
    result = side_info(hDecoder, ele, ld, ics, scal_flag);
1683
161k
    if (result > 0)
1684
942
        return result;
1685
1686
161k
    if (hDecoder->object_type >= ER_OBJECT_START)
1687
9.05k
    {
1688
9.05k
        if (ics->tns_data_present)
1689
325
            tns_data(ics, &(ics->tns), ld);
1690
9.05k
    }
1691
1692
161k
#ifdef DRM
1693
    /* CRC check */
1694
161k
    if (hDecoder->object_type == DRM_ER_LC)
1695
0
    {
1696
0
        if ((result = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1697
0
            return result;
1698
0
    }
1699
161k
#endif
1700
1701
161k
#ifdef ERROR_RESILIENCE
1702
161k
    if (hDecoder->aacSpectralDataResilienceFlag)
1703
3.58k
    {
1704
        /* error resilient spectral data decoding */
1705
3.58k
        if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1706
65
        {
1707
65
            return result;
1708
65
        }
1709
157k
    } else {
1710
157k
#endif
1711
        /* decode the spectral data */
1712
157k
        if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1713
51
        {
1714
51
            return result;
1715
51
        }
1716
157k
#ifdef ERROR_RESILIENCE
1717
157k
    }
1718
160k
#endif
1719
1720
    /* pulse coding reconstruction */
1721
160k
    if (ics->pulse_data_present)
1722
6.72k
    {
1723
6.72k
        if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
1724
6.70k
        {
1725
6.70k
            if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
1726
6
                return result;
1727
6.70k
        } else {
1728
18
            return 2; /* pulse coding not allowed for short blocks */
1729
18
        }
1730
6.72k
    }
1731
1732
160k
    return 0;
1733
160k
}
1734
1735
/* Table 4.4.25 */
1736
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1737
162k
{
1738
162k
    uint8_t g;
1739
162k
    uint8_t sect_esc_val, sect_bits;
1740
162k
    uint8_t sect_lim; /* 51 or 120, anyways less than 127. */
1741
1742
162k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) {
1743
16.8k
        sect_bits = 3;
1744
16.8k
        sect_lim = 8 * 15;
1745
145k
    } else {
1746
145k
        sect_bits = 5;
1747
145k
        sect_lim = MAX_SFB;
1748
145k
    }
1749
162k
    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
415k
    for (g = 0; g < ics->num_window_groups; g++)
1757
253k
    {
1758
253k
        uint8_t k = 0;
1759
253k
        uint8_t i = 0;
1760
1761
325k
        while (k < ics->max_sfb)
1762
72.1k
        {
1763
72.1k
#ifdef ERROR_RESILIENCE
1764
72.1k
            uint8_t vcb11 = 0;
1765
72.1k
#endif
1766
72.1k
            uint8_t sfb;
1767
72.1k
            uint8_t sect_len_incr;
1768
72.1k
            uint8_t sect_len = 0;
1769
72.1k
            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
72.1k
            if (ld->error != 0)
1774
0
                return 14;
1775
72.1k
            if (i >= sect_lim)
1776
353
                return 15;
1777
1778
71.7k
#ifdef ERROR_RESILIENCE
1779
71.7k
            if (hDecoder->aacSectionDataResilienceFlag)
1780
18.8k
                sect_cb_bits = 5;
1781
71.7k
#endif
1782
1783
71.7k
            ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits
1784
71.7k
                DEBUGVAR(1,71,"section_data(): sect_cb"));
1785
1786
71.7k
            if (ics->sect_cb[g][i] == 12)
1787
55
                return 32;
1788
1789
#if 0
1790
            printf("%d\n", ics->sect_cb[g][i]);
1791
#endif
1792
1793
#ifndef DRM
1794
            if (ics->sect_cb[g][i] == NOISE_HCB)
1795
                ics->noise_used = 1;
1796
#else
1797
            /* PNS not allowed in DRM */
1798
71.7k
            if (ics->sect_cb[g][i] == NOISE_HCB)
1799
22
                return 29;
1800
71.6k
#endif
1801
71.6k
            if (ics->sect_cb[g][i] == INTENSITY_HCB2 || ics->sect_cb[g][i] == INTENSITY_HCB)
1802
1.94k
                ics->is_used = 1;
1803
1804
71.6k
#ifdef ERROR_RESILIENCE
1805
71.6k
            if (hDecoder->aacSectionDataResilienceFlag)
1806
18.8k
            {
1807
18.8k
                if ((ics->sect_cb[g][i] == 11) ||
1808
18.6k
                    ((ics->sect_cb[g][i] >= 16) && (ics->sect_cb[g][i] <= 32)))
1809
4.89k
                {
1810
4.89k
                    vcb11 = 1;
1811
4.89k
                }
1812
18.8k
            }
1813
71.6k
            if (vcb11)
1814
4.89k
            {
1815
4.89k
                sect_len_incr = 1;
1816
66.8k
            } else {
1817
66.8k
#endif
1818
66.8k
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1819
66.8k
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1820
66.8k
#ifdef ERROR_RESILIENCE
1821
66.8k
            }
1822
71.6k
#endif
1823
72.3k
            while (sect_len_incr == sect_esc_val /* &&
1824
71.6k
                (k+sect_len < ics->max_sfb)*/)
1825
626
            {
1826
626
                sect_len += sect_len_incr;
1827
626
                if (sect_len > sect_lim)
1828
9
                    return 15;
1829
617
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1830
617
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1831
617
            }
1832
1833
71.6k
            sect_len += sect_len_incr;
1834
1835
71.6k
            ics->sect_start[g][i] = k;
1836
71.6k
            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
71.6k
            if (sect_len > sect_lim)
1846
11
                return 15;
1847
71.6k
            if (k + sect_len > sect_lim)
1848
8
                return 15;
1849
1850
235k
            for (sfb = k; sfb < k + sect_len; sfb++)
1851
164k
            {
1852
164k
                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
164k
            }
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
71.6k
            k += sect_len; /* k <= sect_lim */
1866
71.6k
            i++;
1867
71.6k
        }
1868
253k
        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
253k
        if (k != ics->max_sfb)
1873
186
        {
1874
186
            return 32;
1875
186
        }
1876
#if 0
1877
        printf("%d\n", ics->num_sec[g]);
1878
#endif
1879
253k
    }
1880
1881
#if 0
1882
    printf("\n");
1883
#endif
1884
1885
162k
    return 0;
1886
162k
}
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
155k
{
1901
155k
    uint8_t g, sfb;
1902
155k
    int16_t t;
1903
1904
155k
    int16_t scale_factor = ics->global_gain;
1905
155k
    int16_t is_position = 0;
1906
155k
    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
#ifndef DRM
1915
    int8_t noise_pcm_flag = 1;
1916
    int16_t noise_energy = ics->global_gain - 90;
1917
#endif
1918
1919
399k
    for (g = 0; g < ics->num_window_groups; g++)
1920
243k
    {
1921
382k
        for (sfb = 0; sfb < ics->max_sfb; sfb++)
1922
139k
        {
1923
139k
            switch (ics->sfb_cb[g][sfb])
1924
139k
            {
1925
96.3k
            case ZERO_HCB: /* zero book */
1926
96.3k
                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
96.3k
                break;
1932
5.16k
            case INTENSITY_HCB: /* intensity books */
1933
6.67k
            case INTENSITY_HCB2:
1934
1935
                /* decode intensity position */
1936
6.67k
                t = huffman_scale_factor(ld);
1937
6.67k
                is_position += (t - 60);
1938
6.67k
                ics->scale_factors[g][sfb] = is_position;
1939
#ifdef SF_PRINT
1940
                printf("%d\n", ics->scale_factors[g][sfb]);
1941
#endif
1942
1943
6.67k
                break;
1944
0
            case NOISE_HCB: /* noise books */
1945
1946
#ifndef DRM
1947
                /* decode noise energy */
1948
                if (noise_pcm_flag)
1949
                {
1950
                    noise_pcm_flag = 0;
1951
                    t = (int16_t)faad_getbits(ld, 9
1952
                        DEBUGVAR(1,73,"scale_factor_data(): first noise")) - 256;
1953
                } else {
1954
                    t = huffman_scale_factor(ld);
1955
                    t -= 60;
1956
                }
1957
                noise_energy += t;
1958
                ics->scale_factors[g][sfb] = noise_energy;
1959
#ifdef SF_PRINT
1960
                printf("%d\n", ics->scale_factors[g][sfb]);
1961
#endif
1962
#else
1963
                /* PNS not allowed in DRM */
1964
0
                return 29;
1965
0
#endif
1966
1967
0
                break;
1968
36.0k
            default: /* spectral books */
1969
1970
                /* ics->scale_factors[g][sfb] must be between 0 and 255 */
1971
1972
36.0k
                ics->scale_factors[g][sfb] = 0;
1973
1974
                /* decode scale factor */
1975
36.0k
                t = huffman_scale_factor(ld);
1976
36.0k
                scale_factor += (t - 60);
1977
36.0k
                if (scale_factor < 0 || scale_factor > 255)
1978
15
                    return 4;
1979
36.0k
                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
36.0k
                break;
1985
139k
            }
1986
139k
        }
1987
243k
    }
1988
1989
155k
    return 0;
1990
155k
}
1991
1992
/* Table 4.4.26 */
1993
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1994
162k
{
1995
162k
    uint8_t ret = 0;
1996
#ifdef PROFILE
1997
    int64_t count = faad_get_ts();
1998
#endif
1999
2000
162k
#ifdef ERROR_RESILIENCE
2001
162k
    if (!hDecoder->aacScalefactorDataResilienceFlag)
2002
155k
    {
2003
155k
#endif
2004
155k
        ret = decode_scale_factors(ics, ld);
2005
155k
#ifdef ERROR_RESILIENCE
2006
155k
    } 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
6.67k
        ret = rvlc_scale_factor_data(ics, ld);
2012
6.67k
    }
2013
162k
#endif
2014
2015
#ifdef PROFILE
2016
    count = faad_get_ts() - count;
2017
    hDecoder->scalefac_cycles += count;
2018
#endif
2019
2020
162k
    return ret;
2021
162k
}
2022
2023
/* Table 4.4.27 */
2024
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld)
2025
16.6k
{
2026
16.6k
    uint8_t w, filt, i, coef_bits;
2027
16.6k
    uint8_t n_filt_bits = 2;
2028
16.6k
    uint8_t length_bits = 6;
2029
16.6k
    uint8_t order_bits = 5;
2030
2031
16.6k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
2032
1.07k
    {
2033
1.07k
        n_filt_bits = 1;
2034
1.07k
        length_bits = 4;
2035
1.07k
        order_bits = 3;
2036
1.07k
    }
2037
2038
40.8k
    for (w = 0; w < ics->num_windows; w++)
2039
24.2k
    {
2040
24.2k
        uint8_t start_coef_bits = 3;
2041
24.2k
        tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits
2042
24.2k
            DEBUGVAR(1,74,"tns_data(): n_filt"));
2043
#if 0
2044
        printf("%d\n", tns->n_filt[w]);
2045
#endif
2046
2047
24.2k
        if (tns->n_filt[w])
2048
8.85k
        {
2049
8.85k
            if ((tns->coef_res[w] = faad_get1bit(ld
2050
8.85k
                DEBUGVAR(1,75,"tns_data(): coef_res"))) & 1)
2051
2.90k
                start_coef_bits = 4;
2052
#if 0
2053
            printf("%d\n", tns->coef_res[w]);
2054
#endif
2055
8.85k
        }
2056
2057
36.2k
        for (filt = 0; filt < tns->n_filt[w]; filt++)
2058
12.0k
        {
2059
12.0k
            tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits
2060
12.0k
                DEBUGVAR(1,76,"tns_data(): length"));
2061
#if 0
2062
            printf("%d\n", tns->length[w][filt]);
2063
#endif
2064
12.0k
            tns->order[w][filt]  = (uint8_t)faad_getbits(ld, order_bits
2065
12.0k
                DEBUGVAR(1,77,"tns_data(): order"));
2066
#if 0
2067
            printf("%d\n", tns->order[w][filt]);
2068
#endif
2069
12.0k
            if (tns->order[w][filt])
2070
6.03k
            {
2071
6.03k
                tns->direction[w][filt] = faad_get1bit(ld
2072
6.03k
                    DEBUGVAR(1,78,"tns_data(): direction"));
2073
#if 0
2074
                printf("%d\n", tns->direction[w][filt]);
2075
#endif
2076
6.03k
                tns->coef_compress[w][filt] = faad_get1bit(ld
2077
6.03k
                    DEBUGVAR(1,79,"tns_data(): coef_compress"));
2078
#if 0
2079
                printf("%d\n", tns->coef_compress[w][filt]);
2080
#endif
2081
2082
6.03k
                coef_bits = start_coef_bits - tns->coef_compress[w][filt];
2083
34.3k
                for (i = 0; i < tns->order[w][filt]; i++)
2084
28.3k
                {
2085
28.3k
                    tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits
2086
28.3k
                        DEBUGVAR(1,80,"tns_data(): coef"));
2087
#if 0
2088
                    printf("%d\n", tns->coef[w][filt][i]);
2089
#endif
2090
28.3k
                }
2091
6.03k
            }
2092
12.0k
        }
2093
24.2k
    }
2094
16.6k
}
2095
2096
#ifdef LTP_DEC
2097
/* Table 4.4.28 */
2098
static uint8_t ltp_data(NeAACDecStruct *hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld)
2099
{
2100
    uint8_t sfb, w;
2101
2102
    ltp->lag = 0;
2103
2104
#ifdef LD_DEC
2105
    if (hDecoder->object_type == LD)
2106
    {
2107
        ltp->lag_update = (uint8_t)faad_getbits(ld, 1
2108
            DEBUGVAR(1,142,"ltp_data(): lag_update"));
2109
2110
        if (ltp->lag_update)
2111
        {
2112
            ltp->lag = (uint16_t)faad_getbits(ld, 10
2113
                DEBUGVAR(1,81,"ltp_data(): lag"));
2114
        }
2115
    } else {
2116
#endif
2117
        ltp->lag = (uint16_t)faad_getbits(ld, 11
2118
            DEBUGVAR(1,81,"ltp_data(): lag"));
2119
#ifdef LD_DEC
2120
    }
2121
#endif
2122
2123
    /* Check length of lag */
2124
    if (ltp->lag > (hDecoder->frameLength << 1))
2125
        return 18;
2126
2127
    ltp->coef = (uint8_t)faad_getbits(ld, 3
2128
        DEBUGVAR(1,82,"ltp_data(): coef"));
2129
2130
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
2131
    {
2132
        for (w = 0; w < ics->num_windows; w++)
2133
        {
2134
            if ((ltp->short_used[w] = faad_get1bit(ld
2135
                DEBUGVAR(1,83,"ltp_data(): short_used"))) & 1)
2136
            {
2137
                ltp->short_lag_present[w] = faad_get1bit(ld
2138
                    DEBUGVAR(1,84,"ltp_data(): short_lag_present"));
2139
                if (ltp->short_lag_present[w])
2140
                {
2141
                    ltp->short_lag[w] = (uint8_t)faad_getbits(ld, 4
2142
                        DEBUGVAR(1,85,"ltp_data(): short_lag"));
2143
                }
2144
            }
2145
        }
2146
    } else {
2147
        ltp->last_band = (ics->max_sfb < MAX_LTP_SFB ? ics->max_sfb : MAX_LTP_SFB);
2148
2149
        for (sfb = 0; sfb < ltp->last_band; sfb++)
2150
        {
2151
            ltp->long_used[sfb] = faad_get1bit(ld
2152
                DEBUGVAR(1,86,"ltp_data(): long_used"));
2153
        }
2154
    }
2155
2156
    return 0;
2157
}
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
157k
{
2164
157k
    int8_t i;
2165
157k
    uint8_t g;
2166
157k
    uint16_t inc, k, p = 0;
2167
157k
    uint8_t groups = 0;
2168
157k
    uint8_t sect_cb;
2169
157k
    uint8_t result;
2170
157k
    uint16_t nshort = hDecoder->frameLength/8;
2171
2172
#ifdef PROFILE
2173
    int64_t count = faad_get_ts();
2174
#endif
2175
2176
404k
    for(g = 0; g < ics->num_window_groups; g++)
2177
246k
    {
2178
246k
        p = groups*nshort;
2179
2180
283k
        for (i = 0; i < ics->num_sec[g]; i++)
2181
36.4k
        {
2182
36.4k
            sect_cb = ics->sect_cb[g][i];
2183
2184
36.4k
            inc = (sect_cb >= FIRST_PAIR_HCB) ? 2 : 4;
2185
2186
36.4k
            switch (sect_cb)
2187
36.4k
            {
2188
13.2k
            case ZERO_HCB:
2189
13.2k
            case NOISE_HCB:
2190
14.0k
            case INTENSITY_HCB:
2191
14.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
14.3k
                p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] -
2207
14.3k
                    ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2208
14.3k
                break;
2209
22.0k
            default:
2210
#ifdef SFBO_PRINT
2211
                printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2212
#endif
2213
22.0k
                for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]];
2214
258k
                     k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += inc)
2215
236k
                {
2216
236k
                    if ((result = huffman_spectral_data(sect_cb, ld, &spectral_data[p])) > 0)
2217
51
                        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
236k
                    p += inc;
2228
236k
                }
2229
22.0k
                break;
2230
36.4k
            }
2231
36.4k
        }
2232
246k
        groups += ics->window_group_length[g];
2233
246k
    }
2234
2235
#ifdef PROFILE
2236
    count = faad_get_ts() - count;
2237
    hDecoder->spectral_cycles += count;
2238
#endif
2239
2240
157k
    return 0;
2241
157k
}
2242
2243
#ifndef DRM
2244
/* Table 4.4.30 */
2245
static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count)
2246
{
2247
    uint16_t i, n, dataElementLength;
2248
    uint8_t dataElementLengthPart;
2249
    uint8_t align = 4, data_element_version, loopCounter;
2250
2251
    uint8_t extension_type = (uint8_t)faad_getbits(ld, 4
2252
        DEBUGVAR(1,87,"extension_payload(): extension_type"));
2253
2254
    switch (extension_type)
2255
    {
2256
    case EXT_DYNAMIC_RANGE:
2257
        drc->present = 1;
2258
        n = dynamic_range_info(ld, drc);
2259
        return n;
2260
    case EXT_FILL_DATA:
2261
        /* fill_nibble = */ faad_getbits(ld, 4
2262
            DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be '0000' */
2263
        for (i = 0; i < count-1; i++)
2264
        {
2265
            /* fill_byte[i] = */ faad_getbits(ld, 8
2266
                DEBUGVAR(1,88,"extension_payload(): fill_byte")); /* must be '10100101' */
2267
        }
2268
        return count;
2269
    case EXT_DATA_ELEMENT:
2270
        data_element_version = (uint8_t)faad_getbits(ld, 4
2271
            DEBUGVAR(1,400,"extension_payload(): data_element_version"));
2272
        switch (data_element_version)
2273
        {
2274
        case ANC_DATA:
2275
            loopCounter = 0;
2276
            dataElementLength = 0;
2277
            do {
2278
                dataElementLengthPart = (uint8_t)faad_getbits(ld, 8
2279
                    DEBUGVAR(1,401,"extension_payload(): dataElementLengthPart"));
2280
                dataElementLength += dataElementLengthPart;
2281
                loopCounter++;
2282
            } while (dataElementLengthPart == 255);
2283
2284
            for (i = 0; i < dataElementLength; i++)
2285
            {
2286
                /* data_element_byte[i] = */ faad_getbits(ld, 8
2287
                    DEBUGVAR(1,402,"extension_payload(): data_element_byte"));
2288
                return (dataElementLength+loopCounter+1);
2289
            }
2290
        default:
2291
            align = 0;
2292
        }
2293
    case EXT_FIL:
2294
    default:
2295
        faad_getbits(ld, align
2296
            DEBUGVAR(1,88,"extension_payload(): fill_nibble"));
2297
        for (i = 0; i < count-1; i++)
2298
        {
2299
            /* other_bits[i] = */ faad_getbits(ld, 8
2300
               DEBUGVAR(1,89,"extension_payload(): fill_bit"));
2301
        }
2302
        return count;
2303
    }
2304
}
2305
2306
/* Table 4.4.31 */
2307
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc)
2308
{
2309
    uint8_t i, n = 1;
2310
    uint8_t band_incr;
2311
2312
    drc->num_bands = 1;
2313
2314
    if (faad_get1bit(ld
2315
        DEBUGVAR(1,90,"dynamic_range_info(): has instance_tag")) & 1)
2316
    {
2317
        drc->pce_instance_tag = (uint8_t)faad_getbits(ld, 4
2318
            DEBUGVAR(1,91,"dynamic_range_info(): pce_instance_tag"));
2319
        /* drc->drc_tag_reserved_bits = */ faad_getbits(ld, 4
2320
            DEBUGVAR(1,92,"dynamic_range_info(): drc_tag_reserved_bits"));
2321
        n++;
2322
    }
2323
2324
    drc->excluded_chns_present = faad_get1bit(ld
2325
        DEBUGVAR(1,93,"dynamic_range_info(): excluded_chns_present"));
2326
    if (drc->excluded_chns_present == 1)
2327
    {
2328
        n += excluded_channels(ld, drc);
2329
    }
2330
2331
    if (faad_get1bit(ld
2332
        DEBUGVAR(1,94,"dynamic_range_info(): has bands data")) & 1)
2333
    {
2334
        band_incr = (uint8_t)faad_getbits(ld, 4
2335
            DEBUGVAR(1,95,"dynamic_range_info(): band_incr"));
2336
        /* drc->drc_bands_reserved_bits = */ faad_getbits(ld, 4
2337
            DEBUGVAR(1,96,"dynamic_range_info(): drc_bands_reserved_bits"));
2338
        n++;
2339
        drc->num_bands += band_incr;
2340
2341
        for (i = 0; i < drc->num_bands; i++)
2342
        {
2343
            drc->band_top[i] = (uint8_t)faad_getbits(ld, 8
2344
                DEBUGVAR(1,97,"dynamic_range_info(): band_top"));
2345
            n++;
2346
        }
2347
    }
2348
2349
    if (faad_get1bit(ld
2350
        DEBUGVAR(1,98,"dynamic_range_info(): has prog_ref_level")) & 1)
2351
    {
2352
        drc->prog_ref_level = (uint8_t)faad_getbits(ld, 7
2353
            DEBUGVAR(1,99,"dynamic_range_info(): prog_ref_level"));
2354
        /* drc->prog_ref_level_reserved_bits = */ faad_get1bit(ld
2355
            DEBUGVAR(1,100,"dynamic_range_info(): prog_ref_level_reserved_bits"));
2356
        n++;
2357
    }
2358
2359
    for (i = 0; i < drc->num_bands; i++)
2360
    {
2361
        drc->dyn_rng_sgn[i] = faad_get1bit(ld
2362
            DEBUGVAR(1,101,"dynamic_range_info(): dyn_rng_sgn"));
2363
        drc->dyn_rng_ctl[i] = (uint8_t)faad_getbits(ld, 7
2364
            DEBUGVAR(1,102,"dynamic_range_info(): dyn_rng_ctl"));
2365
        n++;
2366
    }
2367
2368
    return n;
2369
}
2370
2371
/* Table 4.4.32 */
2372
static uint8_t excluded_channels(bitfile *ld, drc_info *drc)
2373
{
2374
    uint8_t i, n = 0;
2375
    uint8_t num_excl_chan = 7;
2376
2377
    for (i = 0; i < 7; i++)
2378
    {
2379
        drc->exclude_mask[i] = faad_get1bit(ld
2380
            DEBUGVAR(1,103,"excluded_channels(): exclude_mask"));
2381
    }
2382
    n++;
2383
2384
    while ((drc->additional_excluded_chns[n-1] = faad_get1bit(ld
2385
        DEBUGVAR(1,104,"excluded_channels(): additional_excluded_chns"))) == 1)
2386
    {
2387
        if (i >= MAX_CHANNELS - num_excl_chan - 7)
2388
            return n;
2389
        for (i = num_excl_chan; i < num_excl_chan+7; i++)
2390
        {
2391
            drc->exclude_mask[i] = faad_get1bit(ld
2392
                DEBUGVAR(1,105,"excluded_channels(): exclude_mask"));
2393
        }
2394
        n++;
2395
        num_excl_chan += 7;
2396
    }
2397
2398
    return n;
2399
}
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
105
{
2407
105
    uint8_t i;
2408
2409
    /* adif_id[0] = */ faad_getbits(ld, 8
2410
105
        DEBUGVAR(1,106,"get_adif_header(): adif_id[0]"));
2411
105
    /* adif_id[1] = */ faad_getbits(ld, 8
2412
105
        DEBUGVAR(1,107,"get_adif_header(): adif_id[1]"));
2413
105
    /* adif_id[2] = */ faad_getbits(ld, 8
2414
105
        DEBUGVAR(1,108,"get_adif_header(): adif_id[2]"));
2415
105
    /* adif_id[3] = */ faad_getbits(ld, 8
2416
105
        DEBUGVAR(1,109,"get_adif_header(): adif_id[3]"));
2417
105
    adif->copyright_id_present = faad_get1bit(ld
2418
105
        DEBUGVAR(1,110,"get_adif_header(): copyright_id_present"));
2419
105
    if(adif->copyright_id_present)
2420
10
    {
2421
100
        for (i = 0; i < 72/8; i++)
2422
90
        {
2423
90
            adif->copyright_id[i] = (int8_t)faad_getbits(ld, 8
2424
90
                DEBUGVAR(1,111,"get_adif_header(): copyright_id"));
2425
90
        }
2426
10
        adif->copyright_id[i] = 0;
2427
10
    }
2428
105
    adif->original_copy  = faad_get1bit(ld
2429
105
        DEBUGVAR(1,112,"get_adif_header(): original_copy"));
2430
105
    adif->home = faad_get1bit(ld
2431
105
        DEBUGVAR(1,113,"get_adif_header(): home"));
2432
105
    adif->bitstream_type = faad_get1bit(ld
2433
105
        DEBUGVAR(1,114,"get_adif_header(): bitstream_type"));
2434
105
    adif->bitrate = faad_getbits(ld, 23
2435
105
        DEBUGVAR(1,115,"get_adif_header(): bitrate"));
2436
105
    adif->num_program_config_elements = (uint8_t)faad_getbits(ld, 4
2437
105
        DEBUGVAR(1,116,"get_adif_header(): num_program_config_elements"));
2438
2439
1.33k
    for (i = 0; i < adif->num_program_config_elements + 1; i++)
2440
1.23k
    {
2441
1.23k
        if(adif->bitstream_type == 0)
2442
355
        {
2443
355
            adif->adif_buffer_fullness = faad_getbits(ld, 20
2444
355
                DEBUGVAR(1,117,"get_adif_header(): adif_buffer_fullness"));
2445
876
        } else {
2446
876
            adif->adif_buffer_fullness = 0;
2447
876
        }
2448
2449
1.23k
        program_config_element(&adif->pce[i], ld);
2450
1.23k
    }
2451
105
}
2452
2453
/* Table 1.A.5 */
2454
uint8_t adts_frame(adts_header *adts, bitfile *ld)
2455
5.34k
{
2456
    /* faad_byte_align(ld); */
2457
5.34k
    if (adts_fixed_header(adts, ld))
2458
5.13k
        return 5;
2459
212
    adts_variable_header(adts, ld);
2460
212
    adts_error_check(adts, ld);
2461
2462
212
    return 0;
2463
5.34k
}
2464
2465
/* Table 1.A.6 */
2466
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld)
2467
5.34k
{
2468
5.34k
    uint16_t i;
2469
5.34k
    uint8_t sync_err = 1;
2470
2471
    /* try to recover from sync errors */
2472
3.95M
    for (i = 0; i < 768; i++)
2473
3.94M
    {
2474
3.94M
        adts->syncword = (uint16_t)faad_showbits(ld, 12);
2475
3.94M
        if (adts->syncword != 0xFFF)
2476
3.94M
        {
2477
3.94M
            faad_getbits(ld, 8
2478
3.94M
                DEBUGVAR(0,0,""));
2479
3.94M
        } else {
2480
212
            sync_err = 0;
2481
212
            faad_getbits(ld, 12
2482
212
                DEBUGVAR(1,118,"adts_fixed_header(): syncword"));
2483
212
            break;
2484
212
        }
2485
3.94M
    }
2486
5.34k
    if (sync_err)
2487
5.13k
        return 5;
2488
2489
212
    adts->id = faad_get1bit(ld
2490
212
        DEBUGVAR(1,119,"adts_fixed_header(): id"));
2491
212
    adts->layer = (uint8_t)faad_getbits(ld, 2
2492
212
        DEBUGVAR(1,120,"adts_fixed_header(): layer"));
2493
212
    adts->protection_absent = faad_get1bit(ld
2494
212
        DEBUGVAR(1,121,"adts_fixed_header(): protection_absent"));
2495
212
    adts->profile = (uint8_t)faad_getbits(ld, 2
2496
212
        DEBUGVAR(1,122,"adts_fixed_header(): profile"));
2497
212
    adts->sf_index = (uint8_t)faad_getbits(ld, 4
2498
212
        DEBUGVAR(1,123,"adts_fixed_header(): sf_index"));
2499
212
    adts->private_bit = faad_get1bit(ld
2500
212
        DEBUGVAR(1,124,"adts_fixed_header(): private_bit"));
2501
212
    adts->channel_configuration = (uint8_t)faad_getbits(ld, 3
2502
212
        DEBUGVAR(1,125,"adts_fixed_header(): channel_configuration"));
2503
212
    adts->original = faad_get1bit(ld
2504
212
        DEBUGVAR(1,126,"adts_fixed_header(): original"));
2505
212
    adts->home = faad_get1bit(ld
2506
212
        DEBUGVAR(1,127,"adts_fixed_header(): home"));
2507
2508
212
    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
212
    return 0;
2519
5.34k
}
2520
2521
/* Table 1.A.7 */
2522
static void adts_variable_header(adts_header *adts, bitfile *ld)
2523
212
{
2524
212
    adts->copyright_identification_bit = faad_get1bit(ld
2525
212
        DEBUGVAR(1,129,"adts_variable_header(): copyright_identification_bit"));
2526
212
    adts->copyright_identification_start = faad_get1bit(ld
2527
212
        DEBUGVAR(1,130,"adts_variable_header(): copyright_identification_start"));
2528
212
    adts->aac_frame_length = (uint16_t)faad_getbits(ld, 13
2529
212
        DEBUGVAR(1,131,"adts_variable_header(): aac_frame_length"));
2530
212
    adts->adts_buffer_fullness = (uint16_t)faad_getbits(ld, 11
2531
212
        DEBUGVAR(1,132,"adts_variable_header(): adts_buffer_fullness"));
2532
212
    adts->no_raw_data_blocks_in_frame = (uint8_t)faad_getbits(ld, 2
2533
212
        DEBUGVAR(1,133,"adts_variable_header(): no_raw_data_blocks_in_frame"));
2534
212
}
2535
2536
/* Table 1.A.8 */
2537
static void adts_error_check(adts_header *adts, bitfile *ld)
2538
212
{
2539
212
    if (adts->protection_absent == 0)
2540
88
    {
2541
88
        adts->crc_check = (uint16_t)faad_getbits(ld, 16
2542
88
            DEBUGVAR(1,134,"adts_error_check(): crc_check"));
2543
88
    }
2544
212
}
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