Coverage Report

Created: 2026-09-14 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/specrec.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: specrec.c,v 1.63 2010/06/04 20:47:56 menno Exp $
29
**/
30
31
/*
32
  Spectral reconstruction:
33
   - grouping/sectioning
34
   - inverse quantization
35
   - applying scalefactors
36
*/
37
38
#include "common.h"
39
#include "structs.h"
40
41
#include <stdlib.h>
42
#include "specrec.h"
43
#include "filtbank.h"
44
#include "syntax.h"
45
#include "iq_table.h"
46
#include "ms.h"
47
#include "is.h"
48
#include "pns.h"
49
#include "tns.h"
50
#include "drc.h"
51
#include "lt_predict.h"
52
#include "ic_predict.h"
53
#ifdef SSR_DEC
54
#include "ssr.h"
55
#include "ssr_fb.h"
56
#endif
57
58
59
/* static function declarations */
60
static uint8_t quant_to_spec(NeAACDecStruct *hDecoder,
61
                             ic_stream *ics, int16_t *quant_data,
62
                             real_t *spec_data, uint16_t frame_len);
63
64
65
#ifdef LD_DEC
66
ALIGN static const uint8_t num_swb_512_window[] =
67
{
68
    0, 0, 0, 36, 36, 37, 31, 31, 0, 0, 0, 0
69
};
70
ALIGN static const uint8_t num_swb_480_window[] =
71
{
72
    0, 0, 0, 35, 35, 37, 30, 30, 0, 0, 0, 0
73
};
74
#endif
75
76
ALIGN static const uint8_t num_swb_960_window[] =
77
{
78
    40, 40, 45, 49, 49, 49, 46, 46, 42, 42, 42, 40
79
};
80
81
ALIGN static const uint8_t num_swb_1024_window[] =
82
{
83
    41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40
84
};
85
86
ALIGN static const uint8_t num_swb_128_window[] =
87
{
88
    12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15
89
};
90
91
ALIGN static const uint16_t swb_offset_1024_96[] =
92
{
93
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56,
94
    64, 72, 80, 88, 96, 108, 120, 132, 144, 156, 172, 188, 212, 240,
95
    276, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024
96
};
97
98
ALIGN static const uint16_t swb_offset_128_96[] =
99
{
100
    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
101
};
102
103
ALIGN static const uint16_t swb_offset_1024_64[] =
104
{
105
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56,
106
    64, 72, 80, 88, 100, 112, 124, 140, 156, 172, 192, 216, 240, 268,
107
    304, 344, 384, 424, 464, 504, 544, 584, 624, 664, 704, 744, 784, 824,
108
    864, 904, 944, 984, 1024
109
};
110
111
ALIGN static const uint16_t swb_offset_128_64[] =
112
{
113
    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
114
};
115
116
ALIGN static const uint16_t swb_offset_1024_48[] =
117
{
118
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72,
119
    80, 88, 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292,
120
    320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736,
121
    768, 800, 832, 864, 896, 928, 1024
122
};
123
124
#ifdef LD_DEC
125
ALIGN static const uint16_t swb_offset_512_48[] =
126
{
127
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 68, 76, 84,
128
    92, 100, 112, 124, 136, 148, 164, 184, 208, 236, 268, 300, 332, 364, 396,
129
    428, 460, 512
130
};
131
132
ALIGN static const uint16_t swb_offset_480_48[] =
133
{
134
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72 ,80 ,88,
135
    96, 108, 120, 132, 144, 156, 172, 188, 212, 240, 272, 304, 336, 368, 400,
136
    432, 480
137
};
138
#endif
139
140
ALIGN static const uint16_t swb_offset_128_48[] =
141
{
142
    0, 4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 128
143
};
144
145
ALIGN static const uint16_t swb_offset_1024_32[] =
146
{
147
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72,
148
    80, 88, 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292,
149
    320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736,
150
    768, 800, 832, 864, 896, 928, 960, 992, 1024
151
};
152
153
#ifdef LD_DEC
154
ALIGN static const uint16_t swb_offset_512_32[] =
155
{
156
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72, 80,
157
    88, 96, 108, 120, 132, 144, 160, 176, 192, 212, 236, 260, 288, 320, 352,
158
    384, 416, 448, 480, 512
159
};
160
161
ALIGN static const uint16_t swb_offset_480_32[] =
162
{
163
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80,
164
    88, 96, 104, 112, 124, 136, 148, 164, 180, 200, 224, 256, 288, 320, 352,
165
    384, 416, 448, 480
166
};
167
#endif
168
169
ALIGN static const uint16_t swb_offset_1024_24[] =
170
{
171
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68,
172
    76, 84, 92, 100, 108, 116, 124, 136, 148, 160, 172, 188, 204, 220,
173
    240, 260, 284, 308, 336, 364, 396, 432, 468, 508, 552, 600, 652, 704,
174
    768, 832, 896, 960, 1024
175
};
176
177
#ifdef LD_DEC
178
ALIGN static const uint16_t swb_offset_512_24[] =
179
{
180
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68,
181
    80, 92, 104, 120, 140, 164, 192, 224, 256, 288, 320, 352, 384, 416,
182
    448, 480, 512
183
};
184
185
ALIGN static const uint16_t swb_offset_480_24[] =
186
{
187
    0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68, 80, 92, 104, 120,
188
    140, 164, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480
189
};
190
#endif
191
192
ALIGN static const uint16_t swb_offset_128_24[] =
193
{
194
    0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 128
195
};
196
197
ALIGN static const uint16_t swb_offset_1024_16[] =
198
{
199
    0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 100, 112, 124,
200
    136, 148, 160, 172, 184, 196, 212, 228, 244, 260, 280, 300, 320, 344,
201
    368, 396, 424, 456, 492, 532, 572, 616, 664, 716, 772, 832, 896, 960, 1024
202
};
203
204
ALIGN static const uint16_t swb_offset_128_16[] =
205
{
206
    0, 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 128
207
};
208
209
ALIGN static const uint16_t swb_offset_1024_8[] =
210
{
211
    0, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 172,
212
    188, 204, 220, 236, 252, 268, 288, 308, 328, 348, 372, 396, 420, 448,
213
    476, 508, 544, 580, 620, 664, 712, 764, 820, 880, 944, 1024
214
};
215
216
ALIGN static const uint16_t swb_offset_128_8[] =
217
{
218
    0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 128
219
};
220
221
ALIGN static const uint16_t *swb_offset_1024_window[] =
222
{
223
    swb_offset_1024_96,      /* 96000 */
224
    swb_offset_1024_96,      /* 88200 */
225
    swb_offset_1024_64,      /* 64000 */
226
    swb_offset_1024_48,      /* 48000 */
227
    swb_offset_1024_48,      /* 44100 */
228
    swb_offset_1024_32,      /* 32000 */
229
    swb_offset_1024_24,      /* 24000 */
230
    swb_offset_1024_24,      /* 22050 */
231
    swb_offset_1024_16,      /* 16000 */
232
    swb_offset_1024_16,      /* 12000 */
233
    swb_offset_1024_16,      /* 11025 */
234
    swb_offset_1024_8        /* 8000  */
235
};
236
237
#ifdef LD_DEC
238
ALIGN static const uint16_t *swb_offset_512_window[] =
239
{
240
    0,                       /* 96000 */
241
    0,                       /* 88200 */
242
    0,                       /* 64000 */
243
    swb_offset_512_48,       /* 48000 */
244
    swb_offset_512_48,       /* 44100 */
245
    swb_offset_512_32,       /* 32000 */
246
    swb_offset_512_24,       /* 24000 */
247
    swb_offset_512_24,       /* 22050 */
248
    0,                       /* 16000 */
249
    0,                       /* 12000 */
250
    0,                       /* 11025 */
251
    0                        /* 8000  */
252
};
253
254
ALIGN static const uint16_t *swb_offset_480_window[] =
255
{
256
    0,                       /* 96000 */
257
    0,                       /* 88200 */
258
    0,                       /* 64000 */
259
    swb_offset_480_48,       /* 48000 */
260
    swb_offset_480_48,       /* 44100 */
261
    swb_offset_480_32,       /* 32000 */
262
    swb_offset_480_24,       /* 24000 */
263
    swb_offset_480_24,       /* 22050 */
264
    0,                       /* 16000 */
265
    0,                       /* 12000 */
266
    0,                       /* 11025 */
267
    0                        /* 8000  */
268
};
269
#endif
270
271
ALIGN static const  uint16_t *swb_offset_128_window[] =
272
{
273
    swb_offset_128_96,       /* 96000 */
274
    swb_offset_128_96,       /* 88200 */
275
    swb_offset_128_64,       /* 64000 */
276
    swb_offset_128_48,       /* 48000 */
277
    swb_offset_128_48,       /* 44100 */
278
    swb_offset_128_48,       /* 32000 */
279
    swb_offset_128_24,       /* 24000 */
280
    swb_offset_128_24,       /* 22050 */
281
    swb_offset_128_16,       /* 16000 */
282
    swb_offset_128_16,       /* 12000 */
283
    swb_offset_128_16,       /* 11025 */
284
    swb_offset_128_8         /* 8000  */
285
};
286
287
502k
#define bit_set(A, B) ((A) & (1<<(B)))
288
289
/* 4.5.2.3.4 */
290
/*
291
  - determine the number of windows in a window_sequence named num_windows
292
  - determine the number of window_groups named num_window_groups
293
  - determine the number of windows in each group named window_group_length[g]
294
  - determine the total number of scalefactor window bands named num_swb for
295
    the actual window type
296
  - determine swb_offset[swb], the offset of the first coefficient in
297
    scalefactor window band named swb of the window actually used
298
  - determine sect_sfb_offset[g][section],the offset of the first coefficient
299
    in section named section. This offset depends on window_sequence and
300
    scale_factor_grouping and is needed to decode the spectral_data().
301
*/
302
uint8_t window_grouping_info(NeAACDecStruct *hDecoder, ic_stream *ics)
303
663k
{
304
663k
    uint8_t i, g;
305
306
663k
    uint8_t sf_index = hDecoder->sf_index;
307
308
663k
    if (sf_index >= 12)
309
9
        return 32;
310
311
663k
    switch (ics->window_sequence) {
312
542k
    case ONLY_LONG_SEQUENCE:
313
577k
    case LONG_START_SEQUENCE:
314
591k
    case LONG_STOP_SEQUENCE:
315
591k
        ics->num_windows = 1;
316
591k
        ics->num_window_groups = 1;
317
591k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
#ifdef LD_DEC
319
333k
        if (hDecoder->object_type == LD)
320
3.64k
        {
321
3.64k
            if (hDecoder->frameLength == 512)
322
1.72k
                ics->num_swb = num_swb_512_window[sf_index];
323
1.91k
            else /* if (hDecoder->frameLength == 480) */
324
1.91k
                ics->num_swb = num_swb_480_window[sf_index];
325
329k
        } else {
326
329k
#endif
327
587k
            if (hDecoder->frameLength == 1024)
328
477k
                ics->num_swb = num_swb_1024_window[sf_index];
329
109k
            else /* if (hDecoder->frameLength == 960) */
330
109k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
591k
        if (ics->max_sfb > ics->num_swb)
336
309
        {
337
309
            return 32;
338
309
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
#ifdef LD_DEC
343
332k
        if (hDecoder->object_type == LD)
344
3.63k
        {
345
3.63k
            if (hDecoder->frameLength == 512)
346
1.72k
            {
347
43.0k
                for (i = 0; i < ics->num_swb; i++)
348
41.3k
                {
349
41.3k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
41.3k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
41.3k
                }
352
1.90k
            } else /* if (hDecoder->frameLength == 480) */ {
353
58.1k
                for (i = 0; i < ics->num_swb; i++)
354
56.2k
                {
355
56.2k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
56.2k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
56.2k
                }
358
1.90k
            }
359
3.63k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
3.63k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
3.63k
            ics->swb_offset_max = hDecoder->frameLength;
362
329k
        } else {
363
329k
#endif
364
25.5M
            for (i = 0; i < ics->num_swb; i++)
365
24.9M
            {
366
24.9M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
24.9M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
24.9M
            }
369
258k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
258k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
258k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
591k
        if (ics->num_swb > 0 && ics->swb_offset[ics->num_swb] < ics->swb_offset[ics->num_swb-1]) {
376
0
            return 32;
377
0
        }
378
591k
        return 0;
379
71.7k
    case EIGHT_SHORT_SEQUENCE:
380
71.7k
        ics->num_windows = 8;
381
71.7k
        ics->num_window_groups = 1;
382
71.7k
        ics->window_group_length[ics->num_window_groups-1] = 1;
383
71.7k
        ics->num_swb = num_swb_128_window[sf_index];
384
385
71.7k
        if (ics->max_sfb > ics->num_swb)
386
26
        {
387
26
            return 32;
388
26
        }
389
390
1.05M
        for (i = 0; i < ics->num_swb; i++)
391
987k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
392
71.7k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
393
71.7k
        ics->swb_offset_max = hDecoder->frameLength/8;
394
395
573k
        for (i = 0; i < ics->num_windows-1; i++) {
396
502k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
397
403k
            {
398
403k
                ics->num_window_groups += 1;
399
403k
                ics->window_group_length[ics->num_window_groups-1] = 1;
400
403k
            } else {
401
98.1k
                ics->window_group_length[ics->num_window_groups-1] += 1;
402
98.1k
            }
403
502k
        }
404
405
        /* preparation of sect_sfb_offset for short blocks */
406
547k
        for (g = 0; g < ics->num_window_groups; g++)
407
475k
        {
408
475k
            uint16_t width;
409
475k
            uint8_t sect_sfb = 0;
410
475k
            uint16_t offset = 0;
411
412
7.01M
            for (i = 0; i < ics->num_swb; i++)
413
6.53M
            {
414
6.53M
                if (i+1 == ics->num_swb)
415
475k
                {
416
475k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
417
6.05M
                } else {
418
6.05M
                    width = swb_offset_128_window[sf_index][i+1] -
419
6.05M
                        swb_offset_128_window[sf_index][i];
420
6.05M
                }
421
6.53M
                width *= ics->window_group_length[g];
422
6.53M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
423
6.53M
                offset += width;
424
6.53M
            }
425
475k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
426
475k
        }
427
71.7k
        return 0;
428
0
    default:
429
0
        return 32;
430
663k
    }
431
663k
}
window_grouping_info
Line
Count
Source
303
289k
{
304
289k
    uint8_t i, g;
305
306
289k
    uint8_t sf_index = hDecoder->sf_index;
307
308
289k
    if (sf_index >= 12)
309
6
        return 32;
310
311
289k
    switch (ics->window_sequence) {
312
241k
    case ONLY_LONG_SEQUENCE:
313
251k
    case LONG_START_SEQUENCE:
314
258k
    case LONG_STOP_SEQUENCE:
315
258k
        ics->num_windows = 1;
316
258k
        ics->num_window_groups = 1;
317
258k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
#ifdef LD_DEC
319
        if (hDecoder->object_type == LD)
320
        {
321
            if (hDecoder->frameLength == 512)
322
                ics->num_swb = num_swb_512_window[sf_index];
323
            else /* if (hDecoder->frameLength == 480) */
324
                ics->num_swb = num_swb_480_window[sf_index];
325
        } else {
326
#endif
327
258k
            if (hDecoder->frameLength == 1024)
328
211k
                ics->num_swb = num_swb_1024_window[sf_index];
329
46.9k
            else /* if (hDecoder->frameLength == 960) */
330
46.9k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
258k
        if (ics->max_sfb > ics->num_swb)
336
132
        {
337
132
            return 32;
338
132
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
#ifdef LD_DEC
343
        if (hDecoder->object_type == LD)
344
        {
345
            if (hDecoder->frameLength == 512)
346
            {
347
                for (i = 0; i < ics->num_swb; i++)
348
                {
349
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
                }
352
            } else /* if (hDecoder->frameLength == 480) */ {
353
                for (i = 0; i < ics->num_swb; i++)
354
                {
355
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
                }
358
            }
359
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
            ics->swb_offset_max = hDecoder->frameLength;
362
        } else {
363
#endif
364
11.3M
            for (i = 0; i < ics->num_swb; i++)
365
11.0M
            {
366
11.0M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
11.0M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
11.0M
            }
369
258k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
258k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
258k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
258k
        if (ics->num_swb > 0 && ics->swb_offset[ics->num_swb] < ics->swb_offset[ics->num_swb-1]) {
376
0
            return 32;
377
0
        }
378
258k
        return 0;
379
30.7k
    case EIGHT_SHORT_SEQUENCE:
380
30.7k
        ics->num_windows = 8;
381
30.7k
        ics->num_window_groups = 1;
382
30.7k
        ics->window_group_length[ics->num_window_groups-1] = 1;
383
30.7k
        ics->num_swb = num_swb_128_window[sf_index];
384
385
30.7k
        if (ics->max_sfb > ics->num_swb)
386
11
        {
387
11
            return 32;
388
11
        }
389
390
458k
        for (i = 0; i < ics->num_swb; i++)
391
428k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
392
30.7k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
393
30.7k
        ics->swb_offset_max = hDecoder->frameLength/8;
394
395
246k
        for (i = 0; i < ics->num_windows-1; i++) {
396
215k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
397
170k
            {
398
170k
                ics->num_window_groups += 1;
399
170k
                ics->window_group_length[ics->num_window_groups-1] = 1;
400
170k
            } else {
401
44.8k
                ics->window_group_length[ics->num_window_groups-1] += 1;
402
44.8k
            }
403
215k
        }
404
405
        /* preparation of sect_sfb_offset for short blocks */
406
232k
        for (g = 0; g < ics->num_window_groups; g++)
407
201k
        {
408
201k
            uint16_t width;
409
201k
            uint8_t sect_sfb = 0;
410
201k
            uint16_t offset = 0;
411
412
2.99M
            for (i = 0; i < ics->num_swb; i++)
413
2.79M
            {
414
2.79M
                if (i+1 == ics->num_swb)
415
201k
                {
416
201k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
417
2.59M
                } else {
418
2.59M
                    width = swb_offset_128_window[sf_index][i+1] -
419
2.59M
                        swb_offset_128_window[sf_index][i];
420
2.59M
                }
421
2.79M
                width *= ics->window_group_length[g];
422
2.79M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
423
2.79M
                offset += width;
424
2.79M
            }
425
201k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
426
201k
        }
427
30.7k
        return 0;
428
0
    default:
429
0
        return 32;
430
289k
    }
431
289k
}
window_grouping_info
Line
Count
Source
303
374k
{
304
374k
    uint8_t i, g;
305
306
374k
    uint8_t sf_index = hDecoder->sf_index;
307
308
374k
    if (sf_index >= 12)
309
3
        return 32;
310
311
374k
    switch (ics->window_sequence) {
312
300k
    case ONLY_LONG_SEQUENCE:
313
325k
    case LONG_START_SEQUENCE:
314
333k
    case LONG_STOP_SEQUENCE:
315
333k
        ics->num_windows = 1;
316
333k
        ics->num_window_groups = 1;
317
333k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
333k
#ifdef LD_DEC
319
333k
        if (hDecoder->object_type == LD)
320
3.64k
        {
321
3.64k
            if (hDecoder->frameLength == 512)
322
1.72k
                ics->num_swb = num_swb_512_window[sf_index];
323
1.91k
            else /* if (hDecoder->frameLength == 480) */
324
1.91k
                ics->num_swb = num_swb_480_window[sf_index];
325
329k
        } else {
326
329k
#endif
327
329k
            if (hDecoder->frameLength == 1024)
328
266k
                ics->num_swb = num_swb_1024_window[sf_index];
329
63.0k
            else /* if (hDecoder->frameLength == 960) */
330
63.0k
                ics->num_swb = num_swb_960_window[sf_index];
331
329k
#ifdef LD_DEC
332
329k
        }
333
333k
#endif
334
335
333k
        if (ics->max_sfb > ics->num_swb)
336
177
        {
337
177
            return 32;
338
177
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
332k
#ifdef LD_DEC
343
332k
        if (hDecoder->object_type == LD)
344
3.63k
        {
345
3.63k
            if (hDecoder->frameLength == 512)
346
1.72k
            {
347
43.0k
                for (i = 0; i < ics->num_swb; i++)
348
41.3k
                {
349
41.3k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
41.3k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
41.3k
                }
352
1.90k
            } else /* if (hDecoder->frameLength == 480) */ {
353
58.1k
                for (i = 0; i < ics->num_swb; i++)
354
56.2k
                {
355
56.2k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
56.2k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
56.2k
                }
358
1.90k
            }
359
3.63k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
3.63k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
3.63k
            ics->swb_offset_max = hDecoder->frameLength;
362
329k
        } else {
363
329k
#endif
364
14.2M
            for (i = 0; i < ics->num_swb; i++)
365
13.8M
            {
366
13.8M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
13.8M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
13.8M
            }
369
329k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
329k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
329k
            ics->swb_offset_max = hDecoder->frameLength;
372
329k
#ifdef LD_DEC
373
329k
        }
374
332k
#endif
375
332k
        if (ics->num_swb > 0 && ics->swb_offset[ics->num_swb] < ics->swb_offset[ics->num_swb-1]) {
376
0
            return 32;
377
0
        }
378
332k
        return 0;
379
40.9k
    case EIGHT_SHORT_SEQUENCE:
380
40.9k
        ics->num_windows = 8;
381
40.9k
        ics->num_window_groups = 1;
382
40.9k
        ics->window_group_length[ics->num_window_groups-1] = 1;
383
40.9k
        ics->num_swb = num_swb_128_window[sf_index];
384
385
40.9k
        if (ics->max_sfb > ics->num_swb)
386
15
        {
387
15
            return 32;
388
15
        }
389
390
600k
        for (i = 0; i < ics->num_swb; i++)
391
559k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
392
40.9k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
393
40.9k
        ics->swb_offset_max = hDecoder->frameLength/8;
394
395
327k
        for (i = 0; i < ics->num_windows-1; i++) {
396
286k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
397
233k
            {
398
233k
                ics->num_window_groups += 1;
399
233k
                ics->window_group_length[ics->num_window_groups-1] = 1;
400
233k
            } else {
401
53.2k
                ics->window_group_length[ics->num_window_groups-1] += 1;
402
53.2k
            }
403
286k
        }
404
405
        /* preparation of sect_sfb_offset for short blocks */
406
315k
        for (g = 0; g < ics->num_window_groups; g++)
407
274k
        {
408
274k
            uint16_t width;
409
274k
            uint8_t sect_sfb = 0;
410
274k
            uint16_t offset = 0;
411
412
4.01M
            for (i = 0; i < ics->num_swb; i++)
413
3.73M
            {
414
3.73M
                if (i+1 == ics->num_swb)
415
274k
                {
416
274k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
417
3.46M
                } else {
418
3.46M
                    width = swb_offset_128_window[sf_index][i+1] -
419
3.46M
                        swb_offset_128_window[sf_index][i];
420
3.46M
                }
421
3.73M
                width *= ics->window_group_length[g];
422
3.73M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
423
3.73M
                offset += width;
424
3.73M
            }
425
274k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
426
274k
        }
427
40.9k
        return 0;
428
0
    default:
429
0
        return 32;
430
374k
    }
431
374k
}
432
433
/* iquant() * output = sign(input)*abs(input)^(4/3) */
434
static INLINE real_t iquant(int16_t q, const real_t *tab, uint8_t *error)
435
707M
{
436
#ifdef FIXED_POINT
437
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
438
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
439
 * defined a 1026 value table and interpolation will be used
440
 */
441
#ifndef BIG_IQ_TABLE
442
    static const real_t errcorr[] = {
443
286M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
444
286M
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
445
286M
        REAL_CONST(0)
446
    };
447
    real_t x1, x2;
448
#endif
449
    int16_t sgn = 1;
450
    /* compute the magnitude in int: -q is evaluated as int and so does not
451
       wrap for q == -32768 the way an int16_t negation would, which keeps the
452
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
453
    int aq = q;
454
455
286M
    if (aq < 0)
456
169k
    {
457
169k
        aq = -aq;
458
169k
        sgn = -1;
459
169k
    }
460
461
286M
    if (aq < IQ_TABLE_SIZE)
462
286M
    {
463
//#define IQUANT_PRINT
464
#ifdef IQUANT_PRINT
465
        //printf("0x%.8X\n", sgn * tab[aq]);
466
        printf("%d\n", sgn * tab[aq]);
467
#endif
468
286M
        return sgn * tab[aq];
469
286M
    }
470
471
2.69k
#ifndef BIG_IQ_TABLE
472
2.69k
    if (aq >= 8192)
473
1.04k
    {
474
1.04k
        *error = 17;
475
1.04k
        return 0;
476
1.04k
    }
477
478
    /* linear interpolation */
479
1.64k
    x1 = tab[aq>>3];
480
1.64k
    x2 = tab[(aq>>3) + 1];
481
1.64k
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
482
#else
483
    *error = 17;
484
    return 0;
485
#endif
486
487
#else
488
420M
    if (q < 0)
489
158k
    {
490
        /* tab contains a value for all possible q [0,8192] */
491
158k
        if (-q < IQ_TABLE_SIZE)
492
156k
            return -tab[-q];
493
494
1.73k
        *error = 17;
495
1.73k
        return 0;
496
420M
    } else {
497
        /* tab contains a value for all possible q [0,8192] */
498
420M
        if (q < IQ_TABLE_SIZE)
499
420M
            return tab[q];
500
501
1.34k
        *error = 17;
502
1.34k
        return 0;
503
420M
    }
504
#endif
505
2.69k
}
specrec.c:iquant
Line
Count
Source
435
286M
{
436
286M
#ifdef FIXED_POINT
437
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
438
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
439
 * defined a 1026 value table and interpolation will be used
440
 */
441
286M
#ifndef BIG_IQ_TABLE
442
286M
    static const real_t errcorr[] = {
443
286M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
444
286M
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
445
286M
        REAL_CONST(0)
446
286M
    };
447
286M
    real_t x1, x2;
448
286M
#endif
449
286M
    int16_t sgn = 1;
450
    /* compute the magnitude in int: -q is evaluated as int and so does not
451
       wrap for q == -32768 the way an int16_t negation would, which keeps the
452
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
453
286M
    int aq = q;
454
455
286M
    if (aq < 0)
456
169k
    {
457
169k
        aq = -aq;
458
169k
        sgn = -1;
459
169k
    }
460
461
286M
    if (aq < IQ_TABLE_SIZE)
462
286M
    {
463
//#define IQUANT_PRINT
464
#ifdef IQUANT_PRINT
465
        //printf("0x%.8X\n", sgn * tab[aq]);
466
        printf("%d\n", sgn * tab[aq]);
467
#endif
468
286M
        return sgn * tab[aq];
469
286M
    }
470
471
2.69k
#ifndef BIG_IQ_TABLE
472
2.69k
    if (aq >= 8192)
473
1.04k
    {
474
1.04k
        *error = 17;
475
1.04k
        return 0;
476
1.04k
    }
477
478
    /* linear interpolation */
479
1.64k
    x1 = tab[aq>>3];
480
1.64k
    x2 = tab[(aq>>3) + 1];
481
1.64k
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
482
#else
483
    *error = 17;
484
    return 0;
485
#endif
486
487
#else
488
    if (q < 0)
489
    {
490
        /* tab contains a value for all possible q [0,8192] */
491
        if (-q < IQ_TABLE_SIZE)
492
            return -tab[-q];
493
494
        *error = 17;
495
        return 0;
496
    } else {
497
        /* tab contains a value for all possible q [0,8192] */
498
        if (q < IQ_TABLE_SIZE)
499
            return tab[q];
500
501
        *error = 17;
502
        return 0;
503
    }
504
#endif
505
2.69k
}
specrec.c:iquant
Line
Count
Source
435
420M
{
436
#ifdef FIXED_POINT
437
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
438
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
439
 * defined a 1026 value table and interpolation will be used
440
 */
441
#ifndef BIG_IQ_TABLE
442
    static const real_t errcorr[] = {
443
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
444
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
445
        REAL_CONST(0)
446
    };
447
    real_t x1, x2;
448
#endif
449
    int16_t sgn = 1;
450
    /* compute the magnitude in int: -q is evaluated as int and so does not
451
       wrap for q == -32768 the way an int16_t negation would, which keeps the
452
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
453
    int aq = q;
454
455
    if (aq < 0)
456
    {
457
        aq = -aq;
458
        sgn = -1;
459
    }
460
461
    if (aq < IQ_TABLE_SIZE)
462
    {
463
//#define IQUANT_PRINT
464
#ifdef IQUANT_PRINT
465
        //printf("0x%.8X\n", sgn * tab[aq]);
466
        printf("%d\n", sgn * tab[aq]);
467
#endif
468
        return sgn * tab[aq];
469
    }
470
471
#ifndef BIG_IQ_TABLE
472
    if (aq >= 8192)
473
    {
474
        *error = 17;
475
        return 0;
476
    }
477
478
    /* linear interpolation */
479
    x1 = tab[aq>>3];
480
    x2 = tab[(aq>>3) + 1];
481
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
482
#else
483
    *error = 17;
484
    return 0;
485
#endif
486
487
#else
488
420M
    if (q < 0)
489
158k
    {
490
        /* tab contains a value for all possible q [0,8192] */
491
158k
        if (-q < IQ_TABLE_SIZE)
492
156k
            return -tab[-q];
493
494
1.73k
        *error = 17;
495
1.73k
        return 0;
496
420M
    } else {
497
        /* tab contains a value for all possible q [0,8192] */
498
420M
        if (q < IQ_TABLE_SIZE)
499
420M
            return tab[q];
500
501
1.34k
        *error = 17;
502
1.34k
        return 0;
503
420M
    }
504
420M
#endif
505
420M
}
506
507
#ifndef FIXED_POINT
508
ALIGN static const real_t pow2sf_tab[] = {
509
    2.9802322387695313E-008, 5.9604644775390625E-008, 1.1920928955078125E-007,
510
    2.384185791015625E-007, 4.76837158203125E-007, 9.5367431640625E-007,
511
    1.9073486328125E-006, 3.814697265625E-006, 7.62939453125E-006,
512
    1.52587890625E-005, 3.0517578125E-005, 6.103515625E-005,
513
    0.0001220703125, 0.000244140625, 0.00048828125,
514
    0.0009765625, 0.001953125, 0.00390625,
515
    0.0078125, 0.015625, 0.03125,
516
    0.0625, 0.125, 0.25,
517
    0.5, 1.0, 2.0,
518
    4.0, 8.0, 16.0, 32.0,
519
    64.0, 128.0, 256.0,
520
    512.0, 1024.0, 2048.0,
521
    4096.0, 8192.0, 16384.0,
522
    32768.0, 65536.0, 131072.0,
523
    262144.0, 524288.0, 1048576.0,
524
    2097152.0, 4194304.0, 8388608.0,
525
    16777216.0, 33554432.0, 67108864.0,
526
    134217728.0, 268435456.0, 536870912.0,
527
    1073741824.0, 2147483648.0, 4294967296.0,
528
    8589934592.0, 17179869184.0, 34359738368.0,
529
    68719476736.0, 137438953472.0, 274877906944.0
530
};
531
#endif
532
533
/* quant_to_spec: perform dequantisation and scaling
534
 * and in case of short block it also does the deinterleaving
535
 */
536
/*
537
  For ONLY_LONG_SEQUENCE windows (num_window_groups = 1,
538
  window_group_length[0] = 1) the spectral data is in ascending spectral
539
  order.
540
  For the EIGHT_SHORT_SEQUENCE window, the spectral order depends on the
541
  grouping in the following manner:
542
  - Groups are ordered sequentially
543
  - Within a group, a scalefactor band consists of the spectral data of all
544
    grouped SHORT_WINDOWs for the associated scalefactor window band. To
545
    clarify via example, the length of a group is in the range of one to eight
546
    SHORT_WINDOWs.
547
  - If there are eight groups each with length one (num_window_groups = 8,
548
    window_group_length[0..7] = 1), the result is a sequence of eight spectra,
549
    each in ascending spectral order.
550
  - If there is only one group with length eight (num_window_groups = 1,
551
    window_group_length[0] = 8), the result is that spectral data of all eight
552
    SHORT_WINDOWs is interleaved by scalefactor window bands.
553
  - Within a scalefactor window band, the coefficients are in ascending
554
    spectral order.
555
*/
556
static uint8_t quant_to_spec(NeAACDecStruct *hDecoder,
557
                             ic_stream *ics, int16_t *quant_data,
558
                             real_t *spec_data, uint16_t frame_len)
559
700k
{
560
700k
    ALIGN static const real_t pow2_table[] =
561
700k
    {
562
700k
        COEF_CONST(1.0),
563
700k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
564
700k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
565
700k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
566
700k
    };
567
700k
    const real_t *tab = iq_table;
568
569
700k
    uint8_t g, sfb, win;
570
700k
    uint16_t width, bin, k, gindex;
571
700k
    uint8_t error = 0; /* Init error flag */
572
#ifndef FIXED_POINT
573
    real_t scf;
574
#else
575
    int32_t sat_shift_mask = 0;
576
#endif
577
578
700k
    k = 0;
579
700k
    gindex = 0;
580
581
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
582
     * Without peeking into AAC specification, there is no strong evidence if
583
     * such streams are invalid -> just calm down MSAN. */
584
700k
    if (ics->num_swb == 0)
585
915
        memset(spec_data, 0, frame_len * sizeof(real_t));
586
587
1.82M
    for (g = 0; g < ics->num_window_groups; g++)
588
1.12M
    {
589
1.12M
        uint16_t j = 0;
590
1.12M
        uint16_t gincrease = 0;
591
1.12M
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
592
593
34.4M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
594
33.2M
        {
595
33.2M
            int32_t exp, frac;
596
33.2M
            uint16_t wa = gindex + j;
597
33.2M
            int16_t scale_factor = ics->scale_factors[g][sfb];
598
599
33.2M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
600
33.2M
            if (width + 3 >= 1024) 
601
0
            {
602
                // quant_data contains 1024 uint16_t, the k iterator + 3
603
                // should never reach more 1024
604
0
                error = 17;
605
0
                continue;
606
0
            }
607
608
#ifdef FIXED_POINT
609
13.6M
            scale_factor -= 100;
610
            /* IMDCT pre-scaling */
611
13.6M
            if (hDecoder->object_type == LD)
612
57.3k
            {
613
57.3k
                scale_factor -= 24 /*9*/;
614
13.5M
            } else {
615
13.5M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
616
3.04M
                    scale_factor -= 16 /*7*/;
617
10.5M
                else
618
10.5M
                    scale_factor -= 28 /*10*/;
619
13.5M
            }
620
13.6M
            if (scale_factor > 120)
621
516
                scale_factor = 120;  /* => exp <= 30 */
622
#else
623
19.6M
            (void)hDecoder;
624
19.6M
#endif
625
626
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
627
33.2M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
628
83.6k
            {
629
83.6k
                scale_factor = 0;
630
83.6k
            }
631
632
            /* scale_factor must be between 0 and 255 */
633
19.6M
            exp = (scale_factor /* - 100 */) >> 2;
634
            /* frac must always be > 0 */
635
19.6M
            frac = (scale_factor /* - 100 */) & 3;
636
637
#ifndef FIXED_POINT
638
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
639
#else
640
13.6M
            if (exp > 0)
641
31.2k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
642
#endif
643
644
68.1M
            for (win = 0; win < ics->window_group_length[g]; win++)
645
34.8M
            {
646
211M
                for (bin = 0; bin < width; bin += 4)
647
176M
                {
648
176M
                    uint16_t wb = wa + bin;
649
#ifndef FIXED_POINT
650
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
651
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
652
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
653
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
654
#else
655
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
656
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
657
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
658
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
659
660
71.6M
                    if (exp == -32)
661
62.6M
                    {
662
62.6M
                        spec_data[wb+0] = 0;
663
62.6M
                        spec_data[wb+1] = 0;
664
62.6M
                        spec_data[wb+2] = 0;
665
62.6M
                        spec_data[wb+3] = 0;
666
62.6M
                    } else if (exp <= 0) {
667
8.89M
                        spec_data[wb+0] = iq0 >> -exp;
668
8.89M
                        spec_data[wb+1] = iq1 >> -exp;
669
8.89M
                        spec_data[wb+2] = iq2 >> -exp;
670
8.89M
                        spec_data[wb+3] = iq3 >> -exp;
671
8.89M
                    } else { /* exp > 0 */
672
162k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
673
162k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
674
162k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
675
162k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
676
162k
                    }
677
71.6M
                    if (frac != 0)
678
273k
                    {
679
273k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
680
273k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
681
273k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
682
273k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
683
273k
                    }
684
685
//#define SCFS_PRINT
686
#ifdef SCFS_PRINT
687
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
688
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
689
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
690
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
691
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
692
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
693
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
694
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
695
#endif
696
#endif
697
698
176M
                    gincrease += 4;
699
176M
                    k += 4;
700
176M
                }
701
34.8M
                wa += win_inc;
702
34.8M
            }
703
19.6M
            j += width;
704
19.6M
        }
705
1.12M
        gindex += gincrease;
706
1.12M
    }
707
708
700k
    return error;
709
700k
}
specrec.c:quant_to_spec
Line
Count
Source
559
284k
{
560
284k
    ALIGN static const real_t pow2_table[] =
561
284k
    {
562
284k
        COEF_CONST(1.0),
563
284k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
564
284k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
565
284k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
566
284k
    };
567
284k
    const real_t *tab = iq_table;
568
569
284k
    uint8_t g, sfb, win;
570
284k
    uint16_t width, bin, k, gindex;
571
284k
    uint8_t error = 0; /* Init error flag */
572
#ifndef FIXED_POINT
573
    real_t scf;
574
#else
575
284k
    int32_t sat_shift_mask = 0;
576
284k
#endif
577
578
284k
    k = 0;
579
284k
    gindex = 0;
580
581
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
582
     * Without peeking into AAC specification, there is no strong evidence if
583
     * such streams are invalid -> just calm down MSAN. */
584
284k
    if (ics->num_swb == 0)
585
83
        memset(spec_data, 0, frame_len * sizeof(real_t));
586
587
758k
    for (g = 0; g < ics->num_window_groups; g++)
588
474k
    {
589
474k
        uint16_t j = 0;
590
474k
        uint16_t gincrease = 0;
591
474k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
592
593
14.1M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
594
13.6M
        {
595
13.6M
            int32_t exp, frac;
596
13.6M
            uint16_t wa = gindex + j;
597
13.6M
            int16_t scale_factor = ics->scale_factors[g][sfb];
598
599
13.6M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
600
13.6M
            if (width + 3 >= 1024) 
601
0
            {
602
                // quant_data contains 1024 uint16_t, the k iterator + 3
603
                // should never reach more 1024
604
0
                error = 17;
605
0
                continue;
606
0
            }
607
608
13.6M
#ifdef FIXED_POINT
609
13.6M
            scale_factor -= 100;
610
            /* IMDCT pre-scaling */
611
13.6M
            if (hDecoder->object_type == LD)
612
57.3k
            {
613
57.3k
                scale_factor -= 24 /*9*/;
614
13.5M
            } else {
615
13.5M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
616
3.04M
                    scale_factor -= 16 /*7*/;
617
10.5M
                else
618
10.5M
                    scale_factor -= 28 /*10*/;
619
13.5M
            }
620
13.6M
            if (scale_factor > 120)
621
516
                scale_factor = 120;  /* => exp <= 30 */
622
#else
623
            (void)hDecoder;
624
#endif
625
626
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
627
13.6M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
628
41.6k
            {
629
41.6k
                scale_factor = 0;
630
41.6k
            }
631
632
            /* scale_factor must be between 0 and 255 */
633
13.6M
            exp = (scale_factor /* - 100 */) >> 2;
634
            /* frac must always be > 0 */
635
13.6M
            frac = (scale_factor /* - 100 */) & 3;
636
637
#ifndef FIXED_POINT
638
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
639
#else
640
13.6M
            if (exp > 0)
641
31.2k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
642
13.6M
#endif
643
644
27.8M
            for (win = 0; win < ics->window_group_length[g]; win++)
645
14.2M
            {
646
85.9M
                for (bin = 0; bin < width; bin += 4)
647
71.6M
                {
648
71.6M
                    uint16_t wb = wa + bin;
649
#ifndef FIXED_POINT
650
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
651
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
652
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
653
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
654
#else
655
71.6M
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
656
71.6M
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
657
71.6M
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
658
71.6M
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
659
660
71.6M
                    if (exp == -32)
661
62.6M
                    {
662
62.6M
                        spec_data[wb+0] = 0;
663
62.6M
                        spec_data[wb+1] = 0;
664
62.6M
                        spec_data[wb+2] = 0;
665
62.6M
                        spec_data[wb+3] = 0;
666
62.6M
                    } else if (exp <= 0) {
667
8.89M
                        spec_data[wb+0] = iq0 >> -exp;
668
8.89M
                        spec_data[wb+1] = iq1 >> -exp;
669
8.89M
                        spec_data[wb+2] = iq2 >> -exp;
670
8.89M
                        spec_data[wb+3] = iq3 >> -exp;
671
8.89M
                    } else { /* exp > 0 */
672
162k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
673
162k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
674
162k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
675
162k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
676
162k
                    }
677
71.6M
                    if (frac != 0)
678
273k
                    {
679
273k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
680
273k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
681
273k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
682
273k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
683
273k
                    }
684
685
//#define SCFS_PRINT
686
#ifdef SCFS_PRINT
687
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
688
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
689
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
690
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
691
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
692
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
693
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
694
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
695
#endif
696
71.6M
#endif
697
698
71.6M
                    gincrease += 4;
699
71.6M
                    k += 4;
700
71.6M
                }
701
14.2M
                wa += win_inc;
702
14.2M
            }
703
13.6M
            j += width;
704
13.6M
        }
705
474k
        gindex += gincrease;
706
474k
    }
707
708
284k
    return error;
709
284k
}
specrec.c:quant_to_spec
Line
Count
Source
559
416k
{
560
416k
    ALIGN static const real_t pow2_table[] =
561
416k
    {
562
416k
        COEF_CONST(1.0),
563
416k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
564
416k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
565
416k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
566
416k
    };
567
416k
    const real_t *tab = iq_table;
568
569
416k
    uint8_t g, sfb, win;
570
416k
    uint16_t width, bin, k, gindex;
571
416k
    uint8_t error = 0; /* Init error flag */
572
416k
#ifndef FIXED_POINT
573
416k
    real_t scf;
574
#else
575
    int32_t sat_shift_mask = 0;
576
#endif
577
578
416k
    k = 0;
579
416k
    gindex = 0;
580
581
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
582
     * Without peeking into AAC specification, there is no strong evidence if
583
     * such streams are invalid -> just calm down MSAN. */
584
416k
    if (ics->num_swb == 0)
585
832
        memset(spec_data, 0, frame_len * sizeof(real_t));
586
587
1.06M
    for (g = 0; g < ics->num_window_groups; g++)
588
649k
    {
589
649k
        uint16_t j = 0;
590
649k
        uint16_t gincrease = 0;
591
649k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
592
593
20.3M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
594
19.6M
        {
595
19.6M
            int32_t exp, frac;
596
19.6M
            uint16_t wa = gindex + j;
597
19.6M
            int16_t scale_factor = ics->scale_factors[g][sfb];
598
599
19.6M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
600
19.6M
            if (width + 3 >= 1024) 
601
0
            {
602
                // quant_data contains 1024 uint16_t, the k iterator + 3
603
                // should never reach more 1024
604
0
                error = 17;
605
0
                continue;
606
0
            }
607
608
#ifdef FIXED_POINT
609
            scale_factor -= 100;
610
            /* IMDCT pre-scaling */
611
            if (hDecoder->object_type == LD)
612
            {
613
                scale_factor -= 24 /*9*/;
614
            } else {
615
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
616
                    scale_factor -= 16 /*7*/;
617
                else
618
                    scale_factor -= 28 /*10*/;
619
            }
620
            if (scale_factor > 120)
621
                scale_factor = 120;  /* => exp <= 30 */
622
#else
623
19.6M
            (void)hDecoder;
624
19.6M
#endif
625
626
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
627
19.6M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
628
41.9k
            {
629
41.9k
                scale_factor = 0;
630
41.9k
            }
631
632
            /* scale_factor must be between 0 and 255 */
633
19.6M
            exp = (scale_factor /* - 100 */) >> 2;
634
            /* frac must always be > 0 */
635
19.6M
            frac = (scale_factor /* - 100 */) & 3;
636
637
19.6M
#ifndef FIXED_POINT
638
19.6M
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
639
#else
640
            if (exp > 0)
641
                sat_shift_mask = SAT_SHIFT_MASK(exp);
642
#endif
643
644
40.2M
            for (win = 0; win < ics->window_group_length[g]; win++)
645
20.6M
            {
646
125M
                for (bin = 0; bin < width; bin += 4)
647
105M
                {
648
105M
                    uint16_t wb = wa + bin;
649
105M
#ifndef FIXED_POINT
650
105M
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
651
105M
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
652
105M
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
653
105M
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
654
#else
655
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
656
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
657
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
658
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
659
660
                    if (exp == -32)
661
                    {
662
                        spec_data[wb+0] = 0;
663
                        spec_data[wb+1] = 0;
664
                        spec_data[wb+2] = 0;
665
                        spec_data[wb+3] = 0;
666
                    } else if (exp <= 0) {
667
                        spec_data[wb+0] = iq0 >> -exp;
668
                        spec_data[wb+1] = iq1 >> -exp;
669
                        spec_data[wb+2] = iq2 >> -exp;
670
                        spec_data[wb+3] = iq3 >> -exp;
671
                    } else { /* exp > 0 */
672
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
673
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
674
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
675
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
676
                    }
677
                    if (frac != 0)
678
                    {
679
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
680
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
681
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
682
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
683
                    }
684
685
//#define SCFS_PRINT
686
#ifdef SCFS_PRINT
687
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
688
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
689
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
690
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
691
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
692
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
693
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
694
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
695
#endif
696
#endif
697
698
105M
                    gincrease += 4;
699
105M
                    k += 4;
700
105M
                }
701
20.6M
                wa += win_inc;
702
20.6M
            }
703
19.6M
            j += width;
704
19.6M
        }
705
649k
        gindex += gincrease;
706
649k
    }
707
708
416k
    return error;
709
416k
}
710
711
static uint8_t allocate_single_channel(NeAACDecStruct *hDecoder, uint8_t channel,
712
                                       uint8_t output_channels)
713
390k
{
714
390k
    int mul = 1;
715
716
#ifdef MAIN_DEC
717
    /* MAIN object type prediction */
718
189k
    if (hDecoder->object_type == MAIN)
719
74.0k
    {
720
        /* allocate the state only when needed */
721
74.0k
        if (hDecoder->pred_stat[channel] != NULL)
722
1.79k
        {
723
1.79k
            faad_free(hDecoder->pred_stat[channel]);
724
1.79k
            hDecoder->pred_stat[channel] = NULL;
725
1.79k
        }
726
727
74.0k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
728
74.0k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
729
74.0k
    }
730
#endif
731
732
#ifdef LTP_DEC
733
189k
    if (is_ltp_ot(hDecoder->object_type))
734
56.4k
    {
735
        /* allocate the state only when needed */
736
56.4k
        if (hDecoder->lt_pred_stat[channel] != NULL)
737
522
        {
738
522
            faad_free(hDecoder->lt_pred_stat[channel]);
739
522
            hDecoder->lt_pred_stat[channel] = NULL;
740
522
        }
741
742
56.4k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
743
56.4k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
744
56.4k
    }
745
#endif
746
747
390k
    if (hDecoder->time_out[channel] != NULL)
748
4.47k
    {
749
4.47k
        faad_free(hDecoder->time_out[channel]);
750
4.47k
        hDecoder->time_out[channel] = NULL;
751
4.47k
    }
752
753
390k
    {
754
390k
        mul = 1;
755
390k
#ifdef SBR_DEC
756
390k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
757
390k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
758
313k
        {
759
            /* SBR requires 2 times as much output data */
760
313k
            mul = 2;
761
313k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
762
313k
        }
763
390k
#endif
764
390k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
765
390k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
766
390k
    }
767
768
390k
#if (defined(PS_DEC) || defined(DRM_PS))
769
390k
    if (output_channels == 2)
770
205k
    {
771
205k
        if (hDecoder->time_out[channel+1] != NULL)
772
1.13k
        {
773
1.13k
            faad_free(hDecoder->time_out[channel+1]);
774
1.13k
            hDecoder->time_out[channel+1] = NULL;
775
1.13k
        }
776
777
205k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
778
205k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
779
205k
    }
780
390k
#endif
781
782
390k
    if (hDecoder->fb_intermed[channel] != NULL)
783
3.89k
    {
784
3.89k
        faad_free(hDecoder->fb_intermed[channel]);
785
3.89k
        hDecoder->fb_intermed[channel] = NULL;
786
3.89k
    }
787
788
390k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
789
390k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
790
791
#ifdef SSR_DEC
792
    if (hDecoder->object_type == SSR)
793
    {
794
        if (hDecoder->ssr_overlap[channel] == NULL)
795
        {
796
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
797
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
798
        }
799
        if (hDecoder->prev_fmd[channel] == NULL)
800
        {
801
            uint16_t k;
802
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
803
            for (k = 0; k < 2*hDecoder->frameLength; k++)
804
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
805
        }
806
    }
807
#endif
808
809
390k
    return 0;
810
390k
}
specrec.c:allocate_single_channel
Line
Count
Source
713
201k
{
714
201k
    int mul = 1;
715
716
#ifdef MAIN_DEC
717
    /* MAIN object type prediction */
718
    if (hDecoder->object_type == MAIN)
719
    {
720
        /* allocate the state only when needed */
721
        if (hDecoder->pred_stat[channel] != NULL)
722
        {
723
            faad_free(hDecoder->pred_stat[channel]);
724
            hDecoder->pred_stat[channel] = NULL;
725
        }
726
727
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
728
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
729
    }
730
#endif
731
732
#ifdef LTP_DEC
733
    if (is_ltp_ot(hDecoder->object_type))
734
    {
735
        /* allocate the state only when needed */
736
        if (hDecoder->lt_pred_stat[channel] != NULL)
737
        {
738
            faad_free(hDecoder->lt_pred_stat[channel]);
739
            hDecoder->lt_pred_stat[channel] = NULL;
740
        }
741
742
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
743
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
744
    }
745
#endif
746
747
201k
    if (hDecoder->time_out[channel] != NULL)
748
0
    {
749
0
        faad_free(hDecoder->time_out[channel]);
750
0
        hDecoder->time_out[channel] = NULL;
751
0
    }
752
753
201k
    {
754
201k
        mul = 1;
755
201k
#ifdef SBR_DEC
756
201k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
757
201k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
758
171k
        {
759
            /* SBR requires 2 times as much output data */
760
171k
            mul = 2;
761
171k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
762
171k
        }
763
201k
#endif
764
201k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
765
201k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
766
201k
    }
767
768
201k
#if (defined(PS_DEC) || defined(DRM_PS))
769
201k
    if (output_channels == 2)
770
201k
    {
771
201k
        if (hDecoder->time_out[channel+1] != NULL)
772
0
        {
773
0
            faad_free(hDecoder->time_out[channel+1]);
774
0
            hDecoder->time_out[channel+1] = NULL;
775
0
        }
776
777
201k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
778
201k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
779
201k
    }
780
201k
#endif
781
782
201k
    if (hDecoder->fb_intermed[channel] != NULL)
783
0
    {
784
0
        faad_free(hDecoder->fb_intermed[channel]);
785
0
        hDecoder->fb_intermed[channel] = NULL;
786
0
    }
787
788
201k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
789
201k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
790
791
#ifdef SSR_DEC
792
    if (hDecoder->object_type == SSR)
793
    {
794
        if (hDecoder->ssr_overlap[channel] == NULL)
795
        {
796
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
797
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
798
        }
799
        if (hDecoder->prev_fmd[channel] == NULL)
800
        {
801
            uint16_t k;
802
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
803
            for (k = 0; k < 2*hDecoder->frameLength; k++)
804
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
805
        }
806
    }
807
#endif
808
809
201k
    return 0;
810
201k
}
specrec.c:allocate_single_channel
Line
Count
Source
713
189k
{
714
189k
    int mul = 1;
715
716
189k
#ifdef MAIN_DEC
717
    /* MAIN object type prediction */
718
189k
    if (hDecoder->object_type == MAIN)
719
74.0k
    {
720
        /* allocate the state only when needed */
721
74.0k
        if (hDecoder->pred_stat[channel] != NULL)
722
1.79k
        {
723
1.79k
            faad_free(hDecoder->pred_stat[channel]);
724
1.79k
            hDecoder->pred_stat[channel] = NULL;
725
1.79k
        }
726
727
74.0k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
728
74.0k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
729
74.0k
    }
730
189k
#endif
731
732
189k
#ifdef LTP_DEC
733
189k
    if (is_ltp_ot(hDecoder->object_type))
734
56.4k
    {
735
        /* allocate the state only when needed */
736
56.4k
        if (hDecoder->lt_pred_stat[channel] != NULL)
737
522
        {
738
522
            faad_free(hDecoder->lt_pred_stat[channel]);
739
522
            hDecoder->lt_pred_stat[channel] = NULL;
740
522
        }
741
742
56.4k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
743
56.4k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
744
56.4k
    }
745
189k
#endif
746
747
189k
    if (hDecoder->time_out[channel] != NULL)
748
4.47k
    {
749
4.47k
        faad_free(hDecoder->time_out[channel]);
750
4.47k
        hDecoder->time_out[channel] = NULL;
751
4.47k
    }
752
753
189k
    {
754
189k
        mul = 1;
755
189k
#ifdef SBR_DEC
756
189k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
757
189k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
758
142k
        {
759
            /* SBR requires 2 times as much output data */
760
142k
            mul = 2;
761
142k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
762
142k
        }
763
189k
#endif
764
189k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
765
189k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
766
189k
    }
767
768
189k
#if (defined(PS_DEC) || defined(DRM_PS))
769
189k
    if (output_channels == 2)
770
4.02k
    {
771
4.02k
        if (hDecoder->time_out[channel+1] != NULL)
772
1.13k
        {
773
1.13k
            faad_free(hDecoder->time_out[channel+1]);
774
1.13k
            hDecoder->time_out[channel+1] = NULL;
775
1.13k
        }
776
777
4.02k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
778
4.02k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
779
4.02k
    }
780
189k
#endif
781
782
189k
    if (hDecoder->fb_intermed[channel] != NULL)
783
3.89k
    {
784
3.89k
        faad_free(hDecoder->fb_intermed[channel]);
785
3.89k
        hDecoder->fb_intermed[channel] = NULL;
786
3.89k
    }
787
788
189k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
789
189k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
790
791
#ifdef SSR_DEC
792
    if (hDecoder->object_type == SSR)
793
    {
794
        if (hDecoder->ssr_overlap[channel] == NULL)
795
        {
796
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
797
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
798
        }
799
        if (hDecoder->prev_fmd[channel] == NULL)
800
        {
801
            uint16_t k;
802
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
803
            for (k = 0; k < 2*hDecoder->frameLength; k++)
804
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
805
        }
806
    }
807
#endif
808
809
189k
    return 0;
810
189k
}
811
812
static uint8_t allocate_channel_pair(NeAACDecStruct *hDecoder,
813
                                     uint8_t channel, uint8_t paired_channel)
814
53.3k
{
815
53.3k
    int mul = 1;
816
817
#ifdef MAIN_DEC
818
    /* MAIN object type prediction */
819
21.4k
    if (hDecoder->object_type == MAIN)
820
10.5k
    {
821
        /* allocate the state only when needed */
822
10.5k
        if (hDecoder->pred_stat[channel] == NULL)
823
10.5k
        {
824
10.5k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
825
10.5k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
826
10.5k
        }
827
10.5k
        if (hDecoder->pred_stat[paired_channel] == NULL)
828
10.5k
        {
829
10.5k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
830
10.5k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
831
10.5k
        }
832
10.5k
    }
833
#endif
834
835
#ifdef LTP_DEC
836
21.4k
    if (is_ltp_ot(hDecoder->object_type))
837
8.09k
    {
838
        /* allocate the state only when needed */
839
8.09k
        if (hDecoder->lt_pred_stat[channel] == NULL)
840
8.03k
        {
841
8.03k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
842
8.03k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
843
8.03k
        }
844
8.09k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
845
8.03k
        {
846
8.03k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
847
8.03k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
848
8.03k
        }
849
8.09k
    }
850
#endif
851
852
53.3k
    {
853
53.3k
        mul = 1;
854
53.3k
#ifdef SBR_DEC
855
53.3k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
856
53.3k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
857
42.7k
        {
858
            /* SBR requires 2 times as much output data */
859
42.7k
            mul = 2;
860
42.7k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
861
42.7k
        }
862
53.3k
#endif
863
53.3k
    }
864
53.3k
    if (hDecoder->time_out[channel] != NULL)
865
99
    {
866
99
        faad_free(hDecoder->time_out[channel]);
867
99
        hDecoder->time_out[channel] = NULL;
868
99
    }
869
53.3k
    if (hDecoder->time_out[paired_channel] != NULL)
870
96
    {
871
96
        faad_free(hDecoder->time_out[paired_channel]);
872
96
        hDecoder->time_out[paired_channel] = NULL;
873
96
    }
874
53.3k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
875
53.3k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
876
53.3k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
877
53.3k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
878
879
53.3k
    if (hDecoder->fb_intermed[channel] != NULL)
880
99
    {
881
99
        faad_free(hDecoder->fb_intermed[channel]);
882
99
        hDecoder->fb_intermed[channel] = NULL;
883
99
    }
884
53.3k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
885
92
    {
886
92
        faad_free(hDecoder->fb_intermed[paired_channel]);
887
92
        hDecoder->fb_intermed[paired_channel] = NULL;
888
92
    }
889
53.3k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
890
53.3k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
891
53.3k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
892
53.3k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
893
894
#ifdef SSR_DEC
895
    if (hDecoder->object_type == SSR)
896
    {
897
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
898
        {
899
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
900
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
901
        }
902
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
903
        {
904
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
905
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
906
        }
907
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
908
        {
909
            uint16_t k;
910
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
911
            for (k = 0; k < 2*hDecoder->frameLength; k++)
912
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
913
        }
914
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
915
        {
916
            uint16_t k;
917
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
918
            for (k = 0; k < 2*hDecoder->frameLength; k++)
919
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
920
        }
921
    }
922
#endif
923
924
53.3k
    return 0;
925
53.3k
}
specrec.c:allocate_channel_pair
Line
Count
Source
814
31.9k
{
815
31.9k
    int mul = 1;
816
817
#ifdef MAIN_DEC
818
    /* MAIN object type prediction */
819
    if (hDecoder->object_type == MAIN)
820
    {
821
        /* allocate the state only when needed */
822
        if (hDecoder->pred_stat[channel] == NULL)
823
        {
824
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
825
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
826
        }
827
        if (hDecoder->pred_stat[paired_channel] == NULL)
828
        {
829
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
830
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
831
        }
832
    }
833
#endif
834
835
#ifdef LTP_DEC
836
    if (is_ltp_ot(hDecoder->object_type))
837
    {
838
        /* allocate the state only when needed */
839
        if (hDecoder->lt_pred_stat[channel] == NULL)
840
        {
841
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
842
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
843
        }
844
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
845
        {
846
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
847
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
848
        }
849
    }
850
#endif
851
852
31.9k
    {
853
31.9k
        mul = 1;
854
31.9k
#ifdef SBR_DEC
855
31.9k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
856
31.9k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
857
26.7k
        {
858
            /* SBR requires 2 times as much output data */
859
26.7k
            mul = 2;
860
26.7k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
861
26.7k
        }
862
31.9k
#endif
863
31.9k
    }
864
31.9k
    if (hDecoder->time_out[channel] != NULL)
865
4
    {
866
4
        faad_free(hDecoder->time_out[channel]);
867
4
        hDecoder->time_out[channel] = NULL;
868
4
    }
869
31.9k
    if (hDecoder->time_out[paired_channel] != NULL)
870
4
    {
871
4
        faad_free(hDecoder->time_out[paired_channel]);
872
4
        hDecoder->time_out[paired_channel] = NULL;
873
4
    }
874
31.9k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
875
31.9k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
876
31.9k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
877
31.9k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
878
879
31.9k
    if (hDecoder->fb_intermed[channel] != NULL)
880
4
    {
881
4
        faad_free(hDecoder->fb_intermed[channel]);
882
4
        hDecoder->fb_intermed[channel] = NULL;
883
4
    }
884
31.9k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
885
0
    {
886
0
        faad_free(hDecoder->fb_intermed[paired_channel]);
887
0
        hDecoder->fb_intermed[paired_channel] = NULL;
888
0
    }
889
31.9k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
890
31.9k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
891
31.9k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
892
31.9k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
893
894
#ifdef SSR_DEC
895
    if (hDecoder->object_type == SSR)
896
    {
897
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
898
        {
899
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
900
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
901
        }
902
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
903
        {
904
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
905
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
906
        }
907
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
908
        {
909
            uint16_t k;
910
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
911
            for (k = 0; k < 2*hDecoder->frameLength; k++)
912
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
913
        }
914
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
915
        {
916
            uint16_t k;
917
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
918
            for (k = 0; k < 2*hDecoder->frameLength; k++)
919
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
920
        }
921
    }
922
#endif
923
924
31.9k
    return 0;
925
31.9k
}
specrec.c:allocate_channel_pair
Line
Count
Source
814
21.4k
{
815
21.4k
    int mul = 1;
816
817
21.4k
#ifdef MAIN_DEC
818
    /* MAIN object type prediction */
819
21.4k
    if (hDecoder->object_type == MAIN)
820
10.5k
    {
821
        /* allocate the state only when needed */
822
10.5k
        if (hDecoder->pred_stat[channel] == NULL)
823
10.5k
        {
824
10.5k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
825
10.5k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
826
10.5k
        }
827
10.5k
        if (hDecoder->pred_stat[paired_channel] == NULL)
828
10.5k
        {
829
10.5k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
830
10.5k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
831
10.5k
        }
832
10.5k
    }
833
21.4k
#endif
834
835
21.4k
#ifdef LTP_DEC
836
21.4k
    if (is_ltp_ot(hDecoder->object_type))
837
8.09k
    {
838
        /* allocate the state only when needed */
839
8.09k
        if (hDecoder->lt_pred_stat[channel] == NULL)
840
8.03k
        {
841
8.03k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
842
8.03k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
843
8.03k
        }
844
8.09k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
845
8.03k
        {
846
8.03k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
847
8.03k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
848
8.03k
        }
849
8.09k
    }
850
21.4k
#endif
851
852
21.4k
    {
853
21.4k
        mul = 1;
854
21.4k
#ifdef SBR_DEC
855
21.4k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
856
21.4k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
857
16.0k
        {
858
            /* SBR requires 2 times as much output data */
859
16.0k
            mul = 2;
860
16.0k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
861
16.0k
        }
862
21.4k
#endif
863
21.4k
    }
864
21.4k
    if (hDecoder->time_out[channel] != NULL)
865
95
    {
866
95
        faad_free(hDecoder->time_out[channel]);
867
95
        hDecoder->time_out[channel] = NULL;
868
95
    }
869
21.4k
    if (hDecoder->time_out[paired_channel] != NULL)
870
92
    {
871
92
        faad_free(hDecoder->time_out[paired_channel]);
872
92
        hDecoder->time_out[paired_channel] = NULL;
873
92
    }
874
21.4k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
875
21.4k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
876
21.4k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
877
21.4k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
878
879
21.4k
    if (hDecoder->fb_intermed[channel] != NULL)
880
95
    {
881
95
        faad_free(hDecoder->fb_intermed[channel]);
882
95
        hDecoder->fb_intermed[channel] = NULL;
883
95
    }
884
21.4k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
885
92
    {
886
92
        faad_free(hDecoder->fb_intermed[paired_channel]);
887
92
        hDecoder->fb_intermed[paired_channel] = NULL;
888
92
    }
889
21.4k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
890
21.4k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
891
21.4k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
892
21.4k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
893
894
#ifdef SSR_DEC
895
    if (hDecoder->object_type == SSR)
896
    {
897
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
898
        {
899
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
900
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
901
        }
902
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
903
        {
904
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
905
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
906
        }
907
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
908
        {
909
            uint16_t k;
910
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
911
            for (k = 0; k < 2*hDecoder->frameLength; k++)
912
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
913
        }
914
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
915
        {
916
            uint16_t k;
917
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
918
            for (k = 0; k < 2*hDecoder->frameLength; k++)
919
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
920
        }
921
    }
922
#endif
923
924
21.4k
    return 0;
925
21.4k
}
926
927
uint8_t reconstruct_single_channel(NeAACDecStruct *hDecoder, ic_stream *ics,
928
                                   element *sce, int16_t *spec_data)
929
539k
{
930
539k
    uint8_t retval;
931
539k
    uint8_t output_channels;
932
539k
    ALIGN real_t spec_coef[1024];
933
934
#ifdef PROFILE
935
    int64_t count = faad_get_ts();
936
#endif
937
938
939
    /* always allocate 2 channels, PS can always "suddenly" turn up */
940
#if ( (defined(DRM) && defined(DRM_PS)) )
941
    output_channels = 2;
942
#elif defined(PS_DEC)
943
309k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
944
11.1k
        output_channels = 2;
945
298k
    else
946
298k
        output_channels = 1;
947
#else
948
    output_channels = 1;
949
#endif
950
951
539k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
952
469k
    {
953
        /* element_output_channels not set yet */
954
469k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
955
469k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
956
        /* element inconsistency */
957
958
        /* this only happens if PS is actually found but not in the first frame
959
         * this means that there is only 1 bitstream element!
960
         */
961
962
        /* The simplest way to fix the accounting,
963
         * is to reallocate this and all the following channels.
964
         */
965
1.30k
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
966
1.30k
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
967
968
1.30k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
969
970
        //return 21;
971
1.30k
    }
972
973
539k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
974
478k
    {
975
478k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
976
478k
        if (retval > 0)
977
0
            return retval;
978
979
478k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
980
478k
    }
981
982
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
983
539k
    if(!hDecoder->time_out[sce->channel])
984
0
        return 15;
985
539k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
986
0
        return 15;
987
539k
    if(!hDecoder->fb_intermed[sce->channel])
988
0
        return 15;
989
990
    /* dequantisation and scaling */
991
539k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
992
539k
    if (retval > 0)
993
215
        return retval;
994
995
#ifdef PROFILE
996
    count = faad_get_ts() - count;
997
    hDecoder->requant_cycles += count;
998
#endif
999
1000
1001
    /* pns decoding */
1002
539k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
1003
539k
        &(hDecoder->__r1), &(hDecoder->__r2));
1004
1005
#ifdef MAIN_DEC
1006
    /* MAIN object type prediction */
1007
211k
    if (hDecoder->object_type == MAIN)
1008
81.9k
    {
1009
81.9k
        if (!hDecoder->pred_stat[sce->channel])
1010
0
            return 33;
1011
1012
        /* intra channel prediction */
1013
81.9k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1014
81.9k
            hDecoder->sf_index);
1015
1016
        /* In addition, for scalefactor bands coded by perceptual
1017
           noise substitution the predictors belonging to the
1018
           corresponding spectral coefficients are reset.
1019
        */
1020
81.9k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1021
81.9k
    }
1022
211k
#endif
1023
1024
#ifdef LTP_DEC
1025
309k
    if (is_ltp_ot(hDecoder->object_type))
1026
107k
    {
1027
107k
#ifdef LD_DEC
1028
107k
        if (hDecoder->object_type == LD)
1029
858
        {
1030
858
            if (ics->ltp.data_present)
1031
138
            {
1032
138
                if (ics->ltp.lag_update)
1033
48
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1034
138
            }
1035
858
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1036
858
        }
1037
107k
#endif
1038
1039
107k
        if (!hDecoder->lt_pred_stat[sce->channel])
1040
0
            return 34;
1041
1042
        /* long term prediction */
1043
107k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1044
107k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1045
107k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1046
107k
    }
1047
309k
#endif
1048
1049
    /* tns decoding */
1050
309k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1051
309k
        spec_coef, hDecoder->frameLength);
1052
1053
    /* drc decoding */
1054
309k
#ifdef APPLY_DRC
1055
539k
    if (hDecoder->drc->present)
1056
20.5k
    {
1057
20.5k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1058
18.6k
            drc_decode(hDecoder->drc, spec_coef);
1059
20.5k
    }
1060
309k
#endif
1061
    /* filter bank */
1062
#ifdef SSR_DEC
1063
    if (hDecoder->object_type != SSR)
1064
    {
1065
#endif
1066
309k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1067
309k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1068
309k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1069
309k
            hDecoder->object_type, hDecoder->frameLength);
1070
#ifdef SSR_DEC
1071
    } else {
1072
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1073
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1074
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1075
            hDecoder->frameLength);
1076
    }
1077
#endif
1078
1079
    /* save window shape for next frame */
1080
309k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1081
1082
#ifdef LTP_DEC
1083
309k
    if (is_ltp_ot(hDecoder->object_type))
1084
107k
    {
1085
107k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1086
107k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1087
107k
    }
1088
#endif
1089
1090
309k
#ifdef SBR_DEC
1091
539k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1092
435k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1093
435k
    {
1094
435k
        int ele = hDecoder->fr_ch_ele;
1095
435k
        int ch = sce->channel;
1096
1097
        /* following case can happen when forceUpSampling == 1 */
1098
435k
        if (hDecoder->sbr[ele] == NULL)
1099
326k
        {
1100
326k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1101
326k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1102
326k
                hDecoder->downSampledSBR
1103
#ifdef DRM
1104
                , 0
1105
#endif
1106
326k
                );
1107
326k
        }
1108
435k
        if (!hDecoder->sbr[ele])
1109
58
            return 19;
1110
1111
435k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1112
51.7k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1113
384k
        else
1114
384k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1115
1116
        /* check if any of the PS tools is used */
1117
435k
#if (defined(PS_DEC) || defined(DRM_PS))
1118
435k
        if (hDecoder->ps_used[ele] == 0)
1119
414k
        {
1120
414k
#endif
1121
414k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1122
414k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1123
414k
#if (defined(PS_DEC) || defined(DRM_PS))
1124
414k
        } else {
1125
21.7k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1126
21.7k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1127
21.7k
                hDecoder->downSampledSBR);
1128
21.7k
        }
1129
435k
#endif
1130
435k
        if (retval > 0)
1131
71
            return retval;
1132
435k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1133
9
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1134
9
    {
1135
9
        return 23;
1136
9
    }
1137
539k
#endif
1138
1139
    /* copy L to R when no PS is used */
1140
539k
#if (defined(PS_DEC) || defined(DRM_PS))
1141
539k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1142
517k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1143
219k
    {
1144
219k
        int ele = hDecoder->fr_ch_ele;
1145
219k
        int ch = sce->channel;
1146
219k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1147
219k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1148
1149
219k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1150
219k
    }
1151
539k
#endif
1152
1153
539k
    return 0;
1154
309k
}
reconstruct_single_channel
Line
Count
Source
929
229k
{
930
229k
    uint8_t retval;
931
229k
    uint8_t output_channels;
932
229k
    ALIGN real_t spec_coef[1024];
933
934
#ifdef PROFILE
935
    int64_t count = faad_get_ts();
936
#endif
937
938
939
    /* always allocate 2 channels, PS can always "suddenly" turn up */
940
229k
#if ( (defined(DRM) && defined(DRM_PS)) )
941
229k
    output_channels = 2;
942
#elif defined(PS_DEC)
943
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
944
        output_channels = 2;
945
    else
946
        output_channels = 1;
947
#else
948
    output_channels = 1;
949
#endif
950
951
229k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
952
201k
    {
953
        /* element_output_channels not set yet */
954
201k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
955
201k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
956
        /* element inconsistency */
957
958
        /* this only happens if PS is actually found but not in the first frame
959
         * this means that there is only 1 bitstream element!
960
         */
961
962
        /* The simplest way to fix the accounting,
963
         * is to reallocate this and all the following channels.
964
         */
965
0
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
966
0
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
967
968
0
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
969
970
        //return 21;
971
0
    }
972
973
229k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
974
201k
    {
975
201k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
976
201k
        if (retval > 0)
977
0
            return retval;
978
979
201k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
980
201k
    }
981
982
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
983
229k
    if(!hDecoder->time_out[sce->channel])
984
0
        return 15;
985
229k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
986
0
        return 15;
987
229k
    if(!hDecoder->fb_intermed[sce->channel])
988
0
        return 15;
989
990
    /* dequantisation and scaling */
991
229k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
992
229k
    if (retval > 0)
993
117
        return retval;
994
995
#ifdef PROFILE
996
    count = faad_get_ts() - count;
997
    hDecoder->requant_cycles += count;
998
#endif
999
1000
1001
    /* pns decoding */
1002
229k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
1003
229k
        &(hDecoder->__r1), &(hDecoder->__r2));
1004
1005
#ifdef MAIN_DEC
1006
    /* MAIN object type prediction */
1007
    if (hDecoder->object_type == MAIN)
1008
    {
1009
        if (!hDecoder->pred_stat[sce->channel])
1010
            return 33;
1011
1012
        /* intra channel prediction */
1013
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1014
            hDecoder->sf_index);
1015
1016
        /* In addition, for scalefactor bands coded by perceptual
1017
           noise substitution the predictors belonging to the
1018
           corresponding spectral coefficients are reset.
1019
        */
1020
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1021
    }
