Coverage Report

Created: 2026-10-17 06:34

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/syntax.c
Line
Count
Source
1
/*
2
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
4
**
5
** This program is free software; you can redistribute it and/or modify
6
** it under the terms of the GNU General Public License as published by
7
** the Free Software Foundation; either version 2 of the License, or
8
** (at your option) any later version.
9
**
10
** This program is distributed in the hope that it will be useful,
11
** but WITHOUT ANY WARRANTY; without even the implied warranty of
12
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
** GNU General Public License for more details.
14
**
15
** You should have received a copy of the GNU General Public License
16
** along with this program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
**
19
** Any non-GPL usage of this software or parts of this software is strictly
20
** forbidden.
21
**
22
** The "appropriate copyright message" mentioned in section 2c of the GPLv2
23
** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
24
**
25
** Commercial non-GPL licensing of this software is possible.
26
** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
27
**
28
** $Id: syntax.c,v 1.93 2009/01/26 23:51:15 menno Exp $
29
**/
30
31
/*
32
   Reads the AAC bitstream as defined in 14496-3 (MPEG-4 Audio)
33
*/
34
35
#include "common.h"
36
#include "structs.h"
37
38
#include <stdlib.h>
39
#include <stdio.h>
40
41
#include "syntax.h"
42
#include "specrec.h"
43
#include "huffman.h"
44
#include "bits.h"
45
#include "pulse.h"
46
#include "analysis.h"
47
#include "drc.h"
48
#ifdef ERROR_RESILIENCE
49
#include "rvlc.h"
50
#endif
51
#ifdef SBR_DEC
52
#include "sbr_syntax.h"
53
#endif
54
#include "mp4.h"
55
56
57
/* static function declarations */
58
static void decode_sce_lfe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
59
                           uint8_t id_syn_ele);
60
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
61
                       uint8_t id_syn_ele);
62
static uint8_t single_lfe_channel_element(NeAACDecStruct *hDecoder, bitfile *ld,
63
                                          uint8_t channel, uint8_t *tag);
64
static uint8_t channel_pair_element(NeAACDecStruct *hDecoder, bitfile *ld,
65
                                    uint8_t channel, uint8_t *tag);
66
#ifdef COUPLING_DEC
67
static uint8_t coupling_channel_element(NeAACDecStruct *hDecoder, bitfile *ld);
68
#endif
69
static uint16_t data_stream_element(NeAACDecStruct *hDecoder, bitfile *ld);
70
static uint8_t program_config_element(program_config *pce, bitfile *ld);
71
static uint8_t fill_element(NeAACDecStruct *hDecoder, bitfile *ld, drc_info *drc
72
#ifdef SBR_DEC
73
                            ,uint8_t sbr_ele
74
#endif
75
                            );
76
static uint8_t individual_channel_stream(NeAACDecStruct *hDecoder, element *ele,
77
                                         bitfile *ld, ic_stream *ics, uint8_t scal_flag,
78
                                         int16_t *spec_data);
79
static uint8_t ics_info(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
80
                        uint8_t common_window);
81
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
82
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld);
83
#ifdef SSR_DEC
84
static void gain_control_data(bitfile *ld, ic_stream *ics);
85
#endif
86
static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld,
87
                             int16_t *spectral_data);
88
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld);
89
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld);
90
#ifdef LTP_DEC
91
static uint8_t ltp_data(NeAACDecStruct *hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld);
92
#endif
93
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld);
94
static void adts_variable_header(adts_header *adts, bitfile *ld);
95
static void adts_error_check(adts_header *adts, bitfile *ld);
96
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
97
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag);
98
#ifdef DRM
99
static int8_t DRM_aac_scalable_main_header(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
100
                                           bitfile *ld, uint8_t this_layer_stereo);
101
#else
102
static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count);
103
static uint8_t dynamic_range_info(bitfile *ld, drc_info *drc);
104
static uint8_t excluded_channels(bitfile *ld, drc_info *drc);
105
#endif
106
107
108
/* Table 4.4.1 */
109
int8_t GASpecificConfig(bitfile *ld, mp4AudioSpecificConfig *mp4ASC,
110
                        program_config *pce_out)
111
2.65k
{
112
2.65k
    program_config pce;
113
114
    /* 1024 or 960 */
115
2.65k
    mp4ASC->frameLengthFlag = faad_get1bit(ld
116
2.65k
        DEBUGVAR(1,138,"GASpecificConfig(): FrameLengthFlag"));
117
#ifndef ALLOW_SMALL_FRAMELENGTH
118
    if (mp4ASC->frameLengthFlag == 1)
119
        return -3;
120
#endif
121
122
2.65k
    mp4ASC->dependsOnCoreCoder = faad_get1bit(ld
123
2.65k
        DEBUGVAR(1,139,"GASpecificConfig(): DependsOnCoreCoder"));
124
2.65k
    if (mp4ASC->dependsOnCoreCoder == 1)
125
700
    {
126
700
        mp4ASC->coreCoderDelay = (uint16_t)faad_getbits(ld, 14
127
700
            DEBUGVAR(1,140,"GASpecificConfig(): CoreCoderDelay"));
128
700
    }
129
130
2.65k
    mp4ASC->extensionFlag = faad_get1bit(ld DEBUGVAR(1,141,"GASpecificConfig(): ExtensionFlag"));
131
2.65k
    if (mp4ASC->channelsConfiguration == 0)
132
450
    {
133
450
        if (program_config_element(&pce, ld))
134
3
            return -3;
135
        //mp4ASC->channelsConfiguration = pce.channels;
136
137
447
        if (pce_out != NULL)
138
447
            memcpy(pce_out, &pce, sizeof(program_config));
139
140
        /*
141
        if (pce.num_valid_cc_elements)
142
            return -3;
143
        */
144
447
    }
145
146
2.65k
#ifdef ERROR_RESILIENCE
147
2.65k
    if (mp4ASC->extensionFlag == 1)
148
1.75k
    {
149
        /* Error resilience not supported yet */
150
1.75k
        if (mp4ASC->objectTypeIndex >= ER_OBJECT_START)
151
1.51k
        {
152
1.51k
            mp4ASC->aacSectionDataResilienceFlag = faad_get1bit(ld
153
1.51k
                DEBUGVAR(1,144,"GASpecificConfig(): aacSectionDataResilienceFlag"));
154
1.51k
            mp4ASC->aacScalefactorDataResilienceFlag = faad_get1bit(ld
155
1.51k
                DEBUGVAR(1,145,"GASpecificConfig(): aacScalefactorDataResilienceFlag"));
156
1.51k
            mp4ASC->aacSpectralDataResilienceFlag = faad_get1bit(ld
157
1.51k
                DEBUGVAR(1,146,"GASpecificConfig(): aacSpectralDataResilienceFlag"));
158
1.51k
        }
159
        /* 1 bit: extensionFlag3 */
160
1.75k
        faad_getbits(ld, 1);
161
1.75k
  }
162
2.65k
#endif
163
164
2.65k
    return 0;
165
2.65k
}
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.58k
{
176
2.58k
    uint8_t i;
177
178
2.58k
    memset(pce, 0, sizeof(program_config));
179
180
2.58k
    pce->channels = 0;
181
182
2.58k
    pce->element_instance_tag = (uint8_t)faad_getbits(ld, 4
183
2.58k
        DEBUGVAR(1,10,"program_config_element(): element_instance_tag"));
184
185
2.58k
    pce->object_type = (uint8_t)faad_getbits(ld, 2
186
2.58k
        DEBUGVAR(1,11,"program_config_element(): object_type"));
187
2.58k
    pce->sf_index = (uint8_t)faad_getbits(ld, 4
188
2.58k
        DEBUGVAR(1,12,"program_config_element(): sf_index"));
189
2.58k
    pce->num_front_channel_elements = (uint8_t)faad_getbits(ld, 4
190
2.58k
        DEBUGVAR(1,13,"program_config_element(): num_front_channel_elements"));
191
2.58k
    pce->num_side_channel_elements = (uint8_t)faad_getbits(ld, 4
192
2.58k
        DEBUGVAR(1,14,"program_config_element(): num_side_channel_elements"));
193
2.58k
    pce->num_back_channel_elements = (uint8_t)faad_getbits(ld, 4
194
2.58k
        DEBUGVAR(1,15,"program_config_element(): num_back_channel_elements"));
195
2.58k
    pce->num_lfe_channel_elements = (uint8_t)faad_getbits(ld, 2
196
2.58k
        DEBUGVAR(1,16,"program_config_element(): num_lfe_channel_elements"));
197
2.58k
    pce->num_assoc_data_elements = (uint8_t)faad_getbits(ld, 3
198
2.58k
        DEBUGVAR(1,17,"program_config_element(): num_assoc_data_elements"));
199
2.58k
    pce->num_valid_cc_elements = (uint8_t)faad_getbits(ld, 4
200
2.58k
        DEBUGVAR(1,18,"program_config_element(): num_valid_cc_elements"));
201
202
2.58k
    pce->mono_mixdown_present = faad_get1bit(ld
203
2.58k
        DEBUGVAR(1,19,"program_config_element(): mono_mixdown_present"));
204
2.58k
    if (pce->mono_mixdown_present == 1)
205
626
    {
206
626
        pce->mono_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
207
626
            DEBUGVAR(1,20,"program_config_element(): mono_mixdown_element_number"));
208
626
    }
209
210
2.58k
    pce->stereo_mixdown_present = faad_get1bit(ld
211
2.58k
        DEBUGVAR(1,21,"program_config_element(): stereo_mixdown_present"));
212
2.58k
    if (pce->stereo_mixdown_present == 1)
