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