1022
#endif
1023
1024
#ifdef LTP_DEC
1025
    if (is_ltp_ot(hDecoder->object_type))
1026
    {
1027
#ifdef LD_DEC
1028
        if (hDecoder->object_type == LD)
1029
        {
1030
            if (ics->ltp.data_present)
1031
            {
1032
                if (ics->ltp.lag_update)
1033
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1034
            }
1035
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1036
        }
1037
#endif
1038
1039
        if (!hDecoder->lt_pred_stat[sce->channel])
1040
            return 34;
1041
1042
        /* long term prediction */
1043
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1044
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1045
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1046
    }
1047
#endif
1048
1049
    /* tns decoding */
1050
229k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1051
229k
        spec_coef, hDecoder->frameLength);
1052
1053
    /* drc decoding */
1054
229k
#ifdef APPLY_DRC
1055
229k
    if (hDecoder->drc->present)
1056
0
    {
1057
0
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1058
0
            drc_decode(hDecoder->drc, spec_coef);
1059
0
    }
1060
229k
#endif
1061
    /* filter bank */
1062
#ifdef SSR_DEC
1063
    if (hDecoder->object_type != SSR)
1064
    {
1065
#endif
1066
229k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1067
229k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1068
229k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1069
229k
            hDecoder->object_type, hDecoder->frameLength);