213
474
    {
214
474
        pce->stereo_mixdown_element_number = (uint8_t)faad_getbits(ld, 4
215
474
            DEBUGVAR(1,22,"program_config_element(): stereo_mixdown_element_number"));
216
474
    }
217
218
2.58k
    pce->matrix_mixdown_idx_present = faad_get1bit(ld
219
2.58k
        DEBUGVAR(1,23,"program_config_element(): matrix_mixdown_idx_present"));
220
2.58k
    if (pce->matrix_mixdown_idx_present == 1)
221
630
    {
222
630
        pce->matrix_mixdown_idx = (uint8_t)faad_getbits(ld, 2
223
630
            DEBUGVAR(1,24,"program_config_element(): matrix_mixdown_idx"));
224
630
        pce->pseudo_surround_enable = faad_get1bit(ld
225
630
            DEBUGVAR(1,25,"program_config_element(): pseudo_surround_enable"));
226
630
    }
227
228
8.38k
    for (i = 0; i < pce->num_front_channel_elements; i++)
229
5.79k
    {
230
5.79k
        pce->front_element_is_cpe[i] = faad_get1bit(ld
231
5.79k
            DEBUGVAR(1,26,"program_config_element(): front_element_is_cpe"));
232
5.79k
        pce->front_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
233
5.79k
            DEBUGVAR(1,27,"program_config_element(): front_element_tag_select"));
234
235
5.79k
        if (pce->front_element_is_cpe[i] & 1)
236
1.57k
        {
237
1.57k
            pce->cpe_channel[pce->front_element_tag_select[i]] = pce->channels;
238
1.57k
            pce->num_front_channels += 2;
239
1.57k
            pce->channels += 2;
240
4.22k
        } else {
241
4.22k
            pce->sce_channel[pce->front_element_tag_select[i]] = pce->channels;
242
4.22k
            pce->num_front_channels++;
243
4.22k
            pce->channels++;
244
4.22k
        }
245
5.79k
    }
246
247
9.18k
    for (i = 0; i < pce->num_side_channel_elements; i++)
248
6.59k
    {
249
6.59k
        pce->side_element_is_cpe[i] = faad_get1bit(ld
250
6.59k
            DEBUGVAR(1,28,"program_config_element(): side_element_is_cpe"));
251
6.59k
        pce->side_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
252
6.59k
            DEBUGVAR(1,29,"program_config_element(): side_element_tag_select"));
253
254
6.59k
        if (pce->side_element_is_cpe[i] & 1)
255
1.48k
        {
256
1.48k
            pce->cpe_channel[pce->side_element_tag_select[i]] = pce->channels;
257
1.48k
            pce->num_side_channels += 2;
258
1.48k
            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.59k
    }
265
266
7.51k
    for (i = 0; i < pce->num_back_channel_elements; i++)
267
4.93k
    {
268
4.93k
        pce->back_element_is_cpe[i] = faad_get1bit(ld
269
4.93k
            DEBUGVAR(1,30,"program_config_element(): back_element_is_cpe"));
270
4.93k
        pce->back_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
271
4.93k
            DEBUGVAR(1,31,"program_config_element(): back_element_tag_select"));
272
273
4.93k
        if (pce->back_element_is_cpe[i] & 1)
274
1.37k
        {
275
1.37k
            pce->cpe_channel[pce->back_element_tag_select[i]] = pce->channels;
276
1.37k
            pce->channels += 2;
277
1.37k
            pce->num_back_channels += 2;
278
3.55k
        } else {
279
3.55k
            pce->sce_channel[pce->back_element_tag_select[i]] = pce->channels;
280
3.55k
            pce->num_back_channels++;
281
3.55k
            pce->channels++;
282
3.55k
        }
283
4.93k
    }
284
285
3.83k
    for (i = 0; i < pce->num_lfe_channel_elements; i++)
286
1.24k
    {
287
1.24k
        pce->lfe_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
288
1.24k
            DEBUGVAR(1,32,"program_config_element(): lfe_element_tag_select"));
289
290
1.24k
        pce->sce_channel[pce->lfe_element_tag_select[i]] = pce->channels;
291
1.24k
        pce->num_lfe_channels++;
292
1.24k
        pce->channels++;
293
1.24k
    }
294
295
5.20k
    for (i = 0; i < pce->num_assoc_data_elements; i++)
296
2.62k
        pce->assoc_data_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
297
2.62k
        DEBUGVAR(1,33,"program_config_element(): assoc_data_element_tag_select"));
298
299
7.33k
    for (i = 0; i < pce->num_valid_cc_elements; i++)
300
4.74k
    {
301
4.74k
        pce->cc_element_is_ind_sw[i] = faad_get1bit(ld
302
4.74k
            DEBUGVAR(1,34,"program_config_element(): cc_element_is_ind_sw"));
303
4.74k
        pce->valid_cc_element_tag_select[i] = (uint8_t)faad_getbits(ld, 4
304
4.74k
            DEBUGVAR(1,35,"program_config_element(): valid_cc_element_tag_select"));
305
4.74k
    }
306
307
2.58k
    faad_byte_align(ld);
308
309
2.58k
    pce->comment_field_bytes = (uint8_t)faad_getbits(ld, 8
310
2.58k
        DEBUGVAR(1,36,"program_config_element(): comment_field_bytes"));
311
312
23.2k
    for (i = 0; i < pce->comment_field_bytes; i++)
313
20.6k
    {
314
20.6k
        pce->comment_field_data[i] = (uint8_t)faad_getbits(ld, 8
315
20.6k
            DEBUGVAR(1,37,"program_config_element(): comment_field_data"));
316
20.6k
    }
317
2.58k
    pce->comment_field_data[i] = 0;
318
319
2.58k
    if (pce->channels > MAX_CHANNELS)
320
78
        return 22;
321
322
2.50k
    return 0;
323
2.58k
}
324
325
static void decode_sce_lfe(NeAACDecStruct *hDecoder,
326
                           NeAACDecFrameInfo *hInfo, bitfile *ld,
327
                           uint8_t id_syn_ele)
328
131k
{
329
131k
    uint8_t channels = hDecoder->fr_channels;
330
131k
    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
131k
    if (channels+2 > MAX_CHANNELS)
336
3.90k
    {
337
3.90k
        hInfo->error = 12;
338
3.90k
        return;
339
3.90k
    }
340
128k
    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
128k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
351
16.7k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
352
81
    {
353
        /* element inconsistency */
354
81
        hInfo->error = 21;
355
81
        return;
356
81
    }
357
358
    /* save the syntax element id */
359
127k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
360
361
    /* decode the element */
362
127k
    hInfo->error = single_lfe_channel_element(hDecoder, ld, channels, &tag);
363
364
    /* map output channels position to internal data channels */
365
127k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
366
127k
    {
367
        /* this might be faulty when pce_set is true */
368
127k
        hDecoder->internal_channel[channels] = channels;
369
127k
        hDecoder->internal_channel[channels+1] = channels+1;
370
127k
    } else {
371
744
        if (hDecoder->pce_set)
372
50
        {
373
50
            if (hDecoder->pce.channels > MAX_CHANNELS)
374
3
            {
375
3
                hInfo->error = 22;
376
3
                return;
377
3
            }
378
47
            hDecoder->internal_channel[hDecoder->pce.sce_channel[tag]] = channels;
379
694
        } else {
380
694
            hDecoder->internal_channel[channels] = channels;
381
694
        }
382
744
    }
383
384
127k
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
385
127k
    hDecoder->fr_ch_ele++;
386
127k
}
387
388
static void decode_cpe(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo, bitfile *ld,
389
                       uint8_t id_syn_ele)
390
23.2k
{
391
23.2k
    uint8_t channels = hDecoder->fr_channels;
392
23.2k
    uint8_t tag = 0;
393
394
23.2k
    if (channels+2 > MAX_CHANNELS)
395
181
    {
396
181
        hInfo->error = 12;
397
181
        return;
398
181
    }
399
23.0k
    if (hDecoder->fr_ch_ele+1 > MAX_SYNTAX_ELEMENTS)
400
0
    {
401
0
        hInfo->error = 13;
402
0
        return;
403
0
    }
404
23.0k
    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
23.0k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
412
19.1k
    {
413
        /* element_output_channels not set yet */
414
19.1k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
415
19.1k
    } 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
23.0k
    if (hDecoder->element_id[hDecoder->fr_ch_ele] != INVALID_ELEMENT_ID &&
422
3.84k
        hDecoder->element_id[hDecoder->fr_ch_ele] != id_syn_ele)
423
32
    {
424
        /* element inconsistency */
425
32
        hInfo->error = 21;
426
32
        return;
427
32
    }
428
429
    /* save the syntax element id */
430
22.9k
    hDecoder->element_id[hDecoder->fr_ch_ele] = id_syn_ele;
431
432
    /* decode the element */
433
22.9k
    hInfo->error = channel_pair_element(hDecoder, ld, channels, &tag);
434
435
    /* map output channel position to internal data channels */
436
22.9k
    if (hDecoder->pce_set)
437
1.45k
    {
438
1.45k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]] = channels;
439
1.45k
        hDecoder->internal_channel[hDecoder->pce.cpe_channel[tag]+1] = channels+1;
440
21.5k
    } else {
441
21.5k
        hDecoder->internal_channel[channels] = channels;
442
21.5k
        hDecoder->internal_channel[channels+1] = channels+1;
443
21.5k
    }
444
445
22.9k
    hDecoder->fr_channels += 2;
446
22.9k
    hDecoder->fr_ch_ele++;
447
22.9k
}
448
449
void raw_data_block(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *hInfo,
450
                    bitfile *ld, program_config *pce, drc_info *drc)
