Coverage Report

Created: 2026-07-24 06:21

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