1070
#ifdef SSR_DEC
1071
    } else {
1072
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1073
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1074
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1075
            hDecoder->frameLength);
1076
    }
1077
#endif
1078
1079
    /* save window shape for next frame */
1080
229k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1081
1082
#ifdef LTP_DEC
1083
    if (is_ltp_ot(hDecoder->object_type))
1084
    {
1085
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1086
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1087
    }
1088
#endif
1089
1090
229k
#ifdef SBR_DEC
1091
229k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1092
197k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1093
197k
    {
1094
197k
        int ele = hDecoder->fr_ch_ele;
1095
197k
        int ch = sce->channel;
1096
1097
        /* following case can happen when forceUpSampling == 1 */
1098
197k
        if (hDecoder->sbr[ele] == NULL)
1099
149k
        {
1100
149k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1101
149k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1102
149k
                hDecoder->downSampledSBR
1103
149k
#ifdef DRM
1104
149k
                , 0
1105
149k
#endif
1106
149k
                );
1107
149k
        }
1108
197k
        if (!hDecoder->sbr[ele])
1109
0
            return 19;
1110
1111
197k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1112
20.2k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1113
176k
        else
1114
176k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1115
1116
        /* check if any of the PS tools is used */
1117
197k
#if (defined(PS_DEC) || defined(DRM_PS))
1118
197k
        if (hDecoder->ps_used[ele] == 0)