451
8.72k
{
452
8.72k
    uint8_t id_syn_ele;
453
8.72k
    uint8_t ele_this_frame = 0;
454
455
8.72k
    hDecoder->fr_channels = 0;
456
8.72k
    hDecoder->fr_ch_ele = 0;
457
8.72k
    hDecoder->first_syn_ele = 25;
458
8.72k
    hDecoder->has_lfe = 0;
459
460
8.72k
#ifdef ERROR_RESILIENCE
461
8.72k
    if (hDecoder->object_type < ER_OBJECT_START)
462
6.27k
    {
463
6.27k
#endif
464
        /* Table 4.4.3: raw_data_block() */
465
667k
        while ((id_syn_ele = (uint8_t)faad_getbits(ld, LEN_SE_ID
466
667k
            DEBUGVAR(1,4,"NeAACDecDecode(): id_syn_ele"))) != ID_END)
467
667k
        {
468
667k
            switch (id_syn_ele) {
469
128k
            case ID_SCE:
470
128k
                ele_this_frame++;
471
128k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
472
128k
                decode_sce_lfe(hDecoder, hInfo, ld, id_syn_ele);
473
128k
                if (hInfo->error > 0)
474
4.56k
                    return;
475
124k
                break;
476
124k
            case ID_CPE:
477
19.8k
                ele_this_frame++;
478
19.8k
                if (hDecoder->first_syn_ele == 25) hDecoder->first_syn_ele = id_syn_ele;
479
19.8k
                decode_cpe(hDecoder, hInfo, ld, id_syn_ele);
480
19.8k
                if (hInfo->error > 0)
481
683
                    return;
482
19.1k
                break;
483
19.1k
            case ID_LFE:
484
100
#ifdef DRM
485
100
                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
100
                if (hInfo->error > 0)
492
100
                    return;
493
0
                break;
494
102
            case ID_CCE: /* not implemented yet, but skip the bits */
495
102
#ifdef DRM
496
102
                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
102
                if (hInfo->error > 0)
506
102
                    return;
507
0
                break;
508
515k
            case ID_DSE:
509
515k
                ele_this_frame++;
510
515k
                data_stream_element(hDecoder, ld);
511
515k
                break;
512
973
            case ID_PCE:
513
973
                if (ele_this_frame != 0)
514
101
                {
515
101
                    hInfo->error = 31;
516
101
                    return;
517
101
                }
518
872
                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
872
                program_config_element(pce, ld);
522
                //if ((hInfo->error = program_config_element(pce, ld)) > 0)
523
                //    return;
524
                //hDecoder->pce_set = 1;
525
872
                break;
526
2.01k
            case ID_FIL:
527
2.01k
                ele_this_frame++;
528
                /* one sbr_info describes a channel_element not a channel! */
529
                /* if we encounter SBR data here: error */
530
                /* SBR data will be read directly in the SCE/LFE/CPE element */
531
2.01k
                if ((hInfo->error = fill_element(hDecoder, ld, drc
532
2.01k
#ifdef SBR_DEC
533
2.01k
                    , INVALID_SBR_ELEMENT
534
2.01k
#endif
535
2.01k
                    )) > 0)
536
128
                    return;
537
1.88k
                break;
538
667k
            }
539
661k
            if (ld->error != 0)
540
0
            {
541
0
                hInfo->error = 32;
542
0
                return;
543
0
            }
544
661k
        }
545
6.27k
#ifdef ERROR_RESILIENCE
546
6.27k
    } else {
547
        /* Table 262: er_raw_data_block() */
548
2.44k
        switch (hDecoder->channelConfiguration)
549
2.44k
        {
550
383
        case 1:
551
383
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
552
383
            if (hInfo->error > 0)
553
65
                return;
554
318
            break;
555
318
        case 2:
556
92
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
557
92
            if (hInfo->error > 0)
558
19
                return;
559
73
            break;
560
184
        case 3:
561
184
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
562
184
            if (hInfo->error > 0)
563
17
                return;
564
167
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
565
167
            if (hInfo->error > 0)
566
17
                return;
567
150
            break;
568
414
        case 4:
569
414
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
570
414
            if (hInfo->error > 0)
571
55
                return;
572
359
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
573
359
            if (hInfo->error > 0)
574
17
                return;
575
342
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
576
342
            if (hInfo->error > 0)
577
3
                return;
578
339
            break;
579
767
        case 5:
580
767
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
581
767
            if (hInfo->error > 0)
582
132
                return;
583
635
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
584
635
            if (hInfo->error > 0)
585
26
                return;
586
609
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
587
609
            if (hInfo->error > 0)
588
6
                return;
589
603
            break;
590
603
        case 6:
591
129
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
592
129
            if (hInfo->error > 0)
593
26
                return;
594
103
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
595
103
            if (hInfo->error > 0)
596
6
                return;
597
97
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
598
97
            if (hInfo->error > 0)
599
5
                return;
600
92
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
601
92
            if (hInfo->error > 0)
602
18
                return;
603
74
            break;
604
475
        case 7: /* 8 channels */
605
475
            decode_sce_lfe(hDecoder, hInfo, ld, ID_SCE);
606
475
            if (hInfo->error > 0)
607
20
                return;
608
455
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
609
455
            if (hInfo->error > 0)
610
26
                return;
611
429
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
612
429
            if (hInfo->error > 0)
613
6
                return;
614
423
            decode_cpe(hDecoder, hInfo, ld, ID_CPE);
615
423
            if (hInfo->error > 0)
616
30
                return;
617
393
            decode_sce_lfe(hDecoder, hInfo, ld, ID_LFE);
618
393
            if (hInfo->error > 0)
619
24
                return;
620
369
            break;
621
369
        default:
622
3
            hInfo->error = 7;
623
3
            return;
624
2.44k
        }
625
#if 0
626
        cnt = bits_to_decode() / 8;
627
        while (cnt >= 1)
628
        {
629
            cnt -= extension_payload(cnt);
630
        }
631
#endif
632
2.44k
    }
633
2.52k
#endif
634
635
    /* new in corrigendum 14496-3:2002 */
636
2.52k
#ifdef DRM
637
2.52k
    if (hDecoder->object_type != DRM_ER_LC
638
#if 0
639
        && !hDecoder->latm_header_present
640
#endif
641
2.52k
        )
642
2.52k
#endif
643
2.52k
    {
644
2.52k
        faad_byte_align(ld);
645
2.52k
    }
646
647
2.52k
    return;
648
8.72k
}
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
127k
{
655
127k
    uint8_t retval = 0;
656
127k
    element sce = {0};
657
127k
    ic_stream *ics = &(sce.ics1);
658
127k
    ALIGN int16_t spec_data[1024] = {0};
659
660
127k
    sce.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
661
127k
        DEBUGVAR(1,38,"single_lfe_channel_element(): element_instance_tag"));
662
663
127k
    *tag = sce.element_instance_tag;
664
127k
    sce.channel = channel;
665
127k
    sce.paired_channel = -1;
666
667
127k
    retval = individual_channel_stream(hDecoder, &sce, ld, ics, 0, spec_data);
668
127k
    if (retval > 0)
669
674
        return retval;
670
671
    /* IS not allowed in single channel */
672
127k
    if (ics->is_used)
673
101
        return 32;
674
675
127k
#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
127k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
679
14.2k
    {
680
14.2k
        faad_flushbits(ld, LEN_SE_ID);
681
682
        /* one sbr_info describes a channel_element not a channel! */
683
14.2k
        if ((retval = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
684
32
        {
685
32
            return retval;
686
32
        }
687
14.2k
    }
688
127k
#endif
689
690
    /* noiseless coding is done, spectral reconstruction is done now */
691
127k
    retval = reconstruct_single_channel(hDecoder, ics, &sce, spec_data);
692
127k
    if (retval > 0)
693
128
        return retval;
694
695
127k
    return 0;
696
127k
}
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
22.9k
{
702
22.9k
    ALIGN int16_t spec_data1[1024] = {0};
703
22.9k
    ALIGN int16_t spec_data2[1024] = {0};
704
22.9k
    element cpe = {0};
705
22.9k
    ic_stream *ics1 = &(cpe.ics1);
706
22.9k
    ic_stream *ics2 = &(cpe.ics2);
707
22.9k
    uint8_t result;
708
709
22.9k
    cpe.channel        = channels;
710
22.9k
    cpe.paired_channel = channels+1;
711
712
22.9k
    cpe.element_instance_tag = (uint8_t)faad_getbits(ld, LEN_TAG
713
22.9k
        DEBUGVAR(1,39,"channel_pair_element(): element_instance_tag"));
714
22.9k
    *tag = cpe.element_instance_tag;
715
716
22.9k
    if ((cpe.common_window = faad_get1bit(ld
717
22.9k
        DEBUGVAR(1,40,"channel_pair_element(): common_window"))) & 1)
718
13.9k
    {
719
        /* both channels have common ics information */
720
13.9k
        if ((result = ics_info(hDecoder, ics1, ld, cpe.common_window)) > 0)
721
108
            return result;
722
723
13.8k
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
724
13.8k
            DEBUGVAR(1,41,"channel_pair_element(): ms_mask_present"));
725
13.8k
        if (ics1->ms_mask_present == 3)
726
32
        {
727
            /* bitstream error */
728
32
            return 32;
729
32
        }
730
13.7k
        if (ics1->ms_mask_present == 1)
731
3.58k
        {
732
3.58k
            uint8_t g, sfb;
733
9.96k
            for (g = 0; g < ics1->num_window_groups; g++)
734
6.37k
            {
735
12.8k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
736
6.48k
                {
737
6.48k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
738
6.48k
                        DEBUGVAR(1,42,"channel_pair_element(): faad_get1bit"));
739
6.48k
                }
740
6.37k
            }
741
3.58k
        }
742
743
13.7k
#ifdef ERROR_RESILIENCE
744
13.7k
        if ((hDecoder->object_type >= ER_OBJECT_START) && (ics1->predictor_data_present))
745
64
        {
746
64
            if ((
747
#ifdef LTP_DEC
748
                ics1->ltp.data_present =
749
#endif
750
64
                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
64
        }
762
13.7k
#endif
763
764
13.7k
        memcpy(ics2, ics1, sizeof(ic_stream));
765
13.7k
    } else {
766
9.06k
        ics1->ms_mask_present = 0;
767
9.06k
    }
768
769
22.8k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics1,
770
22.8k
        0, spec_data1)) > 0)
771
335
    {
772
335
        return result;
773
335
    }
774
775
22.5k
#ifdef ERROR_RESILIENCE
776
22.5k
    if (cpe.common_window && (hDecoder->object_type >= ER_OBJECT_START) &&
777
151
        (ics1->predictor_data_present))
778
51
    {
779
51
        if ((
780
#ifdef LTP_DEC
781
            ics1->ltp2.data_present =
782
#endif
783
51
            faad_get1bit(ld DEBUGVAR(1,50,"channel_pair_element(): ltp.data_present"))) & 1)
784
4
        {
785
#ifdef LTP_DEC
786
            if ((result = ltp_data(hDecoder, ics1, &(ics1->ltp2), ld)) > 0)
787
            {
788
                return result;
789
            }
790
#else
791
4
            return 26;
792
4
#endif
793
4
        }
794
51
    }
795
22.5k
#endif
796
797
22.5k
    if ((result = individual_channel_stream(hDecoder, &cpe, ld, ics2,
798
22.5k
        0, spec_data2)) > 0)
799
120
    {
800
120
        return result;
801
120
    }
802
803
22.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
22.3k
    if (faad_showbits(ld, LEN_SE_ID) == ID_FIL)
807
13.8k
    {
808
13.8k
        faad_flushbits(ld, LEN_SE_ID);
809
810
        /* one sbr_info describes a channel_element not a channel! */
811
13.8k
        if ((result = fill_element(hDecoder, ld, hDecoder->drc, hDecoder->fr_ch_ele)) > 0)
812
13
        {
813
13
            return result;
814
13
        }
815
13.8k
    }
816
22.3k
#endif
817
818
    /* noiseless coding is done, spectral reconstruction is done now */
819
22.3k
    if ((result = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe,
820
22.3k
        spec_data1, spec_data2)) > 0)
821
9
    {
822
9
        return result;
823
9
    }
824
825
22.3k
    return 0;
826
22.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
159k
{
832
159k
    uint8_t retval = 0;
833
159k
    uint8_t ics_reserved_bit;
834
835
159k
    ics_reserved_bit = faad_get1bit(ld
836
159k
        DEBUGVAR(1,43,"ics_info(): ics_reserved_bit"));
837
159k
    if (ics_reserved_bit != 0)
838
348
        return 32;
839
159k
    ics->window_sequence = (uint8_t)faad_getbits(ld, 2
840
159k
        DEBUGVAR(1,44,"ics_info(): window_sequence"));
841
159k
    ics->window_shape = faad_get1bit(ld
842
159k
        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
159k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
851
15.2k
    {
852
15.2k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 4
853
15.2k
            DEBUGVAR(1,46,"ics_info(): max_sfb (short)"));
854
15.2k
        ics->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
855
15.2k
            DEBUGVAR(1,47,"ics_info(): scale_factor_grouping"));
856
144k
    } else {
857
144k
        ics->max_sfb = (uint8_t)faad_getbits(ld, 6
858
144k
            DEBUGVAR(1,48,"ics_info(): max_sfb (long)"));
859
144k
    }
860
861
    /* get the grouping information */
862
159k
    if ((retval = window_grouping_info(hDecoder, ics)) > 0)
863
51
        return retval;
864
865
866
    /* should be an error */
867
    /* check the range of max_sfb */
868
159k
    if (ics->max_sfb > ics->num_swb)
869
0
        return 16;
870
871
159k
    if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
872
144k
    {
873
144k
        if ((ics->predictor_data_present = faad_get1bit(ld
874
144k
            DEBUGVAR(1,49,"ics_info(): predictor_data_present"))) & 1)
875
11.6k
        {
876
11.6k
            if (hDecoder->object_type == MAIN) /* MPEG2 style AAC predictor */
877
2.32k
            {
878
2.32k
                uint8_t sfb;
879
2.32k
                uint8_t predictor_reset, predictor_reset_group_number, prediction_used;
880
2.32k
                uint8_t limit = min(ics->max_sfb, max_pred_sfb(hDecoder->sf_index));
881
882
2.32k
                predictor_reset = faad_get1bit(ld DEBUGVAR(1,53,"ics_info(): pred.predictor_reset"));
883
2.32k
                if (predictor_reset)
884
2.05k
                {
885
2.05k
                    predictor_reset_group_number =
886
2.05k
                        (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,54,"ics_info(): pred.predictor_reset_group_number"));
887
2.05k
                } else {
888
263
                    predictor_reset_group_number = 0;
889
263
                }
890
891
13.0k
                for (sfb = 0; sfb < limit; sfb++)
892
10.7k
                {
893
10.7k
                    prediction_used = faad_get1bit(ld DEBUGVAR(1,55,"ics_info(): pred.prediction_used"));
894
#ifdef MAIN_DEC
895
                    ics->pred.prediction_used[sfb] = prediction_used;
896
#endif
897
10.7k
                }
898
#ifdef MAIN_DEC
899
                ics->pred.limit = limit;
900
                ics->pred.predictor_reset = predictor_reset;
901
                ics->pred.predictor_reset_group_number = predictor_reset_group_number;
902
#else
903
2.32k
                (void)predictor_reset_group_number;
904
2.32k
                (void)prediction_used;
905
2.32k
#endif
906
2.32k
            }
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
11.6k
            (void)common_window;
947
11.6k
#endif  /* LTP_DEC */
948
11.6k
        }
949
144k
    }
950
951
159k
    return retval;