1119
186k
        {
1120
186k
#endif
1121
186k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1122
186k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1123
186k
#if (defined(PS_DEC) || defined(DRM_PS))
1124
186k
        } else {
1125
10.5k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1126
10.5k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1127
10.5k
                hDecoder->downSampledSBR);
1128
10.5k
        }
1129
197k
#endif
1130
197k
        if (retval > 0)
1131
23
            return retval;
1132
197k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1133
4
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1134
4
    {
1135
4
        return 23;
1136
4
    }
1137
229k
#endif
1138
1139
    /* copy L to R when no PS is used */
1140
229k
#if (defined(PS_DEC) || defined(DRM_PS))
1141
229k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1142
219k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1143
219k
    {
1144
219k
        int ele = hDecoder->fr_ch_ele;
1145
219k
        int ch = sce->channel;
1146
219k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1147
219k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1148
1149
219k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1150
219k
    }
1151
229k
#endif
1152
1153
229k
    return 0;
1154
229k
}
reconstruct_single_channel
Line
Count
Source
929
211k
{
930
211k
    uint8_t retval;
931
211k
    uint8_t output_channels;
932
211k
    ALIGN real_t spec_coef[1024];
933
934
#ifdef PROFILE
935
    int64_t count = faad_get_ts();
936
#endif
937
938
939
    /* always allocate 2 channels, PS can always "suddenly" turn up */
940
#if ( (defined(DRM) && defined(DRM_PS)) )
941
    output_channels = 2;
942
#elif defined(PS_DEC)
943
211k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
944
5.48k
        output_channels = 2;
945
205k
    else
946
205k
        output_channels = 1;
947
#else
948
    output_channels = 1;
949
#endif
950
951
211k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
952
184k
    {
953
        /* element_output_channels not set yet */
954
184k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
955
184k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
956
        /* element inconsistency */
957
958
        /* this only happens if PS is actually found but not in the first frame
959
         * this means that there is only 1 bitstream element!
960
         */
961
962
        /* The simplest way to fix the accounting,
963
         * is to reallocate this and all the following channels.
964
         */
965
531
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
966
531
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
967
968
531
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
969
970
        //return 21;
971
531
    }
972
973
211k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
974
189k
    {
975
189k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
976
189k
        if (retval > 0)
977
0
            return retval;
978
979
189k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
980
189k
    }
981
982
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
983
211k
    if(!hDecoder->time_out[sce->channel])
984
0
        return 15;
985
211k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
986
0
        return 15;
987
211k
    if(!hDecoder->fb_intermed[sce->channel])
988
0
        return 15;
989
990
    /* dequantisation and scaling */
991
211k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
992
211k
    if (retval > 0)
993
66
        return retval;
994
995
#ifdef PROFILE
996
    count = faad_get_ts() - count;
997
    hDecoder->requant_cycles += count;
998
#endif
999
1000
1001
    /* pns decoding */
1002
211k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
1003
211k
        &(hDecoder->__r1), &(hDecoder->__r2));