952
159k
}
953
954
/* Table 4.4.7 */
955
static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld)
956
6.97k
{
957
6.97k
    uint8_t i;
958
959
6.97k
    pul->number_pulse = (uint8_t)faad_getbits(ld, 2
960
6.97k
        DEBUGVAR(1,56,"pulse_data(): number_pulse"));
961
6.97k
    pul->pulse_start_sfb = (uint8_t)faad_getbits(ld, 6
962
6.97k
        DEBUGVAR(1,57,"pulse_data(): pulse_start_sfb"));
963
964
    /* check the range of pulse_start_sfb */
965
6.97k
    if (pul->pulse_start_sfb > ics->num_swb)
966
47
        return 16;
967
968
16.6k
    for (i = 0; i < pul->number_pulse+1; i++)
969
9.70k
    {
970
9.70k
        pul->pulse_offset[i] = (uint8_t)faad_getbits(ld, 5
971
9.70k
            DEBUGVAR(1,58,"pulse_data(): pulse_offset"));
972
#if 0
973
        printf("%d\n", pul->pulse_offset[i]);
974
#endif
975
9.70k
        pul->pulse_amp[i] = (uint8_t)faad_getbits(ld, 4
976
9.70k
            DEBUGVAR(1,59,"pulse_data(): pulse_amp"));
977
#if 0
978
        printf("%d\n", pul->pulse_amp[i]);
979
#endif
980
9.70k
    }
981
982
6.93k
    return 0;
983
6.97k
}
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
515k
{
1082
515k
    uint8_t byte_aligned;
1083
515k
    uint16_t i, count;
1084
515k
    (void)hDecoder;  /* TODO: remove parameter; rename method; why result is unused? */
1085
1086
515k
    /* element_instance_tag = */ faad_getbits(ld, LEN_TAG
1087
515k
        DEBUGVAR(1,60,"data_stream_element(): element_instance_tag"));
1088
515k
    byte_aligned = faad_get1bit(ld
1089
515k
        DEBUGVAR(1,61,"data_stream_element(): byte_aligned"));
1090
515k
    count = (uint16_t)faad_getbits(ld, 8
1091
515k
        DEBUGVAR(1,62,"data_stream_element(): count"));
1092
515k
    if (count == 255)
1093
3.52k
    {
1094
3.52k
        count += (uint16_t)faad_getbits(ld, 8
1095
3.52k
            DEBUGVAR(1,63,"data_stream_element(): extra count"));
1096
3.52k
    }
1097
515k
    if (byte_aligned)
1098
115k
        faad_byte_align(ld);
1099
1100
23.9M
    for (i = 0; i < count; i++)
1101
23.4M
    {
1102
23.4M
        faad_getbits(ld, LEN_BYTE
1103
23.4M
            DEBUGVAR(1,64,"data_stream_element(): data_stream_byte"));
1104
23.4M
    }
1105
1106
515k
    return count;
1107
515k
}
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
30.0k
{
1116
30.0k
    uint16_t count;
1117
30.0k
#ifdef SBR_DEC
1118
30.0k
    uint8_t bs_extension_type;
1119
30.0k
#endif
1120
1121
30.0k
    count = (uint16_t)faad_getbits(ld, 4
1122
30.0k
        DEBUGVAR(1,65,"fill_element(): count"));
1123
30.0k
    if (count == 15)
1124
3.62k
    {
1125
3.62k
        count += (uint16_t)faad_getbits(ld, 8
1126
3.62k
            DEBUGVAR(1,66,"fill_element(): extra count")) - 1;
1127
3.62k
    }
1128
1129
30.0k
    if (count > 0)
1130
27.9k
    {
1131
27.9k
#ifdef SBR_DEC
1132
27.9k
        bs_extension_type = (uint8_t)faad_showbits(ld, 4);
1133
1134
27.9k
        if ((bs_extension_type == EXT_SBR_DATA) ||
1135
9.81k
            (bs_extension_type == EXT_SBR_DATA_CRC))
1136
27.8k
        {
1137
27.8k
            if (sbr_ele == INVALID_SBR_ELEMENT)
1138
40
                return 24;
1139
1140
27.8k
            if (!hDecoder->sbr[sbr_ele])
1141
23.7k
            {
1142
23.7k
                hDecoder->sbr[sbr_ele] = sbrDecodeInit(hDecoder->frameLength,
1143
23.7k
                    hDecoder->element_id[sbr_ele], 2*get_sample_rate(hDecoder->sf_index),
1144
23.7k
                    hDecoder->downSampledSBR
1145
23.7k
#ifdef DRM
1146
23.7k
                    , 0
1147
23.7k
#endif
1148
23.7k
                    );
1149
23.7k
            }
1150
27.8k
            if (!hDecoder->sbr[sbr_ele])
1151
0
                return 19;
1152
1153
27.8k
            hDecoder->sbr_present_flag = 1;
1154
1155
            /* parse the SBR data */
1156
27.8k
            hDecoder->sbr[sbr_ele]->ret = sbr_extension_data(ld, hDecoder->sbr[sbr_ele], count,
1157
27.8k
                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
27.8k
#if (defined(PS_DEC) || defined(DRM_PS))
1167
27.8k
            if (hDecoder->sbr[sbr_ele]->ps_used)
1168
4.20k
            {
1169
4.20k
                if (hDecoder->ps_present_flag != 0)
1170
4.20k
                {
1171
4.20k
                    hDecoder->ps_used[sbr_ele] = 1;
1172
1173
                    /* set element independent flag to 1 as well */
1174
4.20k
                    hDecoder->ps_used_global = 1;
1175
4.20k
                } else {
1176
0
                    hDecoder->sbr[sbr_ele]->ps_used = 0;
1177
0
                }
1178
4.20k
            }
1179
27.8k
#endif
1180
27.8k
        } else {
1181
133
#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
133
            (void)drc;
1194
133
            return 30;
1195
133
#endif
1196
133
#ifdef SBR_DEC
1197
133
        }
1198
27.9k
#endif
1199
27.9k
    }
1200
1201
29.9k
    return 0;
1202
30.0k
}
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
866
{
1305
866
    uint8_t channels = hDecoder->fr_channels = 0;
1306
866
    uint8_t this_layer_stereo = (hDecoder->channelConfiguration > 1) ? 1 : 0;
1307
866
    element cpe = {0};
1308
866
    ic_stream *ics1 = &(cpe.ics1);
1309
866
    ic_stream *ics2 = &(cpe.ics2);
1310
866
    ALIGN int16_t spec_data1[1024] = {0};
1311
866
    ALIGN int16_t spec_data2[1024] = {0};
1312
1313
866
    (void)drc;  /* TODO: remove unused parameter? */
1314
866
    (void)pce;  /* TODO: remove unused parameter? */
1315
1316
866
    hDecoder->fr_ch_ele = 0;
1317
1318
866
    hInfo->error = DRM_aac_scalable_main_header(hDecoder, ics1, ics2, ld, this_layer_stereo);
1319
866
    if (hInfo->error > 0)
1320
23
        return;
1321
1322
843
    cpe.common_window = 1;
1323
843
    if (this_layer_stereo)
1324
242
    {
1325
242
        hDecoder->element_id[0] = ID_CPE;
1326
242
        if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
1327
178
            hDecoder->element_output_channels[hDecoder->fr_ch_ele] = 2;
1328
601
    } else {
1329
601
        hDecoder->element_id[0] = ID_SCE;
1330
601
    }
1331
1332
843
    if (this_layer_stereo)
1333
242
    {
1334
242
        cpe.channel        = 0;
1335
242
        cpe.paired_channel = 1;
1336
242
    }
1337
1338
1339
    /* Stereo2 / Mono1 */
1340
843
    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
843
    if(faad_get1bit(ld)) {
1346
11
         hInfo->error = 26;
1347
11
         return;
1348
11
    }
1349
#else
1350
    faad_get1bit(ld);
1351
#endif
1352
1353
832
    hInfo->error = side_info(hDecoder, &cpe, ld, ics1, 1);
1354
832
    if (hInfo->error > 0)
1355
83
        return;
1356
749
    if (this_layer_stereo)
1357
196
    {
1358
        /* Stereo3 */
1359
196
        ics2->tns_data_present = faad_get1bit(ld);
1360
#ifdef LTP_DEC
1361
        ics1->ltp.data_present =
1362
#endif
1363
196
            faad_get1bit(ld);
1364
196
        hInfo->error = side_info(hDecoder, &cpe, ld, ics2, 1);
1365
196
        if (hInfo->error > 0)
1366
26
            return;
1367
196
    }
1368
    /* Stereo4 / Mono2 */
1369
723
    if (ics1->tns_data_present)
1370
131
        tns_data(ics1, &(ics1->tns), ld);
1371
723
    if (this_layer_stereo)
1372
170
    {
1373
        /* Stereo5 */
1374
170
        if (ics2->tns_data_present)
1375
56
            tns_data(ics2, &(ics2->tns), ld);
1376
170
    }
1377
1378
723
#ifdef DRM
1379
    /* CRC check */
1380
723
    if (hDecoder->object_type == DRM_ER_LC)
1381
723
    {
1382
723
        if ((hInfo->error = (uint8_t)faad_check_CRC(ld, (uint16_t)faad_get_processed_bits(ld) - 8)) > 0)
1383
181
            return;
1384
723
    }
1385
542
#endif
1386
1387
    /* Stereo6 / Mono3 */
1388
    /* error resilient spectral data decoding */
1389
542
    if ((hInfo->error = reordered_spectral_data(hDecoder, ics1, ld, spec_data1)) > 0)
1390
22
    {
1391
22
        return;
1392
22
    }
1393
520
    if (this_layer_stereo)
1394
61
    {
1395
        /* Stereo7 */
1396
        /* error resilient spectral data decoding */
1397
61
        if ((hInfo->error = reordered_spectral_data(hDecoder, ics2, ld, spec_data2)) > 0)
1398
4
        {
1399
4
            return;
1400
4
        }
1401
61
    }
1402
1403
1404
516
#ifdef DRM
1405
516
#ifdef SBR_DEC
1406
    /* In case of DRM we need to read the SBR info before channel reconstruction */
1407
516
    if ((hDecoder->sbr_present_flag == 1) && (hDecoder->object_type == DRM_ER_LC))
1408
469
    {
1409
469
        bitfile ld_sbr = {0};
1410
469
        uint32_t i;
1411
469
        uint16_t count = 0;
1412
469
        uint8_t *revbuffer;
1413
469
        uint8_t *prevbufstart;
1414
469
        uint8_t *pbufend;
1415
1416
        /* all forward bitreading should be finished at this point */
1417
469
        uint32_t bitsconsumed = faad_get_processed_bits(ld);
1418
469
        uint32_t buffer_size = faad_origbitbuffer_size(ld);
1419
469
        uint8_t *buffer = (uint8_t*)faad_origbitbuffer(ld);
1420
1421
469
        if (bitsconsumed + 8 > buffer_size*8)
1422
127
        {
1423
127
            hInfo->error = 14;
1424
127
            return;
1425
127
        }
1426
1427
342
        if (!hDecoder->sbr[0])
1428
255
        {
1429
255
            hDecoder->sbr[0] = sbrDecodeInit(hDecoder->frameLength, hDecoder->element_id[0],
1430
255
                2*get_sample_rate(hDecoder->sf_index), 0 /* ds SBR */, 1);
1431
255
        }
1432
342
        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
342
        revbuffer = (uint8_t*)faad_malloc(buffer_size*sizeof(uint8_t));
1440
342
        prevbufstart = revbuffer;
1441
342
        pbufend = &buffer[buffer_size - 1];
1442
8.98M
        for (i = 0; i < buffer_size; i++)
1443
8.98M
            *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
342
        count = (uint16_t)bit2byte(buffer_size*8 - bitsconsumed);
1449
342
        faad_initbits(&ld_sbr, revbuffer, count);
1450
1451
342
        hDecoder->sbr[0]->sample_rate = get_sample_rate(hDecoder->sf_index);
1452
342
        hDecoder->sbr[0]->sample_rate *= 2;
1453
1454
342
        faad_getbits(&ld_sbr, 8); /* Skip 8-bit CRC */
1455
1456
342
        hDecoder->sbr[0]->ret = sbr_extension_data(&ld_sbr, hDecoder->sbr[0], count, hDecoder->postSeekResetFlag);
1457
342
#if (defined(PS_DEC) || defined(DRM_PS))
1458
342
        if (hDecoder->sbr[0]->ps_used)
1459
209
        {
1460
209
            hDecoder->ps_used[0] = 1;
1461
209
            hDecoder->ps_used_global = 1;
1462
209
        }
1463
342
#endif
1464
1465
342
        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
342
        if (hDecoder->sbr[0]->ret == 0)
1473
186
            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
342
        if (hDecoder->sbr[0]->ret != 0)
1477
202
        {
1478
202
            hDecoder->sbr[0]->header_count = 0;
1479
202
        }
1480
1481
342
        faad_endbits(&ld_sbr);
1482
1483
342
        if (revbuffer)
1484
342
            faad_free(revbuffer);
1485
342
    }
1486
389
#endif
1487
389
#endif
1488
1489
389
    if (this_layer_stereo)
1490
50
    {
1491
50
        hInfo->error = reconstruct_channel_pair(hDecoder, ics1, ics2, &cpe, spec_data1, spec_data2);
1492
50
        if (hInfo->error > 0)
1493
6
            return;
1494
339
    } else {
1495
339
        hInfo->error = reconstruct_single_channel(hDecoder, ics1, &cpe, spec_data1);
1496
339
        if (hInfo->error > 0)
1497
3
            return;
1498
339
    }
1499
1500
    /* map output channels position to internal data channels */
1501
380
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2)
1502
380
    {
1503
        /* this might be faulty when pce_set is true */
1504
380
        hDecoder->internal_channel[channels] = channels;
1505
380
        hDecoder->internal_channel[channels+1] = channels+1;
1506
380
    } else {
1507
0
        hDecoder->internal_channel[channels] = channels;
1508
0
    }
1509
1510
380
    hDecoder->fr_channels += hDecoder->element_output_channels[hDecoder->fr_ch_ele];
1511
380
    hDecoder->fr_ch_ele++;
1512
1513
380
    return;
1514
389
}
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
866
{
1520
866
    uint8_t retval = 0;
1521
866
    uint8_t ics_reserved_bit;
1522
1523
866
    ics_reserved_bit = faad_get1bit(ld
1524
866
        DEBUGVAR(1,300,"aac_scalable_main_header(): ics_reserved_bits"));
1525
866
    if (ics_reserved_bit != 0)
1526
5
        return 32;
1527
861
    ics1->window_sequence = (uint8_t)faad_getbits(ld, 2
1528
861
        DEBUGVAR(1,301,"aac_scalable_main_header(): window_sequence"));
1529
861
    ics1->window_shape = faad_get1bit(ld
1530
861
        DEBUGVAR(1,302,"aac_scalable_main_header(): window_shape"));
1531
1532
861
    if (ics1->window_sequence == EIGHT_SHORT_SEQUENCE)
1533
182
    {
1534
182
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 4
1535
182
            DEBUGVAR(1,303,"aac_scalable_main_header(): max_sfb (short)"));
1536
182
        ics1->scale_factor_grouping = (uint8_t)faad_getbits(ld, 7
1537
182
            DEBUGVAR(1,304,"aac_scalable_main_header(): scale_factor_grouping"));
1538
679
    } else {
1539
679
        ics1->max_sfb = (uint8_t)faad_getbits(ld, 6
1540
679
            DEBUGVAR(1,305,"aac_scalable_main_header(): max_sfb (long)"));
1541
679
    }
1542
1543
    /* get the grouping information */
1544
861
    if ((retval = window_grouping_info(hDecoder, ics1)) > 0)
1545
15
        return retval;
1546
1547
    /* should be an error */
1548
    /* check the range of max_sfb */
1549
846
    if (ics1->max_sfb > ics1->num_swb)
1550
0
        return 16;
1551
1552
846
    if (this_layer_stereo)
1553
245
    {
1554
245
        ics1->ms_mask_present = (uint8_t)faad_getbits(ld, 2
1555
245
            DEBUGVAR(1,306,"aac_scalable_main_header(): ms_mask_present"));
1556
245
        if (ics1->ms_mask_present == 3)
1557
3
        {
1558
            /* bitstream error */
1559
3
            return 32;
1560
3
        }
1561
242
        if (ics1->ms_mask_present == 1)
1562
69
        {
1563
69
            uint8_t g, sfb;
1564
313
            for (g = 0; g < ics1->num_window_groups; g++)
1565
244
            {
1566
2.11k
                for (sfb = 0; sfb < ics1->max_sfb; sfb++)
1567
1.87k
                {
1568
1.87k
                    ics1->ms_used[g][sfb] = faad_get1bit(ld
1569
1.87k
                        DEBUGVAR(1,307,"aac_scalable_main_header(): faad_get1bit"));
1570
1.87k
                }
1571
244
            }
1572
69
        }
1573
1574
242
        memcpy(ics2, ics1, sizeof(ic_stream));
1575
601
    } else {
1576
601
        ics1->ms_mask_present = 0;
1577
601
    }
1578
1579
843
    return 0;
1580
846
}
1581
#endif
1582
1583
static uint8_t side_info(NeAACDecStruct *hDecoder, element *ele,
1584
                         bitfile *ld, ic_stream *ics, uint8_t scal_flag)
1585
174k
{
1586
174k
    uint8_t result;
1587
1588
174k
    ics->global_gain = (uint8_t)faad_getbits(ld, 8
1589
174k
        DEBUGVAR(1,67,"individual_channel_stream(): global_gain"));
1590
1591
174k
    if (!ele->common_window && !scal_flag)
1592
145k
    {
1593
145k
        if ((result = ics_info(hDecoder, ics, ld, ele->common_window)) > 0)
1594
291
            return result;
1595
145k
    }
1596
1597
174k
    if ((result = section_data(hDecoder, ics, ld)) > 0)
1598
666
        return result;
1599
1600
173k
    if ((result = scale_factor_data(hDecoder, ics, ld)) > 0)
1601
14
        return result;
1602
1603
173k
    if (!scal_flag)
1604
172k
    {
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
172k
        if ((ics->pulse_data_present = faad_get1bit(ld
1612
172k
            DEBUGVAR(1,68,"individual_channel_stream(): pulse_data_present"))) & 1)
1613
6.97k
        {
1614
6.97k
            if ((result = pulse_data(ics, &(ics->pul), ld)) > 0)
1615
47
                return result;
1616
6.97k
        }
1617
1618
        /* get tns data */
1619
172k
        if ((ics->tns_data_present = faad_get1bit(ld
1620
172k
            DEBUGVAR(1,69,"individual_channel_stream(): tns_data_present"))) & 1)
1621
16.9k
        {
1622
16.9k
#ifdef ERROR_RESILIENCE
1623
16.9k
            if (hDecoder->object_type < ER_OBJECT_START)
1624
16.6k
#endif
1625
16.6k
                tns_data(ics, &(ics->tns), ld);
1626
16.9k
        }
1627
1628
        /* get gain control data */
1629
172k
        if ((ics->gain_control_data_present = faad_get1bit(ld
1630
172k
            DEBUGVAR(1,70,"individual_channel_stream(): gain_control_data_present"))) & 1)
1631
45
        {
1632
#ifdef SSR_DEC
1633
            if (hDecoder->object_type != SSR)
1634
                return 1;
1635
            else
1636
                gain_control_data(ld, ics);
1637
#else
1638
45
            return 1;
1639
45
#endif
1640
45
        }
1641
172k
    }
1642
1643
173k
#ifdef ERROR_RESILIENCE
1644
173k
    if (hDecoder->aacSpectralDataResilienceFlag)
1645
4.66k
    {
1646
4.66k
        ics->length_of_reordered_spectral_data = (uint16_t)faad_getbits(ld, 14
1647
4.66k
            DEBUGVAR(1,147,"individual_channel_stream(): length_of_reordered_spectral_data"));
1648
1649
4.66k
        if (hDecoder->channelConfiguration == 2)
1650
521
        {
1651
521
            if (ics->length_of_reordered_spectral_data > 6144)
1652
69
                ics->length_of_reordered_spectral_data = 6144;
1653
4.14k
        } else {
1654
4.14k
            if (ics->length_of_reordered_spectral_data > 12288)
1655
74
                ics->length_of_reordered_spectral_data = 12288;
1656
4.14k
        }
1657
1658
4.66k
        ics->length_of_longest_codeword = (uint8_t)faad_getbits(ld, 6
1659
4.66k
            DEBUGVAR(1,148,"individual_channel_stream(): length_of_longest_codeword"));
1660
4.66k
        if (ics->length_of_longest_codeword >= 49)
1661
249
            ics->length_of_longest_codeword = 49;
1662
4.66k
    }
1663
1664
    /* RVLC spectral data is put here */
1665
173k
    if (hDecoder->aacScalefactorDataResilienceFlag)
1666
6.98k
    {
1667
6.98k
        if ((result = rvlc_decode_scale_factors(ics, ld)) > 0)
1668
22
            return result;
1669
6.98k
    }
1670
173k
#endif
1671
1672
173k
    return 0;
1673
173k
}
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
173k
{
1680
173k
    uint8_t result;
1681
1682
173k
    result = side_info(hDecoder, ele, ld, ics, scal_flag);
1683
173k
    if (result > 0)
1684
976
        return result;
1685
1686
172k
    if (hDecoder->object_type >= ER_OBJECT_START)
1687
9.51k
    {
1688
9.51k
        if (ics->tns_data_present)
1689
344
            tns_data(ics, &(ics->tns), ld);
1690
9.51k
    }
1691
1692
172k
#ifdef DRM
1693
    /* CRC check */
1694
172k
    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
172k
#endif
1700
1701
172k
#ifdef ERROR_RESILIENCE
1702
172k
    if (hDecoder->aacSpectralDataResilienceFlag)
1703
3.89k
    {
1704
        /* error resilient spectral data decoding */
1705
3.89k
        if ((result = reordered_spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1706
76
        {
1707
76
            return result;
1708
76
        }
1709
168k
    } else {
1710
168k
#endif
1711
        /* decode the spectral data */
1712
168k
        if ((result = spectral_data(hDecoder, ics, ld, spec_data)) > 0)
1713
50
        {
1714
50
            return result;
1715
50
        }
1716
168k
#ifdef ERROR_RESILIENCE
1717
168k
    }
1718
172k
#endif
1719
1720
    /* pulse coding reconstruction */
1721
172k
    if (ics->pulse_data_present)
1722
6.92k
    {
1723
6.92k
        if (ics->window_sequence != EIGHT_SHORT_SEQUENCE)
1724
6.90k
        {
1725
6.90k
            if ((result = pulse_decode(ics, spec_data, hDecoder->frameLength)) > 0)
1726
7
                return result;
1727
6.90k
        } else {
1728
20
            return 2; /* pulse coding not allowed for short blocks */
1729
20
        }
1730
6.92k
    }
1731
1732
172k
    return 0;
1733
172k
}
1734
1735
/* Table 4.4.25 */
1736
static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1737
174k
{
1738
174k
    uint8_t g;
1739
174k
    uint8_t sect_esc_val, sect_bits;
1740
174k
    uint8_t sect_lim; /* 51 or 120, anyways less than 127. */
1741
1742
174k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) {
1743
17.1k
        sect_bits = 3;
1744
17.1k
        sect_lim = 8 * 15;
1745
156k
    } else {
1746
156k
        sect_bits = 5;
1747
156k
        sect_lim = MAX_SFB;
1748
156k
    }
1749
174k
    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
439k
    for (g = 0; g < ics->num_window_groups; g++)
1757
265k
    {
1758
265k
        uint8_t k = 0;
1759
265k
        uint8_t i = 0;
1760
1761
344k
        while (k < ics->max_sfb)
1762
78.8k
        {
1763
78.8k
#ifdef ERROR_RESILIENCE
1764
78.8k
            uint8_t vcb11 = 0;
1765
78.8k
#endif
1766
78.8k
            uint8_t sfb;
1767
78.8k
            uint8_t sect_len_incr;
1768
78.8k
            uint8_t sect_len = 0;
1769
78.8k
            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
78.8k
            if (ld->error != 0)
1774
0
                return 14;
1775
78.8k
            if (i >= sect_lim)
1776
366
                return 15;
1777
1778
78.4k
#ifdef ERROR_RESILIENCE
1779
78.4k
            if (hDecoder->aacSectionDataResilienceFlag)
1780
19.1k
                sect_cb_bits = 5;
1781
78.4k
#endif
1782
1783
78.4k
            ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits
1784
78.4k
                DEBUGVAR(1,71,"section_data(): sect_cb"));
1785
1786
78.4k
            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
78.4k
            if (ics->sect_cb[g][i] == NOISE_HCB)
1799
16
                return 29;
1800
78.4k
#endif
1801
78.4k
            if (ics->sect_cb[g][i] == INTENSITY_HCB2 || ics->sect_cb[g][i] == INTENSITY_HCB)
1802
1.86k
                ics->is_used = 1;
1803
1804
78.4k
#ifdef ERROR_RESILIENCE
1805
78.4k
            if (hDecoder->aacSectionDataResilienceFlag)
1806
19.1k
            {
1807
19.1k
                if ((ics->sect_cb[g][i] == 11) ||
1808
18.9k
                    ((ics->sect_cb[g][i] >= 16) && (ics->sect_cb[g][i] <= 32)))
1809
4.73k
                {
1810
4.73k
                    vcb11 = 1;
1811
4.73k
                }
1812
19.1k
            }
1813
78.4k
            if (vcb11)
1814
4.73k
            {
1815
4.73k
                sect_len_incr = 1;
1816
73.6k
            } else {
1817
73.6k
#endif
1818
73.6k
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1819
73.6k
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1820
73.6k
#ifdef ERROR_RESILIENCE
1821
73.6k
            }
1822
78.4k
#endif
1823
79.0k
            while (sect_len_incr == sect_esc_val /* &&
1824
78.4k
                (k+sect_len < ics->max_sfb)*/)
1825
672
            {
1826
672
                sect_len += sect_len_incr;
1827
672
                if (sect_len > sect_lim)
1828
7
                    return 15;
1829
665
                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits
1830
665
                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));
1831
665
            }
1832
1833
78.4k
            sect_len += sect_len_incr;
1834
1835
78.4k
            ics->sect_start[g][i] = k;
1836
78.4k
            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
78.4k
            if (sect_len > sect_lim)
1846
13
                return 15;
1847
78.4k
            if (k + sect_len > sect_lim)
1848
9
                return 15;
1849
1850
262k
            for (sfb = k; sfb < k + sect_len; sfb++)
1851
183k
            {
1852
183k
                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
183k
            }
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
78.3k
            k += sect_len; /* k <= sect_lim */
1866
78.3k
            i++;
1867
78.3k
        }