1004
1005
211k
#ifdef MAIN_DEC
1006
    /* MAIN object type prediction */
1007
211k
    if (hDecoder->object_type == MAIN)
1008
81.9k
    {
1009
81.9k
        if (!hDecoder->pred_stat[sce->channel])
1010
0
            return 33;
1011
1012
        /* intra channel prediction */
1013
81.9k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1014
81.9k
            hDecoder->sf_index);
1015
1016
        /* In addition, for scalefactor bands coded by perceptual
1017
           noise substitution the predictors belonging to the
1018
           corresponding spectral coefficients are reset.
1019
        */
1020
81.9k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1021
81.9k
    }
1022
211k
#endif
1023
1024
211k
#ifdef LTP_DEC
1025
211k
    if (is_ltp_ot(hDecoder->object_type))
1026
59.8k
    {
1027
59.8k
#ifdef LD_DEC
1028
59.8k
        if (hDecoder->object_type == LD)
1029
636
        {
1030
636
            if (ics->ltp.data_present)
1031
93
            {
1032
93
                if (ics->ltp.lag_update)
1033
31
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1034
93
            }
1035
636
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1036
636
        }
1037
59.8k
#endif
1038
1039
59.8k
        if (!hDecoder->lt_pred_stat[sce->channel])
1040
0
            return 34;
1041
1042
        /* long term prediction */
1043
59.8k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1044
59.8k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1045
59.8k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1046
59.8k
    }