1868
265k
        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
265k
        if (k != ics->max_sfb)
1873
200
        {
1874
200
            return 32;
1875
200
        }
1876
#if 0
1877
        printf("%d\n", ics->num_sec[g]);
1878
#endif
1879
265k
    }
1880
1881
#if 0
1882
    printf("\n");
1883
#endif
1884
1885
173k
    return 0;
1886
174k
}
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
166k
{
1901
166k
    uint8_t g, sfb;
1902
166k
    int16_t t;
1903
1904
166k
    int16_t scale_factor = ics->global_gain;
1905
166k
    int16_t is_position = 0;
1906
166k
    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
421k
    for (g = 0; g < ics->num_window_groups; g++)
1920
255k
    {
1921
412k
        for (sfb = 0; sfb < ics->max_sfb; sfb++)
1922
157k
        {
1923
157k
            switch (ics->sfb_cb[g][sfb])
1924
157k
            {
1925
113k
            case ZERO_HCB: /* zero book */
1926
113k
                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
113k
                break;
1932
4.81k
            case INTENSITY_HCB: /* intensity books */
1933
6.55k
            case INTENSITY_HCB2:
1934
1935
                /* decode intensity position */
1936
6.55k
                t = huffman_scale_factor(ld);
1937
6.55k
                is_position += (t - 60);
1938
6.55k
                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.55k
                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
37.3k
            default: /* spectral books */
1969
1970
                /* ics->scale_factors[g][sfb] must be between 0 and 255 */
1971
1972
37.3k
                ics->scale_factors[g][sfb] = 0;
1973
1974
                /* decode scale factor */
1975
37.3k
                t = huffman_scale_factor(ld);
1976
37.3k
                scale_factor += (t - 60);
1977
37.3k
                if (scale_factor < 0 || scale_factor > 255)
1978
14
                    return 4;
1979
37.2k
                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
37.2k
                break;
1985
157k
            }
1986
157k
        }
1987
255k
    }
1988
1989
166k
    return 0;
1990
166k
}
1991
1992
/* Table 4.4.26 */
1993
static uint8_t scale_factor_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *ld)
1994
173k
{
1995
173k
    uint8_t ret = 0;
1996
#ifdef PROFILE
1997
    int64_t count = faad_get_ts();
1998
#endif
1999
2000
173k
#ifdef ERROR_RESILIENCE
2001
173k
    if (!hDecoder->aacScalefactorDataResilienceFlag)
2002
166k
    {
2003
166k
#endif
2004
166k
        ret = decode_scale_factors(ics, ld);
2005
166k
#ifdef ERROR_RESILIENCE
2006
166k
    } 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.98k
        ret = rvlc_scale_factor_data(ics, ld);
2012
6.98k
    }
2013
173k
#endif
2014
2015
#ifdef PROFILE
2016
    count = faad_get_ts() - count;
2017
    hDecoder->scalefac_cycles += count;
2018
#endif
2019
2020
173k
    return ret;
2021
173k
}
2022
2023
/* Table 4.4.27 */
2024
static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld)
2025
17.1k
{
2026
17.1k
    uint8_t w, filt, i, coef_bits;
2027
17.1k
    uint8_t n_filt_bits = 2;
2028
17.1k
    uint8_t length_bits = 6;
2029
17.1k
    uint8_t order_bits = 5;
2030
2031
17.1k
    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
2032
1.09k
    {
2033
1.09k
        n_filt_bits = 1;
2034
1.09k
        length_bits = 4;
2035
1.09k
        order_bits = 3;
2036
1.09k
    }
2037
2038
41.9k
    for (w = 0; w < ics->num_windows; w++)
2039
24.7k
    {
2040
24.7k
        uint8_t start_coef_bits = 3;
2041
24.7k
        tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits
2042
24.7k
            DEBUGVAR(1,74,"tns_data(): n_filt"));
2043
#if 0
2044
        printf("%d\n", tns->n_filt[w]);
2045
#endif
2046
2047
24.7k
        if (tns->n_filt[w])
2048
9.53k
        {
2049
9.53k
            if ((tns->coef_res[w] = faad_get1bit(ld
2050
9.53k
                DEBUGVAR(1,75,"tns_data(): coef_res"))) & 1)
2051
3.22k
                start_coef_bits = 4;
2052
#if 0
2053
            printf("%d\n", tns->coef_res[w]);
2054
#endif
2055
9.53k
        }
2056
2057
38.0k
        for (filt = 0; filt < tns->n_filt[w]; filt++)
2058
13.2k
        {
2059
13.2k
            tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits
2060
13.2k
                DEBUGVAR(1,76,"tns_data(): length"));
2061
#if 0
2062
            printf("%d\n", tns->length[w][filt]);
2063
#endif
2064
13.2k
            tns->order[w][filt]  = (uint8_t)faad_getbits(ld, order_bits
2065
13.2k
                DEBUGVAR(1,77,"tns_data(): order"));
2066
#if 0
2067
            printf("%d\n", tns->order[w][filt]);
2068
#endif
2069
13.2k
            if (tns->order[w][filt])
2070
6.84k
            {
2071
6.84k
                tns->direction[w][filt] = faad_get1bit(ld
2072
6.84k
                    DEBUGVAR(1,78,"tns_data(): direction"));
2073
#if 0
2074
                printf("%d\n", tns->direction[w][filt]);
2075
#endif
2076
6.84k
                tns->coef_compress[w][filt] = faad_get1bit(ld
2077
6.84k
                    DEBUGVAR(1,79,"tns_data(): coef_compress"));
2078
#if 0
2079
                printf("%d\n", tns->coef_compress[w][filt]);
2080
#endif
2081
2082
6.84k
                coef_bits = start_coef_bits - tns->coef_compress[w][filt];
2083
37.7k
                for (i = 0; i < tns->order[w][filt]; i++)
2084
30.8k
                {
2085
30.8k
                    tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits
2086
30.8k
                        DEBUGVAR(1,80,"tns_data(): coef"));
2087
#if 0
2088
                    printf("%d\n", tns->coef[w][filt][i]);
2089
#endif
2090
30.8k
                }
2091
6.84k
            }