1047
211k
#endif
1048
1049
    /* tns decoding */
1050
211k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1051
211k
        spec_coef, hDecoder->frameLength);
1052
1053
    /* drc decoding */
1054
211k
#ifdef APPLY_DRC
1055
211k
    if (hDecoder->drc->present)
1056
14.2k
    {
1057
14.2k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1058
13.1k
            drc_decode(hDecoder->drc, spec_coef);
1059
14.2k
    }
1060
211k
#endif
1061
    /* filter bank */
1062
#ifdef SSR_DEC
1063
    if (hDecoder->object_type != SSR)
1064
    {
1065
#endif
1066
211k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1067
211k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1068
211k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1069
211k
            hDecoder->object_type, hDecoder->frameLength);
1070
#ifdef SSR_DEC
1071
    } else {
1072
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1073
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1074
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1075
            hDecoder->frameLength);
1076
    }
1077
#endif
1078
1079
    /* save window shape for next frame */
1080
211k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1081
1082
211k
#ifdef LTP_DEC
1083
211k
    if (is_ltp_ot(hDecoder->object_type))
1084
59.8k
    {
1085
59.8k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1086
59.8k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1087
59.8k
    }
1088
211k
#endif
1089
1090
211k
#ifdef SBR_DEC
1091
211k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1092
159k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1093
159k
    {
1094
159k
        int ele = hDecoder->fr_ch_ele;
1095
159k
        int ch = sce->channel;
1096
1097
        /* following case can happen when forceUpSampling == 1 */
1098
159k
        if (hDecoder->sbr[ele] == NULL)
1099
122k
        {
1100
122k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1101
122k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1102
122k
                hDecoder->downSampledSBR
1103
#ifdef DRM
1104
                , 0
1105
#endif
1106
122k
                );
1107
122k
        }
1108
159k
        if (!hDecoder->sbr[ele])
1109
32
            return 19;
1110
1111
159k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1112
18.2k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1113
141k
        else
1114
141k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1115
1116
        /* check if any of the PS tools is used */
1117
159k
#if (defined(PS_DEC) || defined(DRM_PS))
1118
159k
        if (hDecoder->ps_used[ele] == 0)
1119
154k
        {
1120
154k
#endif
1121
154k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1122
154k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1123
154k
#if (defined(PS_DEC) || defined(DRM_PS))
1124
154k
        } else {
1125
5.48k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1126
5.48k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1127
5.48k
                hDecoder->downSampledSBR);
1128
5.48k
        }
1129
159k
#endif
1130
159k
        if (retval > 0)
1131
37
            return retval;
1132
159k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1133
5
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1134
5
    {
1135
5
        return 23;
1136
5
    }
1137
210k
#endif
1138
1139
    /* copy L to R when no PS is used */
1140
210k
#if (defined(PS_DEC) || defined(DRM_PS))
1141
210k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1142
205k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1143
0
    {
1144
0
        int ele = hDecoder->fr_ch_ele;
1145
0
        int ch = sce->channel;
1146
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1147
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1148
1149
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1150
0
    }
1151
210k
#endif
1152
1153
210k
    return 0;
1154
211k
}
reconstruct_single_channel
Line
Count
Source
929
98.6k
{
930
98.6k
    uint8_t retval;
931
98.6k
    uint8_t output_channels;
932
98.6k
    ALIGN real_t spec_coef[1024];
933
934
#ifdef PROFILE
935
    int64_t count = faad_get_ts();
936
#endif
937
938
939
    /* always allocate 2 channels, PS can always "suddenly" turn up */
940
#if ( (defined(DRM) && defined(DRM_PS)) )
941
    output_channels = 2;
942
#elif defined(PS_DEC)
943
98.6k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
944
5.69k
        output_channels = 2;
945
92.9k
    else
946
92.9k
        output_channels = 1;
947
#else
948
    output_channels = 1;
949
#endif
950
951
98.6k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
952
83.6k
    {
953
        /* element_output_channels not set yet */
954
83.6k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
955
83.6k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
956
        /* element inconsistency */
957
958
        /* this only happens if PS is actually found but not in the first frame
959
         * this means that there is only 1 bitstream element!
960
         */
961
962
        /* The simplest way to fix the accounting,
963
         * is to reallocate this and all the following channels.
964
         */
965
774
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
966
774
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
967
968
774
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
969
970
        //return 21;
971
774
    }
972
973
98.6k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
974
88.2k
    {
975
88.2k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
976
88.2k
        if (retval > 0)
977
0
            return retval;
978
979
88.2k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
980
88.2k
    }
981
982
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
983
98.6k
    if(!hDecoder->time_out[sce->channel])
984
0
        return 15;
985
98.6k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
986
0
        return 15;
987
98.6k
    if(!hDecoder->fb_intermed[sce->channel])
988
0
        return 15;
989
990
    /* dequantisation and scaling */
991
98.6k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
992
98.6k
    if (retval > 0)
993
32
        return retval;
994
995
#ifdef PROFILE
996
    count = faad_get_ts() - count;
997
    hDecoder->requant_cycles += count;
998
#endif
999
1000
1001
    /* pns decoding */
1002
98.5k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
1003
98.5k
        &(hDecoder->__r1), &(hDecoder->__r2));
1004
1005
#ifdef MAIN_DEC
1006
    /* MAIN object type prediction */
1007
    if (hDecoder->object_type == MAIN)
1008
    {
1009
        if (!hDecoder->pred_stat[sce->channel])
1010
            return 33;
1011
1012
        /* intra channel prediction */
1013
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1014
            hDecoder->sf_index);
1015
1016
        /* In addition, for scalefactor bands coded by perceptual
1017
           noise substitution the predictors belonging to the
1018
           corresponding spectral coefficients are reset.
1019
        */
1020
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1021
    }
1022
#endif
1023
1024
98.5k
#ifdef LTP_DEC
1025
98.5k
    if (is_ltp_ot(hDecoder->object_type))
1026
47.9k
    {
1027
47.9k
#ifdef LD_DEC
1028
47.9k
        if (hDecoder->object_type == LD)
1029
222
        {
1030
222
            if (ics->ltp.data_present)
1031
45
            {
1032
45
                if (ics->ltp.lag_update)
1033
17
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1034
45
            }
1035
222
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1036
222
        }
1037
47.9k
#endif
1038
1039
47.9k
        if (!hDecoder->lt_pred_stat[sce->channel])
1040
0
            return 34;
1041
1042
        /* long term prediction */
1043
47.9k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1044
47.9k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1045
47.9k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1046
47.9k
    }
1047
98.5k
#endif
1048
1049
    /* tns decoding */
1050
98.5k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1051
98.5k
        spec_coef, hDecoder->frameLength);
1052
1053
    /* drc decoding */
1054
98.5k
#ifdef APPLY_DRC
1055
98.5k
    if (hDecoder->drc->present)
1056
6.32k
    {
1057
6.32k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1058
5.46k
            drc_decode(hDecoder->drc, spec_coef);
1059
6.32k
    }
1060
98.5k
#endif
1061
    /* filter bank */
1062
#ifdef SSR_DEC
1063
    if (hDecoder->object_type != SSR)
1064
    {
1065
#endif
1066
98.5k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1067
98.5k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1068
98.5k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1069
98.5k
            hDecoder->object_type, hDecoder->frameLength);
1070
#ifdef SSR_DEC
1071
    } else {
1072
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1073
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1074
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1075
            hDecoder->frameLength);
1076
    }
1077
#endif
1078
1079
    /* save window shape for next frame */
1080
98.5k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1081
1082
98.5k
#ifdef LTP_DEC
1083
98.5k
    if (is_ltp_ot(hDecoder->object_type))
1084
47.9k
    {
1085
47.9k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1086
47.9k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1087
47.9k
    }
1088
98.5k
#endif
1089
1090
98.5k
#ifdef SBR_DEC
1091
98.5k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1092
79.1k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1093
79.1k
    {
1094
79.1k
        int ele = hDecoder->fr_ch_ele;
1095
79.1k
        int ch = sce->channel;
1096
1097
        /* following case can happen when forceUpSampling == 1 */
1098
79.1k
        if (hDecoder->sbr[ele] == NULL)
1099
54.8k
        {
1100
54.8k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1101
54.8k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1102
54.8k
                hDecoder->downSampledSBR
1103
#ifdef DRM
1104
                , 0
1105
#endif
1106
54.8k
                );
1107
54.8k
        }
1108
79.1k
        if (!hDecoder->sbr[ele])
1109
26
            return 19;
1110
1111
79.1k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1112
13.2k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1113
65.8k
        else
1114
65.8k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1115
1116
        /* check if any of the PS tools is used */