2092
13.2k
        }
2093
24.7k
    }
2094
17.1k
}
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
168k
{
2164
168k
    int8_t i;
2165
168k
    uint8_t g;
2166
168k
    uint16_t inc, k, p = 0;
2167
168k
    uint8_t groups = 0;
2168
168k
    uint8_t sect_cb;
2169
168k
    uint8_t result;
2170
168k
    uint16_t nshort = hDecoder->frameLength/8;
2171
2172
#ifdef PROFILE
2173
    int64_t count = faad_get_ts();
2174
#endif
2175
2176
427k
    for(g = 0; g < ics->num_window_groups; g++)
2177
258k
    {
2178
258k
        p = groups*nshort;
2179
2180
301k
        for (i = 0; i < ics->num_sec[g]; i++)
2181
42.7k
        {
2182
42.7k
            sect_cb = ics->sect_cb[g][i];
2183
2184
42.7k
            inc = (sect_cb >= FIRST_PAIR_HCB) ? 2 : 4;
2185
2186
42.7k
            switch (sect_cb)
2187
42.7k
            {
2188
15.6k
            case ZERO_HCB:
2189
15.6k
            case NOISE_HCB:
2190
16.4k
            case INTENSITY_HCB:
2191
16.7k
            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
16.7k
                p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] -
2207
16.7k
                    ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2208
16.7k
                break;
2209
25.9k
            default:
2210
#ifdef SFBO_PRINT
2211
                printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]);
2212
#endif
2213
25.9k
                for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]];
2214
272k
                     k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += inc)
2215
246k
                {
2216
246k
                    if ((result = huffman_spectral_data(sect_cb, ld, &spectral_data[p])) > 0)
2217
50
                        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
246k
                    p += inc;
2228
246k
                }
2229
25.9k
                break;
2230
42.7k
            }
2231
42.7k
        }
2232
258k
        groups += ics->window_group_length[g];
2233
258k
    }
2234
2235
#ifdef PROFILE
2236
    count = faad_get_ts() - count;
2237
    hDecoder->spectral_cycles += count;
2238
#endif
2239
2240
168k
    return 0;
2241
168k
}
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
109
{
2407
109
    uint8_t i;
2408
2409
    /* adif_id[0] = */ faad_getbits(ld, 8
2410
109
        DEBUGVAR(1,106,"get_adif_header(): adif_id[0]"));
2411
109
    /* adif_id[1] = */ faad_getbits(ld, 8
2412
109
        DEBUGVAR(1,107,"get_adif_header(): adif_id[1]"));
2413
109
    /* adif_id[2] = */ faad_getbits(ld, 8
2414
109
        DEBUGVAR(1,108,"get_adif_header(): adif_id[2]"));
2415
109
    /* adif_id[3] = */ faad_getbits(ld, 8
2416
109
        DEBUGVAR(1,109,"get_adif_header(): adif_id[3]"));
2417
109
    adif->copyright_id_present = faad_get1bit(ld
2418
109
        DEBUGVAR(1,110,"get_adif_header(): copyright_id_present"));
2419
109
    if(adif->copyright_id_present)
2420
8
    {
2421
80
        for (i = 0; i < 72/8; i++)
2422
72
        {
2423
72
            adif->copyright_id[i] = (int8_t)faad_getbits(ld, 8
2424
72
                DEBUGVAR(1,111,"get_adif_header(): copyright_id"));
2425
72
        }
2426
8
        adif->copyright_id[i] = 0;
2427
8
    }
2428
109
    adif->original_copy  = faad_get1bit(ld
2429
109
        DEBUGVAR(1,112,"get_adif_header(): original_copy"));
2430
109
    adif->home = faad_get1bit(ld
2431
109
        DEBUGVAR(1,113,"get_adif_header(): home"));
2432
109
    adif->bitstream_type = faad_get1bit(ld
2433
109
        DEBUGVAR(1,114,"get_adif_header(): bitstream_type"));
2434
109
    adif->bitrate = faad_getbits(ld, 23
2435
109
        DEBUGVAR(1,115,"get_adif_header(): bitrate"));
2436
109
    adif->num_program_config_elements = (uint8_t)faad_getbits(ld, 4
2437
109
        DEBUGVAR(1,116,"get_adif_header(): num_program_config_elements"));
2438
2439
1.37k
    for (i = 0; i < adif->num_program_config_elements + 1; i++)
2440
1.26k
    {
2441
1.26k
        if(adif->bitstream_type == 0)
2442
347
        {
2443
347
            adif->adif_buffer_fullness = faad_getbits(ld, 20
2444
347
                DEBUGVAR(1,117,"get_adif_header(): adif_buffer_fullness"));
2445
917
        } else {
2446
917
            adif->adif_buffer_fullness = 0;
2447
917
        }
2448
2449
1.26k
        program_config_element(&adif->pce[i], ld);
2450
1.26k
    }
2451
109
}
2452
2453
/* Table 1.A.5 */
2454
uint8_t adts_frame(adts_header *adts, bitfile *ld)
2455
5.72k
{
2456
    /* faad_byte_align(ld); */
2457
5.72k
    if (adts_fixed_header(adts, ld))
2458
5.54k
        return 5;
2459
183
    adts_variable_header(adts, ld);
2460
183
    adts_error_check(adts, ld);
2461
2462
183
    return 0;
2463
5.72k
}
2464
2465
/* Table 1.A.6 */
2466
static uint8_t adts_fixed_header(adts_header *adts, bitfile *ld)
2467
5.72k
{
2468
5.72k
    uint16_t i;
2469
5.72k
    uint8_t sync_err = 1;
2470
2471
    /* try to recover from sync errors */
2472
4.26M
    for (i = 0; i < 768; i++)
2473
4.26M
    {
2474
4.26M
        adts->syncword = (uint16_t)faad_showbits(ld, 12);
2475
4.26M
        if (adts->syncword != 0xFFF)
2476
4.26M
        {
2477
4.26M
            faad_getbits(ld, 8
2478
4.26M
                DEBUGVAR(0,0,""));
2479
4.26M
        } else {
2480
183
            sync_err = 0;
2481
183
            faad_getbits(ld, 12
2482
183
                DEBUGVAR(1,118,"adts_fixed_header(): syncword"));
2483
183
            break;
2484
183
        }
2485
4.26M
    }
2486
5.72k
    if (sync_err)
2487
5.54k
        return 5;
2488
2489
183
    adts->id = faad_get1bit(ld
2490
183
        DEBUGVAR(1,119,"adts_fixed_header(): id"));
2491
183
    adts->layer = (uint8_t)faad_getbits(ld, 2
2492
183
        DEBUGVAR(1,120,"adts_fixed_header(): layer"));
2493
183
    adts->protection_absent = faad_get1bit(ld
2494
183
        DEBUGVAR(1,121,"adts_fixed_header(): protection_absent"));
2495
183
    adts->profile = (uint8_t)faad_getbits(ld, 2
2496
183
        DEBUGVAR(1,122,"adts_fixed_header(): profile"));
2497
183
    adts->sf_index = (uint8_t)faad_getbits(ld, 4
2498
183
        DEBUGVAR(1,123,"adts_fixed_header(): sf_index"));
2499
183
    adts->private_bit = faad_get1bit(ld
2500
183
        DEBUGVAR(1,124,"adts_fixed_header(): private_bit"));
2501
183
    adts->channel_configuration = (uint8_t)faad_getbits(ld, 3
2502
183
        DEBUGVAR(1,125,"adts_fixed_header(): channel_configuration"));
2503
183
    adts->original = faad_get1bit(ld
2504
183
        DEBUGVAR(1,126,"adts_fixed_header(): original"));
2505
183
    adts->home = faad_get1bit(ld
2506
183
        DEBUGVAR(1,127,"adts_fixed_header(): home"));
2507
2508
183
    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
183
    return 0;
2519
5.72k
}
2520
2521
/* Table 1.A.7 */
2522
static void adts_variable_header(adts_header *adts, bitfile *ld)
2523
183
{
2524
183
    adts->copyright_identification_bit = faad_get1bit(ld
2525
183
        DEBUGVAR(1,129,"adts_variable_header(): copyright_identification_bit"));
2526
183
    adts->copyright_identification_start = faad_get1bit(ld
2527
183
        DEBUGVAR(1,130,"adts_variable_header(): copyright_identification_start"));
2528
183
    adts->aac_frame_length = (uint16_t)faad_getbits(ld, 13
2529
183
        DEBUGVAR(1,131,"adts_variable_header(): aac_frame_length"));
2530
183
    adts->adts_buffer_fullness = (uint16_t)faad_getbits(ld, 11
2531
183
        DEBUGVAR(1,132,"adts_variable_header(): adts_buffer_fullness"));
2532
183
    adts->no_raw_data_blocks_in_frame = (uint8_t)faad_getbits(ld, 2
2533
183
        DEBUGVAR(1,133,"adts_variable_header(): no_raw_data_blocks_in_frame"));
2534
183
}
2535
2536
/* Table 1.A.8 */
2537
static void adts_error_check(adts_header *adts, bitfile *ld)
2538
183
{
2539
183
    if (adts->protection_absent == 0)
2540
61
    {
2541
61
        adts->crc_check = (uint16_t)faad_getbits(ld, 16
2542
61
            DEBUGVAR(1,134,"adts_error_check(): crc_check"));
2543
61
    }
2544
183
}
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