1117
79.1k
#if (defined(PS_DEC) || defined(DRM_PS))
1118
79.1k
        if (hDecoder->ps_used[ele] == 0)
1119
73.4k
        {
1120
73.4k
#endif
1121
73.4k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1122
73.4k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1123
73.4k
#if (defined(PS_DEC) || defined(DRM_PS))
1124
73.4k
        } else {
1125
5.69k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1126
5.69k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1127
5.69k
                hDecoder->downSampledSBR);
1128
5.69k
        }
1129
79.1k
#endif
1130
79.1k
        if (retval > 0)
1131
11
            return retval;
1132
79.1k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1133
0
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1134
0
    {
1135
0
        return 23;
1136
0
    }
1137
98.5k
#endif
1138
1139
    /* copy L to R when no PS is used */
1140
98.5k
#if (defined(PS_DEC) || defined(DRM_PS))
1141
98.5k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1142
92.8k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1143
0
    {
1144
0
        int ele = hDecoder->fr_ch_ele;
1145
0
        int ch = sce->channel;
1146
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1147
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1148
1149
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1150
0
    }
1151
98.5k
#endif
1152
1153
98.5k
    return 0;
1154
98.5k
}
1155
1156
uint8_t reconstruct_channel_pair(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
1157
                                 element *cpe, int16_t *spec_data1, int16_t *spec_data2)
1158
80.7k
{
1159
80.7k
    uint8_t retval;
1160
80.7k
    ALIGN real_t spec_coef1[1024];
1161
80.7k
    ALIGN real_t spec_coef2[1024];
1162
1163
#ifdef PROFILE
1164
    int64_t count = faad_get_ts();
1165
#endif
1166
80.7k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1167
67.8k
    {
1168
67.8k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1169
67.8k
        if (retval > 0)
1170
0
            return retval;
1171
1172
67.8k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1173
67.8k
    }
1174
1175
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1176
80.7k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1177
0
        return 15;
1178
80.7k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1179
0
        return 15;
1180
1181
    /* dequantisation and scaling */
1182
80.7k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1183
80.7k
    if (retval > 0)
1184
163
        return retval;
1185
80.6k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1186
80.6k
    if (retval > 0)
1187
12
        return retval;
1188
1189
#ifdef PROFILE
1190
    count = faad_get_ts() - count;
1191
    hDecoder->requant_cycles += count;
1192
#endif
1193
1194
    /* pns decoding */
1195
80.5k
    if (ics1->ms_mask_present)
1196
22.3k
    {
1197
22.3k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1198
22.3k
            &(hDecoder->__r1), &(hDecoder->__r2));
1199
58.2k
    } else {
1200
58.2k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1201
58.2k
            &(hDecoder->__r1), &(hDecoder->__r2));
1202
58.2k
    }
1203
1204
    /* mid/side decoding */
1205
80.5k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1206
1207
#if 0
1208
    {
1209
        int i;
1210
        for (i = 0; i < 1024; i++)
1211
        {
1212
            //printf("%d\n", spec_coef1[i]);
1213
            printf("0x%.8X\n", spec_coef1[i]);
1214
        }
1215
        for (i = 0; i < 1024; i++)
1216
        {
1217
            //printf("%d\n", spec_coef2[i]);
1218
            printf("0x%.8X\n", spec_coef2[i]);
1219
        }
1220
    }
1221
#endif
1222
1223
    /* intensity stereo decoding */
1224
80.5k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1225
1226
#if 0
1227
    {
1228
        int i;
1229
        for (i = 0; i < 1024; i++)
1230
        {
1231
            printf("%d\n", spec_coef1[i]);
1232
            //printf("0x%.8X\n", spec_coef1[i]);
1233
        }
1234
        for (i = 0; i < 1024; i++)
1235
        {
1236
            printf("%d\n", spec_coef2[i]);
1237
            //printf("0x%.8X\n", spec_coef2[i]);
1238
        }
1239
    }
1240
#endif
1241
1242
#ifdef MAIN_DEC
1243
    /* MAIN object type prediction */
1244
25.4k
    if (hDecoder->object_type == MAIN)
1245
12.3k
    {
1246
12.3k
        if (!hDecoder->pred_stat[cpe->channel] || !hDecoder->pred_stat[cpe->paired_channel])
1247
0
            return 33;
1248
1249
        /* intra channel prediction */
1250
12.3k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1251
12.3k
            hDecoder->sf_index);
1252
12.3k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1253
12.3k
            hDecoder->sf_index);
1254
1255
        /* In addition, for scalefactor bands coded by perceptual
1256
           noise substitution the predictors belonging to the
1257
           corresponding spectral coefficients are reset.
1258
        */
1259
12.3k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1260
12.3k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1261
12.3k
    }
1262
25.4k
#endif
1263
1264
#ifdef LTP_DEC
1265
42.9k
    if (is_ltp_ot(hDecoder->object_type))
1266
16.5k
    {
1267
16.5k
        ltp_info *ltp1 = &(ics1->ltp);
1268
16.5k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1269
16.5k
#ifdef LD_DEC
1270
16.5k
        if (hDecoder->object_type == LD)
1271
1.36k
        {
1272
1.36k
            if (ltp1->data_present)
1273
221
            {
1274
221
                if (ltp1->lag_update)
1275
95
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1276
221
            }
1277
1.36k
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1278
1.36k
            if (ltp2->data_present)
1279
115
            {
1280
115
                if (ltp2->lag_update)
1281
48
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1282
115
            }
1283
1.36k
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1284
1.36k
        }
1285
16.5k
#endif
1286
1287
16.5k
        if (!hDecoder->lt_pred_stat[cpe->channel] || !hDecoder->lt_pred_stat[cpe->paired_channel])
1288
0
            return 34;
1289
1290
        /* long term prediction */
1291
16.5k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1292
16.5k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1293
16.5k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1294
16.5k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1295
16.5k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1296
16.5k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1297
16.5k
    }
1298
42.9k
#endif
1299
1300
    /* tns decoding */
1301
42.9k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1302
42.9k
        spec_coef1, hDecoder->frameLength);
1303
42.9k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1304
42.9k
        spec_coef2, hDecoder->frameLength);
1305
1306
    /* drc decoding */
1307
42.9k
#if APPLY_DRC
1308
80.5k
    if (hDecoder->drc->present)
1309
1.70k
    {
1310
1.70k
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1311
1.47k
            drc_decode(hDecoder->drc, spec_coef1);
1312
1.70k
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1313
1.49k
            drc_decode(hDecoder->drc, spec_coef2);
1314
1.70k
    }
1315
42.9k
#endif
1316
    /* filter bank */
1317
#ifdef SSR_DEC
1318
    if (hDecoder->object_type != SSR)
1319
    {
1320
#endif
1321
42.9k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1322
42.9k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1323
42.9k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1324
42.9k
            hDecoder->object_type, hDecoder->frameLength);
1325
42.9k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1326
42.9k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1327
42.9k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1328
42.9k
            hDecoder->object_type, hDecoder->frameLength);
1329
#ifdef SSR_DEC
1330
    } else {
1331
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1332
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1333
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1334
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1335
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1336
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1337
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1338
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1339
    }
1340
#endif
1341
1342
    /* save window shape for next frame */
1343
42.9k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1344
42.9k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1345
1346
#ifdef LTP_DEC
1347
42.9k
    if (is_ltp_ot(hDecoder->object_type))
1348
16.5k
    {
1349
16.5k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1350
16.5k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1351
16.5k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1352
16.5k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1353
16.5k
    }
1354
#endif
1355
1356
42.9k
#ifdef SBR_DEC
1357
80.5k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
66.5k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
66.5k
    {
1360
66.5k
        int ele = hDecoder->fr_ch_ele;
1361
66.5k
        int ch0 = cpe->channel;
1362
66.5k
        int ch1 = cpe->paired_channel;
1363
1364
        /* following case can happen when forceUpSampling == 1 */
1365
66.5k
        if (hDecoder->sbr[ele] == NULL)
1366
20.6k
        {
1367
20.6k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1368
20.6k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1369
20.6k
                hDecoder->downSampledSBR
1370
#ifdef DRM
1371
                , 0
1372
#endif
1373
20.6k
                );
1374
20.6k
        }
1375
66.5k
        if (!hDecoder->sbr[ele])
1376
45
            return 19;
1377
1378
66.4k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1379
3.82k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1380
62.6k
        else
1381
62.6k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1382
1383
66.4k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1384
66.4k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1385
66.4k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1386
66.4k
        if (retval > 0)
1387
4
            return retval;
1388
66.4k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1389
3
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1390
3
    {
1391
3
        return 23;
1392
3
    }
1393
80.5k
#endif
1394
1395
80.5k
    return 0;
1396
42.9k
}
reconstruct_channel_pair
Line
Count
Source
1158
37.7k
{
1159
37.7k
    uint8_t retval;
1160
37.7k
    ALIGN real_t spec_coef1[1024];
1161
37.7k
    ALIGN real_t spec_coef2[1024];
1162
1163
#ifdef PROFILE
1164
    int64_t count = faad_get_ts();
1165
#endif
1166
37.7k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1167
31.9k
    {
1168
31.9k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1169
31.9k
        if (retval > 0)
1170
0
            return retval;
1171
1172
31.9k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1173
31.9k
    }
1174
1175
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1176
37.7k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1177
0
        return 15;
1178
37.7k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1179
0
        return 15;
1180
1181
    /* dequantisation and scaling */
1182
37.7k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1183
37.7k
    if (retval > 0)
1184
97
        return retval;
1185
37.6k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1186
37.6k
    if (retval > 0)
1187
6
        return retval;
1188
1189
#ifdef PROFILE
1190
    count = faad_get_ts() - count;
1191
    hDecoder->requant_cycles += count;
1192
#endif
1193
1194
    /* pns decoding */
1195
37.6k
    if (ics1->ms_mask_present)
1196
9.94k
    {
1197
9.94k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1198
9.94k
            &(hDecoder->__r1), &(hDecoder->__r2));
1199
27.6k
    } else {
1200
27.6k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1201
27.6k
            &(hDecoder->__r1), &(hDecoder->__r2));
1202
27.6k
    }
1203
1204
    /* mid/side decoding */
1205
37.6k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1206
1207
#if 0
1208
    {
1209
        int i;
1210
        for (i = 0; i < 1024; i++)
1211
        {
1212
            //printf("%d\n", spec_coef1[i]);
1213
            printf("0x%.8X\n", spec_coef1[i]);
1214
        }
1215
        for (i = 0; i < 1024; i++)
1216
        {
1217
            //printf("%d\n", spec_coef2[i]);
1218
            printf("0x%.8X\n", spec_coef2[i]);
1219
        }
1220
    }
1221
#endif
1222
1223
    /* intensity stereo decoding */
1224
37.6k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1225
1226
#if 0
1227
    {
1228
        int i;
1229
        for (i = 0; i < 1024; i++)
1230
        {
1231
            printf("%d\n", spec_coef1[i]);
1232
            //printf("0x%.8X\n", spec_coef1[i]);
1233
        }
1234
        for (i = 0; i < 1024; i++)
1235
        {
1236
            printf("%d\n", spec_coef2[i]);
1237
            //printf("0x%.8X\n", spec_coef2[i]);
1238
        }
1239
    }
1240
#endif
1241
1242
#ifdef MAIN_DEC
1243
    /* MAIN object type prediction */
1244
    if (hDecoder->object_type == MAIN)
1245
    {
1246
        if (!hDecoder->pred_stat[cpe->channel] || !hDecoder->pred_stat[cpe->paired_channel])
1247
            return 33;
1248
1249
        /* intra channel prediction */
1250
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1251
            hDecoder->sf_index);
1252
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1253
            hDecoder->sf_index);
1254
1255
        /* In addition, for scalefactor bands coded by perceptual
1256
           noise substitution the predictors belonging to the
1257
           corresponding spectral coefficients are reset.
1258
        */
1259
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1260
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1261
    }
1262
#endif
1263
1264
#ifdef LTP_DEC
1265
    if (is_ltp_ot(hDecoder->object_type))
1266
    {
1267
        ltp_info *ltp1 = &(ics1->ltp);
1268
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1269
#ifdef LD_DEC
1270
        if (hDecoder->object_type == LD)
1271
        {
1272
            if (ltp1->data_present)
1273
            {
1274
                if (ltp1->lag_update)
1275
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1276
            }
1277
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1278
            if (ltp2->data_present)
1279
            {
1280
                if (ltp2->lag_update)
1281
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1282
            }
1283
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1284
        }
1285
#endif
1286
1287
        if (!hDecoder->lt_pred_stat[cpe->channel] || !hDecoder->lt_pred_stat[cpe->paired_channel])
1288
            return 34;
1289
1290
        /* long term prediction */
1291
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1292
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1293
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1294
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1295
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1296
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1297
    }
1298
#endif
1299
1300
    /* tns decoding */
1301
37.6k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1302
37.6k
        spec_coef1, hDecoder->frameLength);
1303
37.6k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1304
37.6k
        spec_coef2, hDecoder->frameLength);
1305
1306
    /* drc decoding */
1307
37.6k
#if APPLY_DRC
1308
37.6k
    if (hDecoder->drc->present)
1309
0
    {
1310
0
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1311
0
            drc_decode(hDecoder->drc, spec_coef1);
1312
0
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1313
0
            drc_decode(hDecoder->drc, spec_coef2);
1314
0
    }
1315
37.6k
#endif
1316
    /* filter bank */
1317
#ifdef SSR_DEC
1318
    if (hDecoder->object_type != SSR)
1319
    {
1320
#endif
1321
37.6k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1322
37.6k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1323
37.6k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1324
37.6k
            hDecoder->object_type, hDecoder->frameLength);
1325
37.6k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1326
37.6k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1327
37.6k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1328
37.6k
            hDecoder->object_type, hDecoder->frameLength);
1329
#ifdef SSR_DEC
1330
    } else {
1331
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1332
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1333
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1334
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1335
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1336
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1337
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1338
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1339
    }
1340
#endif
1341
1342
    /* save window shape for next frame */
1343
37.6k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1344
37.6k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1345
1346
#ifdef LTP_DEC
1347
    if (is_ltp_ot(hDecoder->object_type))
1348
    {
1349
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1350
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1351
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1352
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1353
    }
1354
#endif
1355
1356
37.6k
#ifdef SBR_DEC
1357
37.6k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
31.8k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
31.8k
    {
1360
31.8k
        int ele = hDecoder->fr_ch_ele;
1361
31.8k
        int ch0 = cpe->channel;
1362
31.8k
        int ch1 = cpe->paired_channel;
1363
1364
        /* following case can happen when forceUpSampling == 1 */
1365
31.8k
        if (hDecoder->sbr[ele] == NULL)
1366
8.75k
        {
1367
8.75k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1368
8.75k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1369
8.75k
                hDecoder->downSampledSBR
1370
8.75k
#ifdef DRM
1371
8.75k
                , 0
1372
8.75k
#endif
1373
8.75k
                );
1374
8.75k
        }
1375
31.8k
        if (!hDecoder->sbr[ele])
1376
0
            return 19;
1377
1378
31.8k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1379
1.71k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1380
30.1k
        else
1381
30.1k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1382
1383
31.8k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1384
31.8k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1385
31.8k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1386
31.8k
        if (retval > 0)
1387
4
            return retval;
1388
31.8k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1389
2
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1390
2
    {
1391
2
        return 23;
1392
2
    }
1393
37.6k
#endif
1394
1395
37.6k
    return 0;
1396
37.6k
}
reconstruct_channel_pair
Line
Count
Source
1158
25.5k
{
1159
25.5k
    uint8_t retval;
1160
25.5k
    ALIGN real_t spec_coef1[1024];
1161
25.5k
    ALIGN real_t spec_coef2[1024];
1162
1163
#ifdef PROFILE
1164
    int64_t count = faad_get_ts();
1165
#endif
1166
25.5k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1167
21.4k
    {
1168
21.4k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1169
21.4k
        if (retval > 0)
1170
0
            return retval;
1171
1172
21.4k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1173
21.4k
    }
1174
1175
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1176
25.5k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1177
0
        return 15;
1178
25.5k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1179
0
        return 15;
1180
1181
    /* dequantisation and scaling */
1182
25.5k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1183
25.5k
    if (retval > 0)
1184
63
        return retval;
1185
25.4k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1186
25.4k
    if (retval > 0)
1187
3
        return retval;
1188
1189
#ifdef PROFILE
1190
    count = faad_get_ts() - count;
1191
    hDecoder->requant_cycles += count;
1192
#endif
1193
1194
    /* pns decoding */
1195
25.4k
    if (ics1->ms_mask_present)
1196
7.61k
    {
1197
7.61k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1198
7.61k
            &(hDecoder->__r1), &(hDecoder->__r2));
1199
17.8k
    } else {
1200
17.8k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1201
17.8k
            &(hDecoder->__r1), &(hDecoder->__r2));
1202
17.8k
    }
1203
1204
    /* mid/side decoding */
1205
25.4k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1206
1207
#if 0
1208
    {
1209
        int i;
1210
        for (i = 0; i < 1024; i++)
1211
        {
1212
            //printf("%d\n", spec_coef1[i]);
1213
            printf("0x%.8X\n", spec_coef1[i]);
1214
        }
1215
        for (i = 0; i < 1024; i++)
1216
        {
1217
            //printf("%d\n", spec_coef2[i]);
1218
            printf("0x%.8X\n", spec_coef2[i]);
1219
        }
1220
    }
1221
#endif
1222
1223
    /* intensity stereo decoding */
1224
25.4k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1225
1226
#if 0
1227
    {
1228
        int i;
1229
        for (i = 0; i < 1024; i++)
1230
        {
1231
            printf("%d\n", spec_coef1[i]);
1232
            //printf("0x%.8X\n", spec_coef1[i]);
1233
        }
1234
        for (i = 0; i < 1024; i++)
1235
        {
1236
            printf("%d\n", spec_coef2[i]);
1237
            //printf("0x%.8X\n", spec_coef2[i]);
1238
        }
1239
    }
1240
#endif
1241
1242
25.4k
#ifdef MAIN_DEC
1243
    /* MAIN object type prediction */
1244
25.4k
    if (hDecoder->object_type == MAIN)
1245
12.3k
    {
1246
12.3k
        if (!hDecoder->pred_stat[cpe->channel] || !hDecoder->pred_stat[cpe->paired_channel])
1247
0
            return 33;
1248
1249
        /* intra channel prediction */
1250
12.3k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1251
12.3k
            hDecoder->sf_index);
1252
12.3k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1253
12.3k
            hDecoder->sf_index);
1254
1255
        /* In addition, for scalefactor bands coded by perceptual
1256
           noise substitution the predictors belonging to the
1257
           corresponding spectral coefficients are reset.
1258
        */
1259
12.3k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1260
12.3k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1261
12.3k
    }
1262
25.4k
#endif
1263
1264
25.4k
#ifdef LTP_DEC
1265
25.4k
    if (is_ltp_ot(hDecoder->object_type))
1266
9.77k
    {
1267
9.77k
        ltp_info *ltp1 = &(ics1->ltp);
1268
9.77k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1269
9.77k
#ifdef LD_DEC
1270
9.77k
        if (hDecoder->object_type == LD)
1271
956
        {
1272
956
            if (ltp1->data_present)
1273
176
            {
1274
176
                if (ltp1->lag_update)
1275
79
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1276
176
            }
1277
956
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1278
956
            if (ltp2->data_present)
1279
67
            {
1280
67
                if (ltp2->lag_update)
1281
26
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1282
67
            }
1283
956
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1284
956
        }
1285
9.77k
#endif
1286
1287
9.77k
        if (!hDecoder->lt_pred_stat[cpe->channel] || !hDecoder->lt_pred_stat[cpe->paired_channel])
1288
0
            return 34;
1289
1290
        /* long term prediction */
1291
9.77k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1292
9.77k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1293
9.77k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1294
9.77k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1295
9.77k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1296
9.77k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1297
9.77k
    }
1298
25.4k
#endif
1299
1300
    /* tns decoding */
1301
25.4k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1302
25.4k
        spec_coef1, hDecoder->frameLength);
1303
25.4k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1304
25.4k
        spec_coef2, hDecoder->frameLength);
1305
1306
    /* drc decoding */
1307
25.4k
#if APPLY_DRC
1308
25.4k
    if (hDecoder->drc->present)
1309
927
    {
1310
927
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1311
795
            drc_decode(hDecoder->drc, spec_coef1);
1312
927
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1313
797
            drc_decode(hDecoder->drc, spec_coef2);
1314
927
    }
1315
25.4k
#endif
1316
    /* filter bank */
1317
#ifdef SSR_DEC
1318
    if (hDecoder->object_type != SSR)
1319
    {
1320
#endif
1321
25.4k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1322
25.4k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1323
25.4k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1324
25.4k
            hDecoder->object_type, hDecoder->frameLength);
1325
25.4k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1326
25.4k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1327
25.4k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1328
25.4k
            hDecoder->object_type, hDecoder->frameLength);
1329
#ifdef SSR_DEC
1330
    } else {
1331
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1332
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1333
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1334
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1335
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1336
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1337
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1338
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1339
    }
1340
#endif
1341
1342
    /* save window shape for next frame */
1343
25.4k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1344
25.4k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1345
1346
25.4k
#ifdef LTP_DEC
1347
25.4k
    if (is_ltp_ot(hDecoder->object_type))
1348
9.77k
    {
1349
9.77k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1350
9.77k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1351
9.77k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1352
9.77k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1353
9.77k
    }
1354
25.4k
#endif
1355
1356
25.4k
#ifdef SBR_DEC
1357
25.4k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
19.1k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
19.1k
    {
1360
19.1k
        int ele = hDecoder->fr_ch_ele;
1361
19.1k
        int ch0 = cpe->channel;
1362
19.1k
        int ch1 = cpe->paired_channel;
1363
1364
        /* following case can happen when forceUpSampling == 1 */
1365
19.1k
        if (hDecoder->sbr[ele] == NULL)
1366
6.71k
        {
1367
6.71k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1368
6.71k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1369
6.71k
                hDecoder->downSampledSBR
1370
#ifdef DRM
1371
                , 0
1372
#endif
1373
6.71k
                );
1374
6.71k
        }
1375
19.1k
        if (!hDecoder->sbr[ele])
1376
43
            return 19;
1377
1378
19.0k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1379
1.62k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1380
17.4k
        else
1381
17.4k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1382
1383
19.0k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1384
19.0k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1385
19.0k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1386
19.0k
        if (retval > 0)
1387
0
            return retval;
1388
19.0k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1389
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1390
1
    {
1391
1
        return 23;
1392
1
    }
1393
25.3k
#endif
1394
1395
25.3k
    return 0;
1396
25.4k
}
reconstruct_channel_pair
Line
Count
Source
1158
17.5k
{
1159
17.5k
    uint8_t retval;
1160
17.5k
    ALIGN real_t spec_coef1[1024];
1161
17.5k
    ALIGN real_t spec_coef2[1024];
1162
1163
#ifdef PROFILE
1164
    int64_t count = faad_get_ts();
1165
#endif
1166
17.5k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1167
14.4k
    {
1168
14.4k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1169
14.4k
        if (retval > 0)
1170
0
            return retval;
1171
1172
14.4k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1173
14.4k
    }
1174
1175
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1176
17.5k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1177
0
        return 15;
1178
17.5k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1179
0
        return 15;
1180
1181
    /* dequantisation and scaling */
1182
17.5k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1183
17.5k
    if (retval > 0)
1184
3
        return retval;
1185
17.5k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1186
17.5k
    if (retval > 0)
1187
3
        return retval;
1188
1189
#ifdef PROFILE
1190
    count = faad_get_ts() - count;
1191
    hDecoder->requant_cycles += count;
1192
#endif
1193
1194
    /* pns decoding */
1195
17.5k
    if (ics1->ms_mask_present)
1196
4.81k
    {
1197
4.81k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1198
4.81k
            &(hDecoder->__r1), &(hDecoder->__r2));
1199
12.7k
    } else {
1200
12.7k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1201
12.7k
            &(hDecoder->__r1), &(hDecoder->__r2));
1202
12.7k
    }
1203
1204
    /* mid/side decoding */
1205
17.5k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1206
1207
#if 0
1208
    {
1209
        int i;
1210
        for (i = 0; i < 1024; i++)
1211
        {
1212
            //printf("%d\n", spec_coef1[i]);
1213
            printf("0x%.8X\n", spec_coef1[i]);
1214
        }
1215
        for (i = 0; i < 1024; i++)
1216
        {
1217
            //printf("%d\n", spec_coef2[i]);
1218
            printf("0x%.8X\n", spec_coef2[i]);
1219
        }
1220
    }
1221
#endif
1222
1223
    /* intensity stereo decoding */
1224
17.5k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1225
1226
#if 0
1227
    {
1228
        int i;
1229
        for (i = 0; i < 1024; i++)
1230
        {
1231
            printf("%d\n", spec_coef1[i]);
1232
            //printf("0x%.8X\n", spec_coef1[i]);
1233
        }
1234
        for (i = 0; i < 1024; i++)
1235
        {
1236
            printf("%d\n", spec_coef2[i]);
1237
            //printf("0x%.8X\n", spec_coef2[i]);
1238
        }
1239
    }
1240
#endif
1241
1242
#ifdef MAIN_DEC
1243
    /* MAIN object type prediction */
1244
    if (hDecoder->object_type == MAIN)
1245
    {
1246
        if (!hDecoder->pred_stat[cpe->channel] || !hDecoder->pred_stat[cpe->paired_channel])
1247
            return 33;
1248
1249
        /* intra channel prediction */
1250
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1251
            hDecoder->sf_index);
1252
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1253
            hDecoder->sf_index);
1254
1255
        /* In addition, for scalefactor bands coded by perceptual
1256
           noise substitution the predictors belonging to the
1257
           corresponding spectral coefficients are reset.
1258
        */
1259
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1260
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1261
    }
1262
#endif
1263
1264
17.5k
#ifdef LTP_DEC
1265
17.5k
    if (is_ltp_ot(hDecoder->object_type))
1266
6.81k
    {
1267
6.81k
        ltp_info *ltp1 = &(ics1->ltp);
1268
6.81k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1269
6.81k
#ifdef LD_DEC
1270
6.81k
        if (hDecoder->object_type == LD)
1271
412
        {
1272
412
            if (ltp1->data_present)
1273
45
            {
1274
45
                if (ltp1->lag_update)
1275
16
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1276
45
            }
1277
412
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1278
412
            if (ltp2->data_present)
1279
48
            {
1280
48
                if (ltp2->lag_update)
1281
22
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1282
48
            }
1283
412
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1284
412
        }
1285
6.81k
#endif
1286
1287
6.81k
        if (!hDecoder->lt_pred_stat[cpe->channel] || !hDecoder->lt_pred_stat[cpe->paired_channel])
1288
0
            return 34;
1289
1290
        /* long term prediction */
1291
6.81k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1292
6.81k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1293
6.81k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1294
6.81k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1295
6.81k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1296
6.81k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1297
6.81k
    }
1298
17.5k
#endif
1299
1300
    /* tns decoding */
1301
17.5k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1302
17.5k
        spec_coef1, hDecoder->frameLength);
1303
17.5k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1304
17.5k
        spec_coef2, hDecoder->frameLength);
1305
1306
    /* drc decoding */
1307
17.5k
#if APPLY_DRC
1308
17.5k
    if (hDecoder->drc->present)
1309
773
    {
1310
773
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1311
676
            drc_decode(hDecoder->drc, spec_coef1);
1312
773
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1313
701
            drc_decode(hDecoder->drc, spec_coef2);
1314
773
    }
1315
17.5k
#endif
1316
    /* filter bank */
1317
#ifdef SSR_DEC
1318
    if (hDecoder->object_type != SSR)
1319
    {
1320
#endif
1321
17.5k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1322
17.5k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1323
17.5k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1324
17.5k
            hDecoder->object_type, hDecoder->frameLength);
1325
17.5k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1326
17.5k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1327
17.5k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1328
17.5k
            hDecoder->object_type, hDecoder->frameLength);
1329
#ifdef SSR_DEC
1330
    } else {
1331
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1332
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1333
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1334
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1335
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1336
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1337
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1338
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1339
    }
1340
#endif
1341
1342
    /* save window shape for next frame */
1343
17.5k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1344
17.5k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1345
1346
17.5k
#ifdef LTP_DEC
1347
17.5k
    if (is_ltp_ot(hDecoder->object_type))
1348
6.81k
    {
1349
6.81k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1350
6.81k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1351
6.81k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1352
6.81k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1353
6.81k
    }
1354
17.5k
#endif
1355
1356
17.5k
#ifdef SBR_DEC
1357
17.5k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
15.5k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
15.5k
    {
1360
15.5k
        int ele = hDecoder->fr_ch_ele;
1361
15.5k
        int ch0 = cpe->channel;
1362
15.5k
        int ch1 = cpe->paired_channel;
1363
1364
        /* following case can happen when forceUpSampling == 1 */
1365
15.5k
        if (hDecoder->sbr[ele] == NULL)
1366
5.20k
        {
1367
5.20k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1368
5.20k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1369
5.20k
                hDecoder->downSampledSBR
1370
#ifdef DRM
1371
                , 0
1372
#endif
1373
5.20k
                );
1374
5.20k
        }
1375
15.5k
        if (!hDecoder->sbr[ele])
1376
2
            return 19;
1377
1378
15.5k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1379
490
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1380
15.0k
        else
1381
15.0k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1382
1383
15.5k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1384
15.5k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1385
15.5k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1386
15.5k
        if (retval > 0)
1387
0
            return retval;
1388
15.5k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1389
0
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1390
0
    {
1391
0
        return 23;
1392
0
    }
1393
17.5k
#endif
1394
1395
17.5k
    return 0;
1396
17.5k
}