Coverage Report

Created: 2026-03-20 06:59

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
471k
#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
639k
{
304
639k
    uint8_t i, g;
305
306
639k
    uint8_t sf_index = hDecoder->sf_index;
307
308
639k
    if (sf_index >= 12)
309
10
        return 32;
310
311
639k
    switch (ics->window_sequence) {
312
526k
    case ONLY_LONG_SEQUENCE:
313
559k
    case LONG_START_SEQUENCE:
314
571k
    case LONG_STOP_SEQUENCE:
315
571k
        ics->num_windows = 1;
316
571k
        ics->num_window_groups = 1;
317
571k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
#ifdef LD_DEC
319
419k
        if (hDecoder->object_type == LD)
320
4.76k
        {
321
4.76k
            if (hDecoder->frameLength == 512)
322
1.92k
                ics->num_swb = num_swb_512_window[sf_index];
323
2.83k
            else /* if (hDecoder->frameLength == 480) */
324
2.83k
                ics->num_swb = num_swb_480_window[sf_index];
325
414k
        } else {
326
414k
#endif
327
567k
            if (hDecoder->frameLength == 1024)
328
473k
                ics->num_swb = num_swb_1024_window[sf_index];
329
93.8k
            else /* if (hDecoder->frameLength == 960) */
330
93.8k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
571k
        if (ics->max_sfb > ics->num_swb)
336
263
        {
337
263
            return 32;
338
263
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
#ifdef LD_DEC
343
419k
        if (hDecoder->object_type == LD)
344
4.75k
        {
345
4.75k
            if (hDecoder->frameLength == 512)
346
1.91k
            {
347
48.9k
                for (i = 0; i < ics->num_swb; i++)
348
46.9k
                {
349
46.9k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
46.9k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
46.9k
                }
352
2.83k
            } else /* if (hDecoder->frameLength == 480) */ {
353
85.6k
                for (i = 0; i < ics->num_swb; i++)
354
82.7k
                {
355
82.7k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
82.7k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
82.7k
                }
358
2.83k
            }
359
4.75k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
4.75k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
4.75k
            ics->swb_offset_max = hDecoder->frameLength;
362
414k
        } else {
363
414k
#endif
364
24.5M
            for (i = 0; i < ics->num_swb; i++)
365
23.9M
            {
366
23.9M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
23.9M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
23.9M
            }
369
152k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
152k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
152k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
152k
        return 0;
376
67.3k
    case EIGHT_SHORT_SEQUENCE:
377
67.3k
        ics->num_windows = 8;
378
67.3k
        ics->num_window_groups = 1;
379
67.3k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
67.3k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
67.3k
        if (ics->max_sfb > ics->num_swb)
383
22
        {
384
22
            return 32;
385
22
        }
386
387
993k
        for (i = 0; i < ics->num_swb; i++)
388
926k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
67.3k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
67.3k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
538k
        for (i = 0; i < ics->num_windows-1; i++) {
393
471k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
382k
            {
395
382k
                ics->num_window_groups += 1;
396
382k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
382k
            } else {
398
88.6k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
88.6k
            }
400
471k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
517k
        for (g = 0; g < ics->num_window_groups; g++)
404
449k
        {
405
449k
            uint16_t width;
406
449k
            uint8_t sect_sfb = 0;
407
449k
            uint16_t offset = 0;
408
409
6.62M
            for (i = 0; i < ics->num_swb; i++)
410
6.17M
            {
411
6.17M
                if (i+1 == ics->num_swb)
412
449k
                {
413
449k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
5.72M
                } else {
415
5.72M
                    width = swb_offset_128_window[sf_index][i+1] -
416
5.72M
                        swb_offset_128_window[sf_index][i];
417
5.72M
                }
418
6.17M
                width *= ics->window_group_length[g];
419
6.17M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
6.17M
                offset += width;
421
6.17M
            }
422
449k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
449k
        }
424
67.3k
        return 0;
425
0
    default:
426
0
        return 32;
427
639k
    }
428
639k
}
window_grouping_info
Line
Count
Source
303
178k
{
304
178k
    uint8_t i, g;
305
306
178k
    uint8_t sf_index = hDecoder->sf_index;
307
308
178k
    if (sf_index >= 12)
309
4
        return 32;
310
311
178k
    switch (ics->window_sequence) {
312
137k
    case ONLY_LONG_SEQUENCE:
313
146k
    case LONG_START_SEQUENCE:
314
152k
    case LONG_STOP_SEQUENCE:
315
152k
        ics->num_windows = 1;
316
152k
        ics->num_window_groups = 1;
317
152k
        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
152k
            if (hDecoder->frameLength == 1024)
328
118k
                ics->num_swb = num_swb_1024_window[sf_index];
329
34.4k
            else /* if (hDecoder->frameLength == 960) */
330
34.4k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
152k
        if (ics->max_sfb > ics->num_swb)
336
90
        {
337
90
            return 32;
338
90
        }
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
6.69M
            for (i = 0; i < ics->num_swb; i++)
365
6.54M
            {
366
6.54M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
6.54M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
6.54M
            }
369
152k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
152k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
152k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
152k
        return 0;
376
26.0k
    case EIGHT_SHORT_SEQUENCE:
377
26.0k
        ics->num_windows = 8;
378
26.0k
        ics->num_window_groups = 1;
379
26.0k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
26.0k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
26.0k
        if (ics->max_sfb > ics->num_swb)
383
9
        {
384
9
            return 32;
385
9
        }
386
387
391k
        for (i = 0; i < ics->num_swb; i++)
388
365k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
26.0k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
26.0k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
208k
        for (i = 0; i < ics->num_windows-1; i++) {
393
182k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
147k
            {
395
147k
                ics->num_window_groups += 1;
396
147k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
147k
            } else {
398
34.9k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
34.9k
            }
400
182k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
199k
        for (g = 0; g < ics->num_window_groups; g++)
404
173k
        {
405
173k
            uint16_t width;
406
173k
            uint8_t sect_sfb = 0;
407
173k
            uint16_t offset = 0;
408
409
2.60M
            for (i = 0; i < ics->num_swb; i++)
410
2.43M
            {
411
2.43M
                if (i+1 == ics->num_swb)
412
173k
                {
413
173k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
2.25M
                } else {
415
2.25M
                    width = swb_offset_128_window[sf_index][i+1] -
416
2.25M
                        swb_offset_128_window[sf_index][i];
417
2.25M
                }
418
2.43M
                width *= ics->window_group_length[g];
419
2.43M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
2.43M
                offset += width;
421
2.43M
            }
422
173k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
173k
        }
424
26.0k
        return 0;
425
0
    default:
426
0
        return 32;
427
178k
    }
428
178k
}
window_grouping_info
Line
Count
Source
303
460k
{
304
460k
    uint8_t i, g;
305
306
460k
    uint8_t sf_index = hDecoder->sf_index;
307
308
460k
    if (sf_index >= 12)
309
6
        return 32;
310
311
460k
    switch (ics->window_sequence) {
312
388k
    case ONLY_LONG_SEQUENCE:
313
412k
    case LONG_START_SEQUENCE:
314
419k
    case LONG_STOP_SEQUENCE:
315
419k
        ics->num_windows = 1;
316
419k
        ics->num_window_groups = 1;
317
419k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
419k
#ifdef LD_DEC
319
419k
        if (hDecoder->object_type == LD)
320
4.76k
        {
321
4.76k
            if (hDecoder->frameLength == 512)
322
1.92k
                ics->num_swb = num_swb_512_window[sf_index];
323
2.83k
            else /* if (hDecoder->frameLength == 480) */
324
2.83k
                ics->num_swb = num_swb_480_window[sf_index];
325
414k
        } else {
326
414k
#endif
327
414k
            if (hDecoder->frameLength == 1024)
328
355k
                ics->num_swb = num_swb_1024_window[sf_index];
329
59.3k
            else /* if (hDecoder->frameLength == 960) */
330
59.3k
                ics->num_swb = num_swb_960_window[sf_index];
331
414k
#ifdef LD_DEC
332
414k
        }
333
419k
#endif
334
335
419k
        if (ics->max_sfb > ics->num_swb)
336
173
        {
337
173
            return 32;
338
173
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
419k
#ifdef LD_DEC
343
419k
        if (hDecoder->object_type == LD)
344
4.75k
        {
345
4.75k
            if (hDecoder->frameLength == 512)
346
1.91k
            {
347
48.9k
                for (i = 0; i < ics->num_swb; i++)
348
46.9k
                {
349
46.9k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
46.9k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
46.9k
                }
352
2.83k
            } else /* if (hDecoder->frameLength == 480) */ {
353
85.6k
                for (i = 0; i < ics->num_swb; i++)
354
82.7k
                {
355
82.7k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
82.7k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
82.7k
                }
358
2.83k
            }
359
4.75k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
4.75k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
4.75k
            ics->swb_offset_max = hDecoder->frameLength;
362
414k
        } else {
363
414k
#endif
364
17.8M
            for (i = 0; i < ics->num_swb; i++)
365
17.4M
            {
366
17.4M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
17.4M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
17.4M
            }
369
414k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
414k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
414k
            ics->swb_offset_max = hDecoder->frameLength;
372
414k
#ifdef LD_DEC
373
414k
        }
374
419k
#endif
375
419k
        return 0;
376
41.2k
    case EIGHT_SHORT_SEQUENCE:
377
41.2k
        ics->num_windows = 8;
378
41.2k
        ics->num_window_groups = 1;
379
41.2k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
41.2k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
41.2k
        if (ics->max_sfb > ics->num_swb)
383
13
        {
384
13
            return 32;
385
13
        }
386
387
601k
        for (i = 0; i < ics->num_swb; i++)
388
560k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
41.2k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
41.2k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
329k
        for (i = 0; i < ics->num_windows-1; i++) {
393
288k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
234k
            {
395
234k
                ics->num_window_groups += 1;
396
234k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
234k
            } else {
398
53.7k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
53.7k
            }
400
288k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
317k
        for (g = 0; g < ics->num_window_groups; g++)
404
276k
        {
405
276k
            uint16_t width;
406
276k
            uint8_t sect_sfb = 0;
407
276k
            uint16_t offset = 0;
408
409
4.02M
            for (i = 0; i < ics->num_swb; i++)
410
3.74M
            {
411
3.74M
                if (i+1 == ics->num_swb)
412
276k
                {
413
276k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
3.46M
                } else {
415
3.46M
                    width = swb_offset_128_window[sf_index][i+1] -
416
3.46M
                        swb_offset_128_window[sf_index][i];
417
3.46M
                }
418
3.74M
                width *= ics->window_group_length[g];
419
3.74M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
3.74M
                offset += width;
421
3.74M
            }
422
276k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
276k
        }
424
41.2k
        return 0;
425
0
    default:
426
0
        return 32;
427
460k
    }
428
460k
}
429
430
/* iquant() * output = sign(input)*abs(input)^(4/3) */
431
static INLINE real_t iquant(int16_t q, const real_t *tab, uint8_t *error)
432
679M
{
433
#ifdef FIXED_POINT
434
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
435
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
436
 * defined a 1026 value table and interpolation will be used
437
 */
438
#ifndef BIG_IQ_TABLE
439
    static const real_t errcorr[] = {
440
280M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
441
280M
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
442
280M
        REAL_CONST(0)
443
    };
444
    real_t x1, x2;
445
#endif
446
    int16_t sgn = 1;
447
448
280M
    if (q < 0)
449
135k
    {
450
135k
        q = -q;
451
135k
        sgn = -1;
452
135k
    }
453
454
280M
    if (q < IQ_TABLE_SIZE)
455
280M
    {
456
//#define IQUANT_PRINT
457
#ifdef IQUANT_PRINT
458
        //printf("0x%.8X\n", sgn * tab[q]);
459
        printf("%d\n", sgn * tab[q]);
460
#endif
461
280M
        return sgn * tab[q];
462
280M
    }
463
464
3.25k
#ifndef BIG_IQ_TABLE
465
3.25k
    if (q >= 8192)
466
555
    {
467
555
        *error = 17;
468
555
        return 0;
469
555
    }
470
471
    /* linear interpolation */
472
2.70k
    x1 = tab[q>>3];
473
2.70k
    x2 = tab[(q>>3) + 1];
474
2.70k
    return sgn * 16 * (MUL_R(errcorr[q&7],(x2-x1)) + x1);
475
#else
476
    *error = 17;
477
    return 0;
478
#endif
479
480
#else
481
398M
    if (q < 0)
482
168k
    {
483
        /* tab contains a value for all possible q [0,8192] */
484
168k
        if (-q < IQ_TABLE_SIZE)
485
166k
            return -tab[-q];
486
487
1.77k
        *error = 17;
488
1.77k
        return 0;
489
398M
    } else {
490
        /* tab contains a value for all possible q [0,8192] */
491
398M
        if (q < IQ_TABLE_SIZE)
492
398M
            return tab[q];
493
494
1.35k
        *error = 17;
495
1.35k
        return 0;
496
398M
    }
497
#endif
498
3.25k
}
specrec.c:iquant
Line
Count
Source
432
280M
{
433
280M
#ifdef FIXED_POINT
434
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
435
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
436
 * defined a 1026 value table and interpolation will be used
437
 */
438
280M
#ifndef BIG_IQ_TABLE
439
280M
    static const real_t errcorr[] = {
440
280M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
441
280M
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
442
280M
        REAL_CONST(0)
443
280M
    };
444
280M
    real_t x1, x2;
445
280M
#endif
446
280M
    int16_t sgn = 1;
447
448
280M
    if (q < 0)
449
135k
    {
450
135k
        q = -q;
451
135k
        sgn = -1;
452
135k
    }
453
454
280M
    if (q < IQ_TABLE_SIZE)
455
280M
    {
456
//#define IQUANT_PRINT
457
#ifdef IQUANT_PRINT
458
        //printf("0x%.8X\n", sgn * tab[q]);
459
        printf("%d\n", sgn * tab[q]);
460
#endif
461
280M
        return sgn * tab[q];
462
280M
    }
463
464
3.25k
#ifndef BIG_IQ_TABLE
465
3.25k
    if (q >= 8192)
466
555
    {
467
555
        *error = 17;
468
555
        return 0;
469
555
    }
470
471
    /* linear interpolation */
472
2.70k
    x1 = tab[q>>3];
473
2.70k
    x2 = tab[(q>>3) + 1];
474
2.70k
    return sgn * 16 * (MUL_R(errcorr[q&7],(x2-x1)) + x1);
475
#else
476
    *error = 17;
477
    return 0;
478
#endif
479
480
#else
481
    if (q < 0)
482
    {
483
        /* tab contains a value for all possible q [0,8192] */
484
        if (-q < IQ_TABLE_SIZE)
485
            return -tab[-q];
486
487
        *error = 17;
488
        return 0;
489
    } else {
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
    }
497
#endif
498
3.25k
}
specrec.c:iquant
Line
Count
Source
432
398M
{
433
#ifdef FIXED_POINT
434
/* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
435
/* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
436
 * defined a 1026 value table and interpolation will be used
437
 */
438
#ifndef BIG_IQ_TABLE
439
    static const real_t errcorr[] = {
440
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
441
        REAL_CONST(4.0/8.0),  REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
442
        REAL_CONST(0)
443
    };
444
    real_t x1, x2;
445
#endif
446
    int16_t sgn = 1;
447
448
    if (q < 0)
449
    {
450
        q = -q;
451
        sgn = -1;
452
    }
453
454
    if (q < IQ_TABLE_SIZE)
455
    {
456
//#define IQUANT_PRINT
457
#ifdef IQUANT_PRINT
458
        //printf("0x%.8X\n", sgn * tab[q]);
459
        printf("%d\n", sgn * tab[q]);
460
#endif
461
        return sgn * tab[q];
462
    }
463
464
#ifndef BIG_IQ_TABLE
465
    if (q >= 8192)
466
    {
467
        *error = 17;
468
        return 0;
469
    }
470
471
    /* linear interpolation */
472
    x1 = tab[q>>3];
473
    x2 = tab[(q>>3) + 1];
474
    return sgn * 16 * (MUL_R(errcorr[q&7],(x2-x1)) + x1);
475
#else
476
    *error = 17;
477
    return 0;
478
#endif
479
480
#else
481
398M
    if (q < 0)
482
168k
    {
483
        /* tab contains a value for all possible q [0,8192] */
484
168k
        if (-q < IQ_TABLE_SIZE)
485
166k
            return -tab[-q];
486
487
1.77k
        *error = 17;
488
1.77k
        return 0;
489
398M
    } else {
490
        /* tab contains a value for all possible q [0,8192] */
491
398M
        if (q < IQ_TABLE_SIZE)
492
398M
            return tab[q];
493
494
1.35k
        *error = 17;
495
1.35k
        return 0;
496
398M
    }
497
398M
#endif
498
398M
}
499
500
#ifndef FIXED_POINT
501
ALIGN static const real_t pow2sf_tab[] = {
502
    2.9802322387695313E-008, 5.9604644775390625E-008, 1.1920928955078125E-007,
503
    2.384185791015625E-007, 4.76837158203125E-007, 9.5367431640625E-007,
504
    1.9073486328125E-006, 3.814697265625E-006, 7.62939453125E-006,
505
    1.52587890625E-005, 3.0517578125E-005, 6.103515625E-005,
506
    0.0001220703125, 0.000244140625, 0.00048828125,
507
    0.0009765625, 0.001953125, 0.00390625,
508
    0.0078125, 0.015625, 0.03125,
509
    0.0625, 0.125, 0.25,
510
    0.5, 1.0, 2.0,
511
    4.0, 8.0, 16.0, 32.0,
512
    64.0, 128.0, 256.0,
513
    512.0, 1024.0, 2048.0,
514
    4096.0, 8192.0, 16384.0,
515
    32768.0, 65536.0, 131072.0,
516
    262144.0, 524288.0, 1048576.0,
517
    2097152.0, 4194304.0, 8388608.0,
518
    16777216.0, 33554432.0, 67108864.0,
519
    134217728.0, 268435456.0, 536870912.0,
520
    1073741824.0, 2147483648.0, 4294967296.0,
521
    8589934592.0, 17179869184.0, 34359738368.0,
522
    68719476736.0, 137438953472.0, 274877906944.0
523
};
524
#endif
525
526
/* quant_to_spec: perform dequantisation and scaling
527
 * and in case of short block it also does the deinterleaving
528
 */
529
/*
530
  For ONLY_LONG_SEQUENCE windows (num_window_groups = 1,
531
  window_group_length[0] = 1) the spectral data is in ascending spectral
532
  order.
533
  For the EIGHT_SHORT_SEQUENCE window, the spectral order depends on the
534
  grouping in the following manner:
535
  - Groups are ordered sequentially
536
  - Within a group, a scalefactor band consists of the spectral data of all
537
    grouped SHORT_WINDOWs for the associated scalefactor window band. To
538
    clarify via example, the length of a group is in the range of one to eight
539
    SHORT_WINDOWs.
540
  - If there are eight groups each with length one (num_window_groups = 8,
541
    window_group_length[0..7] = 1), the result is a sequence of eight spectra,
542
    each in ascending spectral order.
543
  - If there is only one group with length eight (num_window_groups = 1,
544
    window_group_length[0] = 8), the result is that spectral data of all eight
545
    SHORT_WINDOWs is interleaved by scalefactor window bands.
546
  - Within a scalefactor window band, the coefficients are in ascending
547
    spectral order.
548
*/
549
static uint8_t quant_to_spec(NeAACDecStruct *hDecoder,
550
                             ic_stream *ics, int16_t *quant_data,
551
                             real_t *spec_data, uint16_t frame_len)
552
673k
{
553
673k
    ALIGN static const real_t pow2_table[] =
554
673k
    {
555
673k
        COEF_CONST(1.0),
556
673k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
557
673k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
558
673k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
559
673k
    };
560
673k
    const real_t *tab = iq_table;
561
562
673k
    uint8_t g, sfb, win;
563
673k
    uint16_t width, bin, k, gindex;
564
673k
    uint8_t error = 0; /* Init error flag */
565
#ifndef FIXED_POINT
566
    real_t scf;
567
#else
568
    int32_t sat_shift_mask = 0;
569
#endif
570
571
673k
    k = 0;
572
673k
    gindex = 0;
573
574
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
575
     * Without peeking into AAC specification, there is no strong evidence if
576
     * such streams are invalid -> just calm down MSAN. */
577
673k
    if (ics->num_swb == 0)
578
1.12k
        memset(spec_data, 0, frame_len * sizeof(real_t));
579
580
1.74M
    for (g = 0; g < ics->num_window_groups; g++)
581
1.07M
    {
582
1.07M
        uint16_t j = 0;
583
1.07M
        uint16_t gincrease = 0;
584
1.07M
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
585
586
32.9M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
587
31.8M
        {
588
31.8M
            int32_t exp, frac;
589
31.8M
            uint16_t wa = gindex + j;
590
31.8M
            int16_t scale_factor = ics->scale_factors[g][sfb];
591
592
31.8M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
593
594
#ifdef FIXED_POINT
595
            scale_factor -= 100;
596
            /* IMDCT pre-scaling */
597
13.1M
            if (hDecoder->object_type == LD)
598
59.8k
            {
599
59.8k
                scale_factor -= 24 /*9*/;
600
13.0M
            } else {
601
13.0M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
602
2.70M
                    scale_factor -= 16 /*7*/;
603
10.3M
                else
604
10.3M
                    scale_factor -= 28 /*10*/;
605
13.0M
            }
606
13.1M
            if (scale_factor > 120)
607
619
                scale_factor = 120;  /* => exp <= 30 */
608
#else
609
            (void)hDecoder;
610
#endif
611
612
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
613
31.8M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
614
74.9k
            {
615
74.9k
                scale_factor = 0;
616
74.9k
            }
617
618
            /* scale_factor must be between 0 and 255 */
619
31.8M
            exp = (scale_factor /* - 100 */) >> 2;
620
            /* frac must always be > 0 */
621
31.8M
            frac = (scale_factor /* - 100 */) & 3;
622
623
#ifndef FIXED_POINT
624
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
625
#else
626
13.1M
            if (exp > 0)
627
25.4k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
628
#endif
629
630
65.0M
            for (win = 0; win < ics->window_group_length[g]; win++)
631
33.2M
            {
632
203M
                for (bin = 0; bin < width; bin += 4)
633
169M
                {
634
169M
                    uint16_t wb = wa + bin;
635
#ifndef FIXED_POINT
636
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
637
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
638
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
639
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
640
#else
641
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
642
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
643
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
644
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
645
646
70.2M
                    if (exp == -32)
647
62.3M
                    {
648
62.3M
                        spec_data[wb+0] = 0;
649
62.3M
                        spec_data[wb+1] = 0;
650
62.3M
                        spec_data[wb+2] = 0;
651
62.3M
                        spec_data[wb+3] = 0;
652
62.3M
                    } else if (exp <= 0) {
653
7.78M
                        spec_data[wb+0] = iq0 >> -exp;
654
7.78M
                        spec_data[wb+1] = iq1 >> -exp;
655
7.78M
                        spec_data[wb+2] = iq2 >> -exp;
656
7.78M
                        spec_data[wb+3] = iq3 >> -exp;
657
7.78M
                    } else { /* exp > 0 */
658
138k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
659
138k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
660
138k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
661
138k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
662
138k
                    }
663
70.2M
                    if (frac != 0)
664
226k
                    {
665
226k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
666
226k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
667
226k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
668
226k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
669
226k
                    }
670
671
//#define SCFS_PRINT
672
#ifdef SCFS_PRINT
673
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
674
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
675
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
676
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
677
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
#endif
682
#endif
683
684
169M
                    gincrease += 4;
685
169M
                    k += 4;
686
169M
                }
687
33.2M
                wa += win_inc;
688
33.2M
            }
689
31.8M
            j += width;
690
31.8M
        }
691
1.07M
        gindex += gincrease;
692
1.07M
    }
693
694
673k
    return error;
695
673k
}
specrec.c:quant_to_spec
Line
Count
Source
552
278k
{
553
278k
    ALIGN static const real_t pow2_table[] =
554
278k
    {
555
278k
        COEF_CONST(1.0),
556
278k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
557
278k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
558
278k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
559
278k
    };
560
278k
    const real_t *tab = iq_table;
561
562
278k
    uint8_t g, sfb, win;
563
278k
    uint16_t width, bin, k, gindex;
564
278k
    uint8_t error = 0; /* Init error flag */
565
#ifndef FIXED_POINT
566
    real_t scf;
567
#else
568
278k
    int32_t sat_shift_mask = 0;
569
278k
#endif
570
571
278k
    k = 0;
572
278k
    gindex = 0;
573
574
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
575
     * Without peeking into AAC specification, there is no strong evidence if
576
     * such streams are invalid -> just calm down MSAN. */
577
278k
    if (ics->num_swb == 0)
578
473
        memset(spec_data, 0, frame_len * sizeof(real_t));
579
580
726k
    for (g = 0; g < ics->num_window_groups; g++)
581
447k
    {
582
447k
        uint16_t j = 0;
583
447k
        uint16_t gincrease = 0;
584
447k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
585
586
13.6M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
587
13.1M
        {
588
13.1M
            int32_t exp, frac;
589
13.1M
            uint16_t wa = gindex + j;
590
13.1M
            int16_t scale_factor = ics->scale_factors[g][sfb];
591
592
13.1M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
593
594
13.1M
#ifdef FIXED_POINT
595
13.1M
            scale_factor -= 100;
596
            /* IMDCT pre-scaling */
597
13.1M
            if (hDecoder->object_type == LD)
598
59.8k
            {
599
59.8k
                scale_factor -= 24 /*9*/;
600
13.0M
            } else {
601
13.0M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
602
2.70M
                    scale_factor -= 16 /*7*/;
603
10.3M
                else
604
10.3M
                    scale_factor -= 28 /*10*/;
605
13.0M
            }
606
13.1M
            if (scale_factor > 120)
607
619
                scale_factor = 120;  /* => exp <= 30 */
608
#else
609
            (void)hDecoder;
610
#endif
611
612
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
613
13.1M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
614
44.6k
            {
615
44.6k
                scale_factor = 0;
616
44.6k
            }
617
618
            /* scale_factor must be between 0 and 255 */
619
13.1M
            exp = (scale_factor /* - 100 */) >> 2;
620
            /* frac must always be > 0 */
621
13.1M
            frac = (scale_factor /* - 100 */) & 3;
622
623
#ifndef FIXED_POINT
624
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
625
#else
626
13.1M
            if (exp > 0)
627
25.4k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
628
13.1M
#endif
629
630
26.8M
            for (win = 0; win < ics->window_group_length[g]; win++)
631
13.6M
            {
632
83.8M
                for (bin = 0; bin < width; bin += 4)
633
70.2M
                {
634
70.2M
                    uint16_t wb = wa + bin;
635
#ifndef FIXED_POINT
636
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
637
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
638
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
639
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
640
#else
641
70.2M
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
642
70.2M
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
643
70.2M
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
644
70.2M
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
645
646
70.2M
                    if (exp == -32)
647
62.3M
                    {
648
62.3M
                        spec_data[wb+0] = 0;
649
62.3M
                        spec_data[wb+1] = 0;
650
62.3M
                        spec_data[wb+2] = 0;
651
62.3M
                        spec_data[wb+3] = 0;
652
62.3M
                    } else if (exp <= 0) {
653
7.78M
                        spec_data[wb+0] = iq0 >> -exp;
654
7.78M
                        spec_data[wb+1] = iq1 >> -exp;
655
7.78M
                        spec_data[wb+2] = iq2 >> -exp;
656
7.78M
                        spec_data[wb+3] = iq3 >> -exp;
657
7.78M
                    } else { /* exp > 0 */
658
138k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
659
138k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
660
138k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
661
138k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
662
138k
                    }
663
70.2M
                    if (frac != 0)
664
226k
                    {
665
226k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
666
226k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
667
226k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
668
226k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
669
226k
                    }
670
671
//#define SCFS_PRINT
672
#ifdef SCFS_PRINT
673
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
674
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
675
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
676
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
677
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
#endif
682
70.2M
#endif
683
684
70.2M
                    gincrease += 4;
685
70.2M
                    k += 4;
686
70.2M
                }
687
13.6M
                wa += win_inc;
688
13.6M
            }
689
13.1M
            j += width;
690
13.1M
        }
691
447k
        gindex += gincrease;
692
447k
    }
693
694
278k
    return error;
695
278k
}
specrec.c:quant_to_spec
Line
Count
Source
552
395k
{
553
395k
    ALIGN static const real_t pow2_table[] =
554
395k
    {
555
395k
        COEF_CONST(1.0),
556
395k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
557
395k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
558
395k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
559
395k
    };
560
395k
    const real_t *tab = iq_table;
561
562
395k
    uint8_t g, sfb, win;
563
395k
    uint16_t width, bin, k, gindex;
564
395k
    uint8_t error = 0; /* Init error flag */
565
395k
#ifndef FIXED_POINT
566
395k
    real_t scf;
567
#else
568
    int32_t sat_shift_mask = 0;
569
#endif
570
571
395k
    k = 0;
572
395k
    gindex = 0;
573
574
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
575
     * Without peeking into AAC specification, there is no strong evidence if
576
     * such streams are invalid -> just calm down MSAN. */
577
395k
    if (ics->num_swb == 0)
578
648
        memset(spec_data, 0, frame_len * sizeof(real_t));
579
580
1.01M
    for (g = 0; g < ics->num_window_groups; g++)
581
622k
    {
582
622k
        uint16_t j = 0;
583
622k
        uint16_t gincrease = 0;
584
622k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
585
586
19.3M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
587
18.6M
        {
588
18.6M
            int32_t exp, frac;
589
18.6M
            uint16_t wa = gindex + j;
590
18.6M
            int16_t scale_factor = ics->scale_factors[g][sfb];
591
592
18.6M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
593
594
#ifdef FIXED_POINT
595
            scale_factor -= 100;
596
            /* IMDCT pre-scaling */
597
            if (hDecoder->object_type == LD)
598
            {
599
                scale_factor -= 24 /*9*/;
600
            } else {
601
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
602
                    scale_factor -= 16 /*7*/;
603
                else
604
                    scale_factor -= 28 /*10*/;
605
            }
606
            if (scale_factor > 120)
607
                scale_factor = 120;  /* => exp <= 30 */
608
#else
609
18.6M
            (void)hDecoder;
610
18.6M
#endif
611
612
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
613
18.6M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
614
30.2k
            {
615
30.2k
                scale_factor = 0;
616
30.2k
            }
617
618
            /* scale_factor must be between 0 and 255 */
619
18.6M
            exp = (scale_factor /* - 100 */) >> 2;
620
            /* frac must always be > 0 */
621
18.6M
            frac = (scale_factor /* - 100 */) & 3;
622
623
18.6M
#ifndef FIXED_POINT
624
18.6M
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
625
#else
626
            if (exp > 0)
627
                sat_shift_mask = SAT_SHIFT_MASK(exp);
628
#endif
629
630
38.2M
            for (win = 0; win < ics->window_group_length[g]; win++)
631
19.5M
            {
632
119M
                for (bin = 0; bin < width; bin += 4)
633
99.7M
                {
634
99.7M
                    uint16_t wb = wa + bin;
635
99.7M
#ifndef FIXED_POINT
636
99.7M
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
637
99.7M
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
638
99.7M
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
639
99.7M
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
640
#else
641
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
642
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
643
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
644
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
645
646
                    if (exp == -32)
647
                    {
648
                        spec_data[wb+0] = 0;
649
                        spec_data[wb+1] = 0;
650
                        spec_data[wb+2] = 0;
651
                        spec_data[wb+3] = 0;
652
                    } else if (exp <= 0) {
653
                        spec_data[wb+0] = iq0 >> -exp;
654
                        spec_data[wb+1] = iq1 >> -exp;
655
                        spec_data[wb+2] = iq2 >> -exp;
656
                        spec_data[wb+3] = iq3 >> -exp;
657
                    } else { /* exp > 0 */
658
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
659
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
660
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
661
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
662
                    }
663
                    if (frac != 0)
664
                    {
665
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
666
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
667
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
668
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
669
                    }
670
671
//#define SCFS_PRINT
672
#ifdef SCFS_PRINT
673
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
674
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
675
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
676
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
677
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
#endif
682
#endif
683
684
99.7M
                    gincrease += 4;
685
99.7M
                    k += 4;
686
99.7M
                }
687
19.5M
                wa += win_inc;
688
19.5M
            }
689
18.6M
            j += width;
690
18.6M
        }
691
622k
        gindex += gincrease;
692
622k
    }
693
694
395k
    return error;
695
395k
}
696
697
static uint8_t allocate_single_channel(NeAACDecStruct *hDecoder, uint8_t channel,
698
                                       uint8_t output_channels)
699
291k
{
700
291k
    int mul = 1;
701
702
#ifdef MAIN_DEC
703
    /* MAIN object type prediction */
704
176k
    if (hDecoder->object_type == MAIN)
705
75.9k
    {
706
        /* allocate the state only when needed */
707
75.9k
        if (hDecoder->pred_stat[channel] != NULL)
708
1.95k
        {
709
1.95k
            faad_free(hDecoder->pred_stat[channel]);
710
1.95k
            hDecoder->pred_stat[channel] = NULL;
711
1.95k
        }
712
713
75.9k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
714
75.9k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
715
75.9k
    }
716
#endif
717
718
#ifdef LTP_DEC
719
176k
    if (is_ltp_ot(hDecoder->object_type))
720
48.3k
    {
721
        /* allocate the state only when needed */
722
48.3k
        if (hDecoder->lt_pred_stat[channel] != NULL)
723
731
        {
724
731
            faad_free(hDecoder->lt_pred_stat[channel]);
725
731
            hDecoder->lt_pred_stat[channel] = NULL;
726
731
        }
727
728
48.3k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
729
48.3k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
730
48.3k
    }
731
#endif
732
733
291k
    if (hDecoder->time_out[channel] != NULL)
734
4.18k
    {
735
4.18k
        faad_free(hDecoder->time_out[channel]);
736
4.18k
        hDecoder->time_out[channel] = NULL;
737
4.18k
    }
738
739
291k
    {
740
291k
        mul = 1;
741
291k
#ifdef SBR_DEC
742
291k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
743
291k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
744
231k
        {
745
            /* SBR requires 2 times as much output data */
746
231k
            mul = 2;
747
231k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
748
231k
        }
749
291k
#endif
750
291k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
751
291k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
752
291k
    }
753
754
291k
#if (defined(PS_DEC) || defined(DRM_PS))
755
291k
    if (output_channels == 2)
756
119k
    {
757
119k
        if (hDecoder->time_out[channel+1] != NULL)
758
1.18k
        {
759
1.18k
            faad_free(hDecoder->time_out[channel+1]);
760
1.18k
            hDecoder->time_out[channel+1] = NULL;
761
1.18k
        }
762
763
119k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
764
119k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
765
119k
    }
766
291k
#endif
767
768
291k
    if (hDecoder->fb_intermed[channel] != NULL)
769
3.55k
    {
770
3.55k
        faad_free(hDecoder->fb_intermed[channel]);
771
3.55k
        hDecoder->fb_intermed[channel] = NULL;
772
3.55k
    }
773
774
291k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
775
291k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
776
777
#ifdef SSR_DEC
778
    if (hDecoder->object_type == SSR)
779
    {
780
        if (hDecoder->ssr_overlap[channel] == NULL)
781
        {
782
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
783
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
784
        }
785
        if (hDecoder->prev_fmd[channel] == NULL)
786
        {
787
            uint16_t k;
788
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
789
            for (k = 0; k < 2*hDecoder->frameLength; k++)
790
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
791
        }
792
    }
793
#endif
794
795
291k
    return 0;
796
291k
}
specrec.c:allocate_single_channel
Line
Count
Source
699
115k
{
700
115k
    int mul = 1;
701
702
#ifdef MAIN_DEC
703
    /* MAIN object type prediction */
704
    if (hDecoder->object_type == MAIN)
705
    {
706
        /* allocate the state only when needed */
707
        if (hDecoder->pred_stat[channel] != NULL)
708
        {
709
            faad_free(hDecoder->pred_stat[channel]);
710
            hDecoder->pred_stat[channel] = NULL;
711
        }
712
713
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
714
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
715
    }
716
#endif
717
718
#ifdef LTP_DEC
719
    if (is_ltp_ot(hDecoder->object_type))
720
    {
721
        /* allocate the state only when needed */
722
        if (hDecoder->lt_pred_stat[channel] != NULL)
723
        {
724
            faad_free(hDecoder->lt_pred_stat[channel]);
725
            hDecoder->lt_pred_stat[channel] = NULL;
726
        }
727
728
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
729
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
730
    }
731
#endif
732
733
115k
    if (hDecoder->time_out[channel] != NULL)
734
0
    {
735
0
        faad_free(hDecoder->time_out[channel]);
736
0
        hDecoder->time_out[channel] = NULL;
737
0
    }
738
739
115k
    {
740
115k
        mul = 1;
741
115k
#ifdef SBR_DEC
742
115k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
743
115k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
744
100k
        {
745
            /* SBR requires 2 times as much output data */
746
100k
            mul = 2;
747
100k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
748
100k
        }
749
115k
#endif
750
115k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
751
115k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
752
115k
    }
753
754
115k
#if (defined(PS_DEC) || defined(DRM_PS))
755
115k
    if (output_channels == 2)
756
115k
    {
757
115k
        if (hDecoder->time_out[channel+1] != NULL)
758
0
        {
759
0
            faad_free(hDecoder->time_out[channel+1]);
760
0
            hDecoder->time_out[channel+1] = NULL;
761
0
        }
762
763
115k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
764
115k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
765
115k
    }
766
115k
#endif
767
768
115k
    if (hDecoder->fb_intermed[channel] != NULL)
769
0
    {
770
0
        faad_free(hDecoder->fb_intermed[channel]);
771
0
        hDecoder->fb_intermed[channel] = NULL;
772
0
    }
773
774
115k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
775
115k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
776
777
#ifdef SSR_DEC
778
    if (hDecoder->object_type == SSR)
779
    {
780
        if (hDecoder->ssr_overlap[channel] == NULL)
781
        {
782
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
783
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
784
        }
785
        if (hDecoder->prev_fmd[channel] == NULL)
786
        {
787
            uint16_t k;
788
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
789
            for (k = 0; k < 2*hDecoder->frameLength; k++)
790
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
791
        }
792
    }
793
#endif
794
795
115k
    return 0;
796
115k
}
specrec.c:allocate_single_channel
Line
Count
Source
699
176k
{
700
176k
    int mul = 1;
701
702
176k
#ifdef MAIN_DEC
703
    /* MAIN object type prediction */
704
176k
    if (hDecoder->object_type == MAIN)
705
75.9k
    {
706
        /* allocate the state only when needed */
707
75.9k
        if (hDecoder->pred_stat[channel] != NULL)
708
1.95k
        {
709
1.95k
            faad_free(hDecoder->pred_stat[channel]);
710
1.95k
            hDecoder->pred_stat[channel] = NULL;
711
1.95k
        }
712
713
75.9k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
714
75.9k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
715
75.9k
    }
716
176k
#endif
717
718
176k
#ifdef LTP_DEC
719
176k
    if (is_ltp_ot(hDecoder->object_type))
720
48.3k
    {
721
        /* allocate the state only when needed */
722
48.3k
        if (hDecoder->lt_pred_stat[channel] != NULL)
723
731
        {
724
731
            faad_free(hDecoder->lt_pred_stat[channel]);
725
731
            hDecoder->lt_pred_stat[channel] = NULL;
726
731
        }
727
728
48.3k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
729
48.3k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
730
48.3k
    }
731
176k
#endif
732
733
176k
    if (hDecoder->time_out[channel] != NULL)
734
4.18k
    {
735
4.18k
        faad_free(hDecoder->time_out[channel]);
736
4.18k
        hDecoder->time_out[channel] = NULL;
737
4.18k
    }
738
739
176k
    {
740
176k
        mul = 1;
741
176k
#ifdef SBR_DEC
742
176k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
743
176k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
744
131k
        {
745
            /* SBR requires 2 times as much output data */
746
131k
            mul = 2;
747
131k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
748
131k
        }
749
176k
#endif
750
176k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
751
176k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
752
176k
    }
753
754
176k
#if (defined(PS_DEC) || defined(DRM_PS))
755
176k
    if (output_channels == 2)
756
4.35k
    {
757
4.35k
        if (hDecoder->time_out[channel+1] != NULL)
758
1.18k
        {
759
1.18k
            faad_free(hDecoder->time_out[channel+1]);
760
1.18k
            hDecoder->time_out[channel+1] = NULL;
761
1.18k
        }
762
763
4.35k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
764
4.35k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
765
4.35k
    }
766
176k
#endif
767
768
176k
    if (hDecoder->fb_intermed[channel] != NULL)
769
3.55k
    {
770
3.55k
        faad_free(hDecoder->fb_intermed[channel]);
771
3.55k
        hDecoder->fb_intermed[channel] = NULL;
772
3.55k
    }
773
774
176k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
775
176k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
776
777
#ifdef SSR_DEC
778
    if (hDecoder->object_type == SSR)
779
    {
780
        if (hDecoder->ssr_overlap[channel] == NULL)
781
        {
782
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
783
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
784
        }
785
        if (hDecoder->prev_fmd[channel] == NULL)
786
        {
787
            uint16_t k;
788
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
789
            for (k = 0; k < 2*hDecoder->frameLength; k++)
790
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
791
        }
792
    }
793
#endif
794
795
176k
    return 0;
796
176k
}
797
798
static uint8_t allocate_channel_pair(NeAACDecStruct *hDecoder,
799
                                     uint8_t channel, uint8_t paired_channel)
800
44.8k
{
801
44.8k
    int mul = 1;
802
803
#ifdef MAIN_DEC
804
    /* MAIN object type prediction */
805
20.1k
    if (hDecoder->object_type == MAIN)
806
10.1k
    {
807
        /* allocate the state only when needed */
808
10.1k
        if (hDecoder->pred_stat[channel] == NULL)
809
10.1k
        {
810
10.1k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
811
10.1k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
812
10.1k
        }
813
10.1k
        if (hDecoder->pred_stat[paired_channel] == NULL)
814
10.1k
        {
815
10.1k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
816
10.1k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
817
10.1k
        }
818
10.1k
    }
819
#endif
820
821
#ifdef LTP_DEC
822
20.1k
    if (is_ltp_ot(hDecoder->object_type))
823
7.53k
    {
824
        /* allocate the state only when needed */
825
7.53k
        if (hDecoder->lt_pred_stat[channel] == NULL)
826
7.48k
        {
827
7.48k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
828
7.48k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
829
7.48k
        }
830
7.53k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
831
7.48k
        {
832
7.48k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
833
7.48k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
834
7.48k
        }
835
7.53k
    }
836
#endif
837
838
44.8k
    {
839
44.8k
        mul = 1;
840
44.8k
#ifdef SBR_DEC
841
44.8k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
842
44.8k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
843
37.1k
        {
844
            /* SBR requires 2 times as much output data */
845
37.1k
            mul = 2;
846
37.1k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
847
37.1k
        }
848
44.8k
#endif
849
44.8k
    }
850
44.8k
    if (hDecoder->time_out[channel] == NULL)
851
44.7k
    {
852
44.7k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
853
44.7k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
854
44.7k
    }
855
44.8k
    if (hDecoder->time_out[paired_channel] == NULL)
856
44.7k
    {
857
44.7k
        hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
858
44.7k
        memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
859
44.7k
    }
860
861
44.8k
    if (hDecoder->fb_intermed[channel] == NULL)
862
44.7k
    {
863
44.7k
        hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
864
44.7k
        memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
865
44.7k
    }
866
44.8k
    if (hDecoder->fb_intermed[paired_channel] == NULL)
867
44.7k
    {
868
44.7k
        hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
869
44.7k
        memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
870
44.7k
    }
871
872
#ifdef SSR_DEC
873
    if (hDecoder->object_type == SSR)
874
    {
875
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
876
        {
877
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
878
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
879
        }
880
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
881
        {
882
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
883
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
884
        }
885
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
886
        {
887
            uint16_t k;
888
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
889
            for (k = 0; k < 2*hDecoder->frameLength; k++)
890
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
891
        }
892
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
893
        {
894
            uint16_t k;
895
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
896
            for (k = 0; k < 2*hDecoder->frameLength; k++)
897
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
898
        }
899
    }
900
#endif
901
902
44.8k
    return 0;
903
44.8k
}
specrec.c:allocate_channel_pair
Line
Count
Source
800
24.7k
{
801
24.7k
    int mul = 1;
802
803
#ifdef MAIN_DEC
804
    /* MAIN object type prediction */
805
    if (hDecoder->object_type == MAIN)
806
    {
807
        /* allocate the state only when needed */
808
        if (hDecoder->pred_stat[channel] == NULL)
809
        {
810
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
811
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
812
        }
813
        if (hDecoder->pred_stat[paired_channel] == NULL)
814
        {
815
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
816
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
817
        }
818
    }
819
#endif
820
821
#ifdef LTP_DEC
822
    if (is_ltp_ot(hDecoder->object_type))
823
    {
824
        /* allocate the state only when needed */
825
        if (hDecoder->lt_pred_stat[channel] == NULL)
826
        {
827
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
828
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
829
        }
830
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
831
        {
832
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
833
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
834
        }
835
    }
836
#endif
837
838
24.7k
    {
839
24.7k
        mul = 1;
840
24.7k
#ifdef SBR_DEC
841
24.7k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
842
24.7k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
843
22.0k
        {
844
            /* SBR requires 2 times as much output data */
845
22.0k
            mul = 2;
846
22.0k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
847
22.0k
        }
848
24.7k
#endif
849
24.7k
    }
850
24.7k
    if (hDecoder->time_out[channel] == NULL)
851
24.7k
    {
852
24.7k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
853
24.7k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
854
24.7k
    }
855
24.7k
    if (hDecoder->time_out[paired_channel] == NULL)
856
24.7k
    {
857
24.7k
        hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
858
24.7k
        memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
859
24.7k
    }
860
861
24.7k
    if (hDecoder->fb_intermed[channel] == NULL)
862
24.7k
    {
863
24.7k
        hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
864
24.7k
        memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
865
24.7k
    }
866
24.7k
    if (hDecoder->fb_intermed[paired_channel] == NULL)
867
24.7k
    {
868
24.7k
        hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
869
24.7k
        memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
870
24.7k
    }
871
872
#ifdef SSR_DEC
873
    if (hDecoder->object_type == SSR)
874
    {
875
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
876
        {
877
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
878
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
879
        }
880
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
881
        {
882
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
883
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
884
        }
885
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
886
        {
887
            uint16_t k;
888
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
889
            for (k = 0; k < 2*hDecoder->frameLength; k++)
890
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
891
        }
892
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
893
        {
894
            uint16_t k;
895
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
896
            for (k = 0; k < 2*hDecoder->frameLength; k++)
897
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
898
        }
899
    }
900
#endif
901
902
24.7k
    return 0;
903
24.7k
}
specrec.c:allocate_channel_pair
Line
Count
Source
800
20.1k
{
801
20.1k
    int mul = 1;
802
803
20.1k
#ifdef MAIN_DEC
804
    /* MAIN object type prediction */
805
20.1k
    if (hDecoder->object_type == MAIN)
806
10.1k
    {
807
        /* allocate the state only when needed */
808
10.1k
        if (hDecoder->pred_stat[channel] == NULL)
809
10.1k
        {
810
10.1k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
811
10.1k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
812
10.1k
        }
813
10.1k
        if (hDecoder->pred_stat[paired_channel] == NULL)
814
10.1k
        {
815
10.1k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
816
10.1k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
817
10.1k
        }
818
10.1k
    }
819
20.1k
#endif
820
821
20.1k
#ifdef LTP_DEC
822
20.1k
    if (is_ltp_ot(hDecoder->object_type))
823
7.53k
    {
824
        /* allocate the state only when needed */
825
7.53k
        if (hDecoder->lt_pred_stat[channel] == NULL)
826
7.48k
        {
827
7.48k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
828
7.48k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
829
7.48k
        }
830
7.53k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
831
7.48k
        {
832
7.48k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
833
7.48k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
834
7.48k
        }
835
7.53k
    }
836
20.1k
#endif
837
838
20.1k
    {
839
20.1k
        mul = 1;
840
20.1k
#ifdef SBR_DEC
841
20.1k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
842
20.1k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
843
15.1k
        {
844
            /* SBR requires 2 times as much output data */
845
15.1k
            mul = 2;
846
15.1k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
847
15.1k
        }
848
20.1k
#endif
849
20.1k
    }
850
20.1k
    if (hDecoder->time_out[channel] == NULL)
851
20.0k
    {
852
20.0k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
853
20.0k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
854
20.0k
    }
855
20.1k
    if (hDecoder->time_out[paired_channel] == NULL)
856
20.0k
    {
857
20.0k
        hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
858
20.0k
        memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
859
20.0k
    }
860
861
20.1k
    if (hDecoder->fb_intermed[channel] == NULL)
862
20.0k
    {
863
20.0k
        hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
864
20.0k
        memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
865
20.0k
    }
866
20.1k
    if (hDecoder->fb_intermed[paired_channel] == NULL)
867
20.0k
    {
868
20.0k
        hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
869
20.0k
        memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
870
20.0k
    }
871
872
#ifdef SSR_DEC
873
    if (hDecoder->object_type == SSR)
874
    {
875
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
876
        {
877
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
878
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
879
        }
880
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
881
        {
882
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
883
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
884
        }
885
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
886
        {
887
            uint16_t k;
888
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
889
            for (k = 0; k < 2*hDecoder->frameLength; k++)
890
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
891
        }
892
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
893
        {
894
            uint16_t k;
895
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
896
            for (k = 0; k < 2*hDecoder->frameLength; k++)
897
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
898
        }
899
    }
900
#endif
901
902
20.1k
    return 0;
903
20.1k
}
904
905
uint8_t reconstruct_single_channel(NeAACDecStruct *hDecoder, ic_stream *ics,
906
                                   element *sce, int16_t *spec_data)
907
528k
{
908
528k
    uint8_t retval;
909
528k
    uint8_t output_channels;
910
528k
    ALIGN real_t spec_coef[1024];
911
912
#ifdef PROFILE
913
    int64_t count = faad_get_ts();
914
#endif
915
916
917
    /* always allocate 2 channels, PS can always "suddenly" turn up */
918
#if ( (defined(DRM) && defined(DRM_PS)) )
919
    output_channels = 2;
920
#elif defined(PS_DEC)
921
393k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
922
11.7k
        output_channels = 2;
923
381k
    else
924
381k
        output_channels = 1;
925
#else
926
    output_channels = 1;
927
#endif
928
929
528k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
930
462k
    {
931
        /* element_output_channels not set yet */
932
462k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
933
462k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
934
        /* element inconsistency */
935
936
        /* this only happens if PS is actually found but not in the first frame
937
         * this means that there is only 1 bitstream element!
938
         */
939
940
        /* The simplest way to fix the accounting,
941
         * is to reallocate this and all the following channels.
942
         */
943
1.30k
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
944
1.30k
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
945
946
1.30k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
947
948
        //return 21;
949
1.30k
    }
950
951
528k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
952
470k
    {
953
470k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
954
470k
        if (retval > 0)
955
0
            return retval;
956
957
470k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
958
470k
    }
959
960
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
961
528k
    if(!hDecoder->time_out[sce->channel])
962
0
        return 15;
963
528k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
964
0
        return 15;
965
528k
    if(!hDecoder->fb_intermed[sce->channel])
966
0
        return 15;
967
968
    /* dequantisation and scaling */
969
528k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
970
528k
    if (retval > 0)
971
191
        return retval;
972
973
#ifdef PROFILE
974
    count = faad_get_ts() - count;
975
    hDecoder->requant_cycles += count;
976
#endif
977
978
979
    /* pns decoding */
980
528k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
981
528k
        &(hDecoder->__r1), &(hDecoder->__r2));
982
983
#ifdef MAIN_DEC
984
    /* MAIN object type prediction */
985
199k
    if (hDecoder->object_type == MAIN)
986
86.2k
    {
987
86.2k
    if (!hDecoder->pred_stat[sce->channel])
988
0
      return 33;
989
990
        /* intra channel prediction */
991
86.2k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
992
86.2k
            hDecoder->sf_index);
993
994
        /* In addition, for scalefactor bands coded by perceptual
995
           noise substitution the predictors belonging to the
996
           corresponding spectral coefficients are reset.
997
        */
998
86.2k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
999
86.2k
    }
1000
199k
#endif
1001
1002
#ifdef LTP_DEC
1003
393k
    if (is_ltp_ot(hDecoder->object_type))
1004
171k
    {
1005
171k
#ifdef LD_DEC
1006
171k
        if (hDecoder->object_type == LD)
1007
1.13k
        {
1008
1.13k
            if (ics->ltp.data_present)
1009
140
            {
1010
140
                if (ics->ltp.lag_update)
1011
40
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1012
140
            }
1013
1.13k
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1014
1.13k
        }
1015
171k
#endif
1016
1017
        /* long term prediction */
1018
171k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1019
171k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1020
171k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1021
171k
    }
1022
199k
#endif
1023
1024
    /* tns decoding */
1025
199k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1026
199k
        spec_coef, hDecoder->frameLength);
1027
1028
    /* drc decoding */
1029
199k
#ifdef APPLY_DRC
1030
528k
    if (hDecoder->drc->present)
1031
24.5k
    {
1032
24.5k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1033
22.2k
            drc_decode(hDecoder->drc, spec_coef);
1034
24.5k
    }
1035
199k
#endif
1036
    /* filter bank */
1037
#ifdef SSR_DEC
1038
    if (hDecoder->object_type != SSR)
1039
    {
1040
#endif
1041
199k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1042
199k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1043
199k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1044
199k
            hDecoder->object_type, hDecoder->frameLength);
1045
#ifdef SSR_DEC
1046
    } else {
1047
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1048
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1049
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1050
            hDecoder->frameLength);
1051
    }
1052
#endif
1053
1054
    /* save window shape for next frame */
1055
199k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1056
1057
#ifdef LTP_DEC
1058
393k
    if (is_ltp_ot(hDecoder->object_type))
1059
171k
    {
1060
171k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1061
171k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1062
171k
    }
1063
#endif
1064
1065
199k
#ifdef SBR_DEC
1066
528k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1067
418k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1068
418k
    {
1069
418k
        int ele = hDecoder->fr_ch_ele;
1070
418k
        int ch = sce->channel;
1071
1072
        /* following case can happen when forceUpSampling == 1 */
1073
418k
        if (hDecoder->sbr[ele] == NULL)
1074
316k
        {
1075
316k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1076
316k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1077
316k
                hDecoder->downSampledSBR
1078
#ifdef DRM
1079
                , 0
1080
#endif
1081
316k
                );
1082
316k
        }
1083
418k
        if (!hDecoder->sbr[ele])
1084
87
            return 19;
1085
1086
418k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1087
50.1k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1088
368k
        else
1089
368k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1090
1091
        /* check if any of the PS tools is used */
1092
418k
#if (defined(PS_DEC) || defined(DRM_PS))
1093
418k
        if (hDecoder->ps_used[ele] == 0)
1094
397k
        {
1095
397k
#endif
1096
397k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1097
397k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1098
397k
#if (defined(PS_DEC) || defined(DRM_PS))
1099
397k
        } else {
1100
21.1k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1101
21.1k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1102
21.1k
                hDecoder->downSampledSBR);
1103
21.1k
        }
1104
418k
#endif
1105
418k
        if (retval > 0)
1106
75
            return retval;
1107
418k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1108
13
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1109
13
    {
1110
13
        return 23;
1111
13
    }
1112
528k
#endif
1113
1114
    /* copy L to R when no PS is used */
1115
528k
#if (defined(PS_DEC) || defined(DRM_PS))
1116
528k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1117
507k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1118
125k
    {
1119
125k
        int ele = hDecoder->fr_ch_ele;
1120
125k
        int ch = sce->channel;
1121
125k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1122
125k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1123
1124
125k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1125
125k
    }
1126
528k
#endif
1127
1128
528k
    return 0;
1129
199k
}
reconstruct_single_channel
Line
Count
Source
907
134k
{
908
134k
    uint8_t retval;
909
134k
    uint8_t output_channels;
910
134k
    ALIGN real_t spec_coef[1024];
911
912
#ifdef PROFILE
913
    int64_t count = faad_get_ts();
914
#endif
915
916
917
    /* always allocate 2 channels, PS can always "suddenly" turn up */
918
134k
#if ( (defined(DRM) && defined(DRM_PS)) )
919
134k
    output_channels = 2;
920
#elif defined(PS_DEC)
921
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
922
        output_channels = 2;
923
    else
924
        output_channels = 1;
925
#else
926
    output_channels = 1;
927
#endif
928
929
134k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
930
115k
    {
931
        /* element_output_channels not set yet */
932
115k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
933
115k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
934
        /* element inconsistency */
935
936
        /* this only happens if PS is actually found but not in the first frame
937
         * this means that there is only 1 bitstream element!
938
         */
939
940
        /* The simplest way to fix the accounting,
941
         * is to reallocate this and all the following channels.
942
         */
943
0
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
944
0
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
945
946
0
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
947
948
        //return 21;
949
0
    }
950
951
134k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
952
115k
    {
953
115k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
954
115k
        if (retval > 0)
955
0
            return retval;
956
957
115k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
958
115k
    }
959
960
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
961
134k
    if(!hDecoder->time_out[sce->channel])
962
0
        return 15;
963
134k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
964
0
        return 15;
965
134k
    if(!hDecoder->fb_intermed[sce->channel])
966
0
        return 15;
967
968
    /* dequantisation and scaling */
969
134k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
970
134k
    if (retval > 0)
971
69
        return retval;
972
973
#ifdef PROFILE
974
    count = faad_get_ts() - count;
975
    hDecoder->requant_cycles += count;
976
#endif
977
978
979
    /* pns decoding */
980
134k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
981
134k
        &(hDecoder->__r1), &(hDecoder->__r2));
982
983
#ifdef MAIN_DEC
984
    /* MAIN object type prediction */
985
    if (hDecoder->object_type == MAIN)
986
    {
987
    if (!hDecoder->pred_stat[sce->channel])
988
      return 33;
989
990
        /* intra channel prediction */
991
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
992
            hDecoder->sf_index);
993
994
        /* In addition, for scalefactor bands coded by perceptual
995
           noise substitution the predictors belonging to the
996
           corresponding spectral coefficients are reset.
997
        */
998
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
999
    }
1000
#endif
1001
1002
#ifdef LTP_DEC
1003
    if (is_ltp_ot(hDecoder->object_type))
1004
    {
1005
#ifdef LD_DEC
1006
        if (hDecoder->object_type == LD)
1007
        {
1008
            if (ics->ltp.data_present)
1009
            {
1010
                if (ics->ltp.lag_update)
1011
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1012
            }
1013
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1014
        }
1015
#endif
1016
1017
        /* long term prediction */
1018
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1019
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1020
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1021
    }
1022
#endif
1023
1024
    /* tns decoding */
1025
134k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1026
134k
        spec_coef, hDecoder->frameLength);
1027
1028
    /* drc decoding */
1029
134k
#ifdef APPLY_DRC
1030
134k
    if (hDecoder->drc->present)
1031
0
    {
1032
0
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1033
0
            drc_decode(hDecoder->drc, spec_coef);
1034
0
    }
1035
134k
#endif
1036
    /* filter bank */
1037
#ifdef SSR_DEC
1038
    if (hDecoder->object_type != SSR)
1039
    {
1040
#endif
1041
134k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1042
134k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1043
134k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1044
134k
            hDecoder->object_type, hDecoder->frameLength);
1045
#ifdef SSR_DEC
1046
    } else {
1047
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1048
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1049
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1050
            hDecoder->frameLength);
1051
    }
1052
#endif
1053
1054
    /* save window shape for next frame */
1055
134k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1056
1057
#ifdef LTP_DEC
1058
    if (is_ltp_ot(hDecoder->object_type))
1059
    {
1060
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1061
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1062
    }
1063
#endif
1064
1065
134k
#ifdef SBR_DEC
1066
134k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1067
118k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1068
118k
    {
1069
118k
        int ele = hDecoder->fr_ch_ele;
1070
118k
        int ch = sce->channel;
1071
1072
        /* following case can happen when forceUpSampling == 1 */
1073
118k
        if (hDecoder->sbr[ele] == NULL)
1074
82.3k
        {
1075
82.3k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1076
82.3k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1077
82.3k
                hDecoder->downSampledSBR
1078
82.3k
#ifdef DRM
1079
82.3k
                , 0
1080
82.3k
#endif
1081
82.3k
                );
1082
82.3k
        }
1083
118k
        if (!hDecoder->sbr[ele])
1084
0
            return 19;
1085
1086
118k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1087
18.0k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1088
100k
        else
1089
100k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1090
1091
        /* check if any of the PS tools is used */
1092
118k
#if (defined(PS_DEC) || defined(DRM_PS))
1093
118k
        if (hDecoder->ps_used[ele] == 0)
1094
109k
        {
1095
109k
#endif
1096
109k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1097
109k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1098
109k
#if (defined(PS_DEC) || defined(DRM_PS))
1099
109k
        } else {
1100
9.37k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1101
9.37k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1102
9.37k
                hDecoder->downSampledSBR);
1103
9.37k
        }
1104
118k
#endif
1105
118k
        if (retval > 0)
1106
15
            return retval;
1107
118k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1108
2
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1109
2
    {
1110
2
        return 23;
1111
2
    }
1112
134k
#endif
1113
1114
    /* copy L to R when no PS is used */
1115
134k
#if (defined(PS_DEC) || defined(DRM_PS))
1116
134k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1117
125k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1118
125k
    {
1119
125k
        int ele = hDecoder->fr_ch_ele;
1120
125k
        int ch = sce->channel;
1121
125k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1122
125k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1123
1124
125k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1125
125k
    }
1126
134k
#endif
1127
1128
134k
    return 0;
1129
134k
}
reconstruct_single_channel
Line
Count
Source
907
199k
{
908
199k
    uint8_t retval;
909
199k
    uint8_t output_channels;
910
199k
    ALIGN real_t spec_coef[1024];
911
912
#ifdef PROFILE
913
    int64_t count = faad_get_ts();
914
#endif
915
916
917
    /* always allocate 2 channels, PS can always "suddenly" turn up */
918
#if ( (defined(DRM) && defined(DRM_PS)) )
919
    output_channels = 2;
920
#elif defined(PS_DEC)
921
199k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
922
6.02k
        output_channels = 2;
923
193k
    else
924
193k
        output_channels = 1;
925
#else
926
    output_channels = 1;
927
#endif
928
929
199k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
930
171k
    {
931
        /* element_output_channels not set yet */
932
171k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
933
171k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
934
        /* element inconsistency */
935
936
        /* this only happens if PS is actually found but not in the first frame
937
         * this means that there is only 1 bitstream element!
938
         */
939
940
        /* The simplest way to fix the accounting,
941
         * is to reallocate this and all the following channels.
942
         */
943
557
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
944
557
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
945
946
557
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
947
948
        //return 21;
949
557
    }
950
951
199k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
952
176k
    {
953
176k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
954
176k
        if (retval > 0)
955
0
            return retval;
956
957
176k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
958
176k
    }
959
960
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
961
199k
    if(!hDecoder->time_out[sce->channel])
962
0
        return 15;
963
199k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
964
0
        return 15;
965
199k
    if(!hDecoder->fb_intermed[sce->channel])
966
0
        return 15;
967
968
    /* dequantisation and scaling */
969
199k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
970
199k
    if (retval > 0)
971
72
        return retval;
972
973
#ifdef PROFILE
974
    count = faad_get_ts() - count;
975
    hDecoder->requant_cycles += count;
976
#endif
977
978
979
    /* pns decoding */
980
199k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
981
199k
        &(hDecoder->__r1), &(hDecoder->__r2));
982
983
199k
#ifdef MAIN_DEC
984
    /* MAIN object type prediction */
985
199k
    if (hDecoder->object_type == MAIN)
986
86.2k
    {
987
86.2k
    if (!hDecoder->pred_stat[sce->channel])
988
0
      return 33;
989
990
        /* intra channel prediction */
991
86.2k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
992
86.2k
            hDecoder->sf_index);
993
994
        /* In addition, for scalefactor bands coded by perceptual
995
           noise substitution the predictors belonging to the
996
           corresponding spectral coefficients are reset.
997
        */
998
86.2k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
999
86.2k
    }
1000
199k
#endif
1001
1002
199k
#ifdef LTP_DEC
1003
199k
    if (is_ltp_ot(hDecoder->object_type))
1004
51.2k
    {
1005
51.2k
#ifdef LD_DEC
1006
51.2k
        if (hDecoder->object_type == LD)
1007
617
        {
1008
617
            if (ics->ltp.data_present)
1009
81
            {
1010
81
                if (ics->ltp.lag_update)
1011
18
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1012
81
            }
1013
617
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1014
617
        }
1015
51.2k
#endif
1016
1017
        /* long term prediction */
1018
51.2k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1019
51.2k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1020
51.2k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1021
51.2k
    }
1022
199k
#endif
1023
1024
    /* tns decoding */
1025
199k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1026
199k
        spec_coef, hDecoder->frameLength);
1027
1028
    /* drc decoding */
1029
199k
#ifdef APPLY_DRC
1030
199k
    if (hDecoder->drc->present)
1031
12.6k
    {
1032
12.6k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1033
11.7k
            drc_decode(hDecoder->drc, spec_coef);
1034
12.6k
    }
1035
199k
#endif
1036
    /* filter bank */
1037
#ifdef SSR_DEC
1038
    if (hDecoder->object_type != SSR)
1039
    {
1040
#endif
1041
199k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1042
199k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1043
199k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1044
199k
            hDecoder->object_type, hDecoder->frameLength);
1045
#ifdef SSR_DEC
1046
    } else {
1047
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1048
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1049
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1050
            hDecoder->frameLength);
1051
    }
1052
#endif
1053
1054
    /* save window shape for next frame */
1055
199k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1056
1057
199k
#ifdef LTP_DEC
1058
199k
    if (is_ltp_ot(hDecoder->object_type))
1059
51.2k
    {
1060
51.2k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1061
51.2k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1062
51.2k
    }
1063
199k
#endif
1064
1065
199k
#ifdef SBR_DEC
1066
199k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1067
149k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1068
149k
    {
1069
149k
        int ele = hDecoder->fr_ch_ele;
1070
149k
        int ch = sce->channel;
1071
1072
        /* following case can happen when forceUpSampling == 1 */
1073
149k
        if (hDecoder->sbr[ele] == NULL)
1074
112k
        {
1075
112k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1076
112k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1077
112k
                hDecoder->downSampledSBR
1078
#ifdef DRM
1079
                , 0
1080
#endif
1081
112k
                );
1082
112k
        }
1083
149k
        if (!hDecoder->sbr[ele])
1084
30
            return 19;
1085
1086
149k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1087
18.7k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1088
130k
        else
1089
130k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1090
1091
        /* check if any of the PS tools is used */
1092
149k
#if (defined(PS_DEC) || defined(DRM_PS))
1093
149k
        if (hDecoder->ps_used[ele] == 0)
1094
143k
        {
1095
143k
#endif
1096
143k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1097
143k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1098
143k
#if (defined(PS_DEC) || defined(DRM_PS))
1099
143k
        } else {
1100
6.02k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1101
6.02k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1102
6.02k
                hDecoder->downSampledSBR);
1103
6.02k
        }
1104
149k
#endif
1105
149k
        if (retval > 0)
1106
37
            return retval;
1107
149k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1108
5
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1109
5
    {
1110
5
        return 23;
1111
5
    }
1112
199k
#endif
1113
1114
    /* copy L to R when no PS is used */
1115
199k
#if (defined(PS_DEC) || defined(DRM_PS))
1116
199k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1117
193k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1118
0
    {
1119
0
        int ele = hDecoder->fr_ch_ele;
1120
0
        int ch = sce->channel;
1121
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1122
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1123
1124
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1125
0
    }
1126
199k
#endif
1127
1128
199k
    return 0;
1129
199k
}
reconstruct_single_channel
Line
Count
Source
907
194k
{
908
194k
    uint8_t retval;
909
194k
    uint8_t output_channels;
910
194k
    ALIGN real_t spec_coef[1024];
911
912
#ifdef PROFILE
913
    int64_t count = faad_get_ts();
914
#endif
915
916
917
    /* always allocate 2 channels, PS can always "suddenly" turn up */
918
#if ( (defined(DRM) && defined(DRM_PS)) )
919
    output_channels = 2;
920
#elif defined(PS_DEC)
921
194k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
922
5.70k
        output_channels = 2;
923
188k
    else
924
188k
        output_channels = 1;
925
#else
926
    output_channels = 1;
927
#endif
928
929
194k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
930
175k
    {
931
        /* element_output_channels not set yet */
932
175k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
933
175k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
934
        /* element inconsistency */
935
936
        /* this only happens if PS is actually found but not in the first frame
937
         * this means that there is only 1 bitstream element!
938
         */
939
940
        /* The simplest way to fix the accounting,
941
         * is to reallocate this and all the following channels.
942
         */
943
750
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
944
750
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
945
946
750
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
947
948
        //return 21;
949
750
    }
950
951
194k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
952
179k
    {
953
179k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
954
179k
        if (retval > 0)
955
0
            return retval;
956
957
179k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
958
179k
    }
959
960
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
961
194k
    if(!hDecoder->time_out[sce->channel])
962
0
        return 15;
963
194k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
964
0
        return 15;
965
194k
    if(!hDecoder->fb_intermed[sce->channel])
966
0
        return 15;
967
968
    /* dequantisation and scaling */
969
194k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
970
194k
    if (retval > 0)
971
50
        return retval;
972
973
#ifdef PROFILE
974
    count = faad_get_ts() - count;
975
    hDecoder->requant_cycles += count;
976
#endif
977
978
979
    /* pns decoding */
980
194k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
981
194k
        &(hDecoder->__r1), &(hDecoder->__r2));
982
983
#ifdef MAIN_DEC
984
    /* MAIN object type prediction */
985
    if (hDecoder->object_type == MAIN)
986
    {
987
    if (!hDecoder->pred_stat[sce->channel])
988
      return 33;
989
990
        /* intra channel prediction */
991
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
992
            hDecoder->sf_index);
993
994
        /* In addition, for scalefactor bands coded by perceptual
995
           noise substitution the predictors belonging to the
996
           corresponding spectral coefficients are reset.
997
        */
998
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
999
    }
1000
#endif
1001
1002
194k
#ifdef LTP_DEC
1003
194k
    if (is_ltp_ot(hDecoder->object_type))
1004
120k
    {
1005
120k
#ifdef LD_DEC
1006
120k
        if (hDecoder->object_type == LD)
1007
513
        {
1008
513
            if (ics->ltp.data_present)
1009
59
            {
1010
59
                if (ics->ltp.lag_update)
1011
22
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1012
59
            }
1013
513
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1014
513
        }
1015
120k
#endif
1016
1017
        /* long term prediction */
1018
120k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1019
120k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1020
120k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1021
120k
    }
1022
194k
#endif
1023
1024
    /* tns decoding */
1025
194k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1026
194k
        spec_coef, hDecoder->frameLength);
1027
1028
    /* drc decoding */
1029
194k
#ifdef APPLY_DRC
1030
194k
    if (hDecoder->drc->present)
1031
11.8k
    {
1032
11.8k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1033
10.5k
            drc_decode(hDecoder->drc, spec_coef);
1034
11.8k
    }
1035
194k
#endif
1036
    /* filter bank */
1037
#ifdef SSR_DEC
1038
    if (hDecoder->object_type != SSR)
1039
    {
1040
#endif
1041
194k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1042
194k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1043
194k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1044
194k
            hDecoder->object_type, hDecoder->frameLength);
1045
#ifdef SSR_DEC
1046
    } else {
1047
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1048
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1049
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1050
            hDecoder->frameLength);
1051
    }
1052
#endif
1053
1054
    /* save window shape for next frame */
1055
194k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1056
1057
194k
#ifdef LTP_DEC
1058
194k
    if (is_ltp_ot(hDecoder->object_type))
1059
120k
    {
1060
120k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1061
120k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1062
120k
    }
1063
194k
#endif
1064
1065
194k
#ifdef SBR_DEC
1066
194k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1067
150k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1068
150k
    {
1069
150k
        int ele = hDecoder->fr_ch_ele;
1070
150k
        int ch = sce->channel;
1071
1072
        /* following case can happen when forceUpSampling == 1 */
1073
150k
        if (hDecoder->sbr[ele] == NULL)
1074
122k
        {
1075
122k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1076
122k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1077
122k
                hDecoder->downSampledSBR
1078
#ifdef DRM
1079
                , 0
1080
#endif
1081
122k
                );
1082
122k
        }
1083
150k
        if (!hDecoder->sbr[ele])
1084
57
            return 19;
1085
1086
150k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1087
13.2k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1088
136k
        else
1089
136k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1090
1091
        /* check if any of the PS tools is used */
1092
150k
#if (defined(PS_DEC) || defined(DRM_PS))
1093
150k
        if (hDecoder->ps_used[ele] == 0)
1094
144k
        {
1095
144k
#endif
1096
144k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1097
144k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1098
144k
#if (defined(PS_DEC) || defined(DRM_PS))
1099
144k
        } else {
1100
5.70k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1101
5.70k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1102
5.70k
                hDecoder->downSampledSBR);
1103
5.70k
        }
1104
150k
#endif
1105
150k
        if (retval > 0)
1106
23
            return retval;
1107
150k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1108
6
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1109
6
    {
1110
6
        return 23;
1111
6
    }
1112
194k
#endif
1113
1114
    /* copy L to R when no PS is used */
1115
194k
#if (defined(PS_DEC) || defined(DRM_PS))
1116
194k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1117
188k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1118
0
    {
1119
0
        int ele = hDecoder->fr_ch_ele;
1120
0
        int ch = sce->channel;
1121
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1122
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1123
1124
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1125
0
    }
1126
194k
#endif
1127
1128
194k
    return 0;
1129
194k
}
1130
1131
uint8_t reconstruct_channel_pair(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
1132
                                 element *cpe, int16_t *spec_data1, int16_t *spec_data2)
1133
72.6k
{
1134
72.6k
    uint8_t retval;
1135
72.6k
    ALIGN real_t spec_coef1[1024];
1136
72.6k
    ALIGN real_t spec_coef2[1024];
1137
1138
#ifdef PROFILE
1139
    int64_t count = faad_get_ts();
1140
#endif
1141
72.6k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1142
61.4k
    {
1143
61.4k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1144
61.4k
        if (retval > 0)
1145
0
            return retval;
1146
1147
61.4k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1148
61.4k
    }
1149
1150
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1151
72.6k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1152
0
        return 15;
1153
72.6k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1154
0
        return 15;
1155
1156
    /* dequantisation and scaling */
1157
72.6k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1158
72.6k
    if (retval > 0)
1159
133
        return retval;
1160
72.5k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1161
72.5k
    if (retval > 0)
1162
9
        return retval;
1163
1164
#ifdef PROFILE
1165
    count = faad_get_ts() - count;
1166
    hDecoder->requant_cycles += count;
1167
#endif
1168
1169
    /* pns decoding */
1170
72.5k
    if (ics1->ms_mask_present)
1171
19.8k
    {
1172
19.8k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1173
19.8k
            &(hDecoder->__r1), &(hDecoder->__r2));
1174
52.6k
    } else {
1175
52.6k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1176
52.6k
            &(hDecoder->__r1), &(hDecoder->__r2));
1177
52.6k
    }
1178
1179
    /* mid/side decoding */
1180
72.5k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1181
1182
#if 0
1183
    {
1184
        int i;
1185
        for (i = 0; i < 1024; i++)
1186
        {
1187
            //printf("%d\n", spec_coef1[i]);
1188
            printf("0x%.8X\n", spec_coef1[i]);
1189
        }
1190
        for (i = 0; i < 1024; i++)
1191
        {
1192
            //printf("%d\n", spec_coef2[i]);
1193
            printf("0x%.8X\n", spec_coef2[i]);
1194
        }
1195
    }
1196
#endif
1197
1198
    /* intensity stereo decoding */
1199
72.5k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1200
1201
#if 0
1202
    {
1203
        int i;
1204
        for (i = 0; i < 1024; i++)
1205
        {
1206
            printf("%d\n", spec_coef1[i]);
1207
            //printf("0x%.8X\n", spec_coef1[i]);
1208
        }
1209
        for (i = 0; i < 1024; i++)
1210
        {
1211
            printf("%d\n", spec_coef2[i]);
1212
            //printf("0x%.8X\n", spec_coef2[i]);
1213
        }
1214
    }
1215
#endif
1216
1217
#ifdef MAIN_DEC
1218
    /* MAIN object type prediction */
1219
23.7k
    if (hDecoder->object_type == MAIN)
1220
11.6k
    {
1221
        /* intra channel prediction */
1222
11.6k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1223
11.6k
            hDecoder->sf_index);
1224
11.6k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1225
11.6k
            hDecoder->sf_index);
1226
1227
        /* In addition, for scalefactor bands coded by perceptual
1228
           noise substitution the predictors belonging to the
1229
           corresponding spectral coefficients are reset.
1230
        */
1231
11.6k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1232
11.6k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1233
11.6k
    }
1234
#endif
1235
1236
#ifdef LTP_DEC
1237
43.6k
    if (is_ltp_ot(hDecoder->object_type))
1238
17.0k
    {
1239
17.0k
        ltp_info *ltp1 = &(ics1->ltp);
1240
17.0k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1241
17.0k
#ifdef LD_DEC
1242
17.0k
        if (hDecoder->object_type == LD)
1243
1.76k
        {
1244
1.76k
            if (ltp1->data_present)
1245
234
            {
1246
234
                if (ltp1->lag_update)
1247
98
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1248
234
            }
1249
1.76k
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1250
1.76k
            if (ltp2->data_present)
1251
134
            {
1252
134
                if (ltp2->lag_update)
1253
63
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1254
134
            }
1255
1.76k
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1256
1.76k
        }
1257
17.0k
#endif
1258
1259
        /* long term prediction */
1260
17.0k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1261
17.0k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1262
17.0k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1263
17.0k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1264
17.0k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1265
17.0k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1266
17.0k
    }
1267
#endif
1268
1269
    /* tns decoding */
1270
72.5k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1271
72.5k
        spec_coef1, hDecoder->frameLength);
1272
72.5k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1273
72.5k
        spec_coef2, hDecoder->frameLength);
1274
1275
    /* drc decoding */
1276
72.5k
#if APPLY_DRC
1277
72.5k
    if (hDecoder->drc->present)
1278
1.32k
    {
1279
1.32k
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1280
1.11k
            drc_decode(hDecoder->drc, spec_coef1);
1281
1.32k
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1282
1.12k
            drc_decode(hDecoder->drc, spec_coef2);
1283
1.32k
    }
1284
72.5k
#endif
1285
    /* filter bank */
1286
#ifdef SSR_DEC
1287
    if (hDecoder->object_type != SSR)
1288
    {
1289
#endif
1290
72.5k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1291
72.5k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1292
72.5k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1293
72.5k
            hDecoder->object_type, hDecoder->frameLength);
1294
72.5k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1295
72.5k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1296
72.5k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1297
72.5k
            hDecoder->object_type, hDecoder->frameLength);
1298
#ifdef SSR_DEC
1299
    } else {
1300
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1301
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1302
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1303
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1304
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1305
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1306
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1307
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1308
    }
1309
#endif
1310
1311
    /* save window shape for next frame */
1312
72.5k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1313
72.5k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1314
1315
#ifdef LTP_DEC
1316
43.6k
    if (is_ltp_ot(hDecoder->object_type))
1317
17.0k
    {
1318
17.0k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1319
17.0k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1320
17.0k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1321
17.0k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1322
17.0k
    }
1323
#endif
1324
1325
72.5k
#ifdef SBR_DEC
1326
72.5k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1327
61.1k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1328
61.1k
    {
1329
61.1k
        int ele = hDecoder->fr_ch_ele;
1330
61.1k
        int ch0 = cpe->channel;
1331
61.1k
        int ch1 = cpe->paired_channel;
1332
1333
        /* following case can happen when forceUpSampling == 1 */
1334
61.1k
        if (hDecoder->sbr[ele] == NULL)
1335
19.8k
        {
1336
19.8k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1337
19.8k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1338
19.8k
                hDecoder->downSampledSBR
1339
#ifdef DRM
1340
                , 0
1341
#endif
1342
19.8k
                );
1343
19.8k
        }
1344
61.1k
        if (!hDecoder->sbr[ele])
1345
84
            return 19;
1346
1347
61.0k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1348
3.25k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1349
57.7k
        else
1350
57.7k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1351
1352
61.0k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1353
61.0k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1354
61.0k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1355
61.0k
        if (retval > 0)
1356
4
            return retval;
1357
61.0k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
3
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
3
    {
1360
3
        return 23;
1361
3
    }
1362
72.4k
#endif
1363
1364
72.4k
    return 0;
1365
72.5k
}
reconstruct_channel_pair
Line
Count
Source
1133
28.9k
{
1134
28.9k
    uint8_t retval;
1135
28.9k
    ALIGN real_t spec_coef1[1024];
1136
28.9k
    ALIGN real_t spec_coef2[1024];
1137
1138
#ifdef PROFILE
1139
    int64_t count = faad_get_ts();
1140
#endif
1141
28.9k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1142
24.7k
    {
1143
24.7k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1144
24.7k
        if (retval > 0)
1145
0
            return retval;
1146
1147
24.7k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1148
24.7k
    }
1149
1150
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1151
28.9k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1152
0
        return 15;
1153
28.9k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1154
0
        return 15;
1155
1156
    /* dequantisation and scaling */
1157
28.9k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1158
28.9k
    if (retval > 0)
1159
69
        return retval;
1160
28.8k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1161
28.8k
    if (retval > 0)
1162
3
        return retval;
1163
1164
#ifdef PROFILE
1165
    count = faad_get_ts() - count;
1166
    hDecoder->requant_cycles += count;
1167
#endif
1168
1169
    /* pns decoding */
1170
28.8k
    if (ics1->ms_mask_present)
1171
8.19k
    {
1172
8.19k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1173
8.19k
            &(hDecoder->__r1), &(hDecoder->__r2));
1174
20.6k
    } else {
1175
20.6k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1176
20.6k
            &(hDecoder->__r1), &(hDecoder->__r2));
1177
20.6k
    }
1178
1179
    /* mid/side decoding */
1180
28.8k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1181
1182
#if 0
1183
    {
1184
        int i;
1185
        for (i = 0; i < 1024; i++)
1186
        {
1187
            //printf("%d\n", spec_coef1[i]);
1188
            printf("0x%.8X\n", spec_coef1[i]);
1189
        }
1190
        for (i = 0; i < 1024; i++)
1191
        {
1192
            //printf("%d\n", spec_coef2[i]);
1193
            printf("0x%.8X\n", spec_coef2[i]);
1194
        }
1195
    }
1196
#endif
1197
1198
    /* intensity stereo decoding */
1199
28.8k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1200
1201
#if 0
1202
    {
1203
        int i;
1204
        for (i = 0; i < 1024; i++)
1205
        {
1206
            printf("%d\n", spec_coef1[i]);
1207
            //printf("0x%.8X\n", spec_coef1[i]);
1208
        }
1209
        for (i = 0; i < 1024; i++)
1210
        {
1211
            printf("%d\n", spec_coef2[i]);
1212
            //printf("0x%.8X\n", spec_coef2[i]);
1213
        }
1214
    }
1215
#endif
1216
1217
#ifdef MAIN_DEC
1218
    /* MAIN object type prediction */
1219
    if (hDecoder->object_type == MAIN)
1220
    {
1221
        /* intra channel prediction */
1222
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1223
            hDecoder->sf_index);
1224
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1225
            hDecoder->sf_index);
1226
1227
        /* In addition, for scalefactor bands coded by perceptual
1228
           noise substitution the predictors belonging to the
1229
           corresponding spectral coefficients are reset.
1230
        */
1231
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1232
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1233
    }
1234
#endif
1235
1236
#ifdef LTP_DEC
1237
    if (is_ltp_ot(hDecoder->object_type))
1238
    {
1239
        ltp_info *ltp1 = &(ics1->ltp);
1240
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1241
#ifdef LD_DEC
1242
        if (hDecoder->object_type == LD)
1243
        {
1244
            if (ltp1->data_present)
1245
            {
1246
                if (ltp1->lag_update)
1247
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1248
            }
1249
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1250
            if (ltp2->data_present)
1251
            {
1252
                if (ltp2->lag_update)
1253
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1254
            }
1255
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1256
        }
1257
#endif
1258
1259
        /* long term prediction */
1260
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1261
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1262
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1263
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1264
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1265
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1266
    }
1267
#endif
1268
1269
    /* tns decoding */
1270
28.8k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1271
28.8k
        spec_coef1, hDecoder->frameLength);
1272
28.8k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1273
28.8k
        spec_coef2, hDecoder->frameLength);
1274
1275
    /* drc decoding */
1276
28.8k
#if APPLY_DRC
1277
28.8k
    if (hDecoder->drc->present)
1278
0
    {
1279
0
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1280
0
            drc_decode(hDecoder->drc, spec_coef1);
1281
0
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1282
0
            drc_decode(hDecoder->drc, spec_coef2);
1283
0
    }
1284
28.8k
#endif
1285
    /* filter bank */
1286
#ifdef SSR_DEC
1287
    if (hDecoder->object_type != SSR)
1288
    {
1289
#endif
1290
28.8k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1291
28.8k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1292
28.8k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1293
28.8k
            hDecoder->object_type, hDecoder->frameLength);
1294
28.8k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1295
28.8k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1296
28.8k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1297
28.8k
            hDecoder->object_type, hDecoder->frameLength);
1298
#ifdef SSR_DEC
1299
    } else {
1300
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1301
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1302
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1303
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1304
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1305
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1306
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1307
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1308
    }
1309
#endif
1310
1311
    /* save window shape for next frame */
1312
28.8k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1313
28.8k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1314
1315
#ifdef LTP_DEC
1316
    if (is_ltp_ot(hDecoder->object_type))
1317
    {
1318
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1319
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1320
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1321
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1322
    }
1323
#endif
1324
1325
28.8k
#ifdef SBR_DEC
1326
28.8k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1327
26.0k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1328
26.0k
    {
1329
26.0k
        int ele = hDecoder->fr_ch_ele;
1330
26.0k
        int ch0 = cpe->channel;
1331
26.0k
        int ch1 = cpe->paired_channel;
1332
1333
        /* following case can happen when forceUpSampling == 1 */
1334
26.0k
        if (hDecoder->sbr[ele] == NULL)
1335
7.07k
        {
1336
7.07k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1337
7.07k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1338
7.07k
                hDecoder->downSampledSBR
1339
7.07k
#ifdef DRM
1340
7.07k
                , 0
1341
7.07k
#endif
1342
7.07k
                );
1343
7.07k
        }
1344
26.0k
        if (!hDecoder->sbr[ele])
1345
0
            return 19;
1346
1347
26.0k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1348
1.57k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1349
24.4k
        else
1350
24.4k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1351
1352
26.0k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1353
26.0k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1354
26.0k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1355
26.0k
        if (retval > 0)
1356
4
            return retval;
1357
26.0k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
1
    {
1360
1
        return 23;
1361
1
    }
1362
28.8k
#endif
1363
1364
28.8k
    return 0;
1365
28.8k
}
reconstruct_channel_pair
Line
Count
Source
1133
23.7k
{
1134
23.7k
    uint8_t retval;
1135
23.7k
    ALIGN real_t spec_coef1[1024];
1136
23.7k
    ALIGN real_t spec_coef2[1024];
1137
1138
#ifdef PROFILE
1139
    int64_t count = faad_get_ts();
1140
#endif
1141
23.7k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1142
20.1k
    {
1143
20.1k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1144
20.1k
        if (retval > 0)
1145
0
            return retval;
1146
1147
20.1k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1148
20.1k
    }
1149
1150
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1151
23.7k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1152
0
        return 15;
1153
23.7k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1154
0
        return 15;
1155
1156
    /* dequantisation and scaling */
1157
23.7k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1158
23.7k
    if (retval > 0)
1159
52
        return retval;
1160
23.7k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1161
23.7k
    if (retval > 0)
1162
3
        return retval;
1163
1164
#ifdef PROFILE
1165
    count = faad_get_ts() - count;
1166
    hDecoder->requant_cycles += count;
1167
#endif
1168
1169
    /* pns decoding */
1170
23.7k
    if (ics1->ms_mask_present)
1171
6.99k
    {
1172
6.99k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1173
6.99k
            &(hDecoder->__r1), &(hDecoder->__r2));
1174
16.7k
    } else {
1175
16.7k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1176
16.7k
            &(hDecoder->__r1), &(hDecoder->__r2));
1177
16.7k
    }
1178
1179
    /* mid/side decoding */
1180
23.7k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1181
1182
#if 0
1183
    {
1184
        int i;
1185
        for (i = 0; i < 1024; i++)
1186
        {
1187
            //printf("%d\n", spec_coef1[i]);
1188
            printf("0x%.8X\n", spec_coef1[i]);
1189
        }
1190
        for (i = 0; i < 1024; i++)
1191
        {
1192
            //printf("%d\n", spec_coef2[i]);
1193
            printf("0x%.8X\n", spec_coef2[i]);
1194
        }
1195
    }
1196
#endif
1197
1198
    /* intensity stereo decoding */
1199
23.7k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1200
1201
#if 0
1202
    {
1203
        int i;
1204
        for (i = 0; i < 1024; i++)
1205
        {
1206
            printf("%d\n", spec_coef1[i]);
1207
            //printf("0x%.8X\n", spec_coef1[i]);
1208
        }
1209
        for (i = 0; i < 1024; i++)
1210
        {
1211
            printf("%d\n", spec_coef2[i]);
1212
            //printf("0x%.8X\n", spec_coef2[i]);
1213
        }
1214
    }
1215
#endif
1216
1217
23.7k
#ifdef MAIN_DEC
1218
    /* MAIN object type prediction */
1219
23.7k
    if (hDecoder->object_type == MAIN)
1220
11.6k
    {
1221
        /* intra channel prediction */
1222
11.6k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1223
11.6k
            hDecoder->sf_index);
1224
11.6k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1225
11.6k
            hDecoder->sf_index);
1226
1227
        /* In addition, for scalefactor bands coded by perceptual
1228
           noise substitution the predictors belonging to the
1229
           corresponding spectral coefficients are reset.
1230
        */
1231
11.6k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1232
11.6k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1233
11.6k
    }
1234
23.7k
#endif
1235
1236
23.7k
#ifdef LTP_DEC
1237
23.7k
    if (is_ltp_ot(hDecoder->object_type))
1238
8.94k
    {
1239
8.94k
        ltp_info *ltp1 = &(ics1->ltp);
1240
8.94k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1241
8.94k
#ifdef LD_DEC
1242
8.94k
        if (hDecoder->object_type == LD)
1243
936
        {
1244
936
            if (ltp1->data_present)
1245
141
            {
1246
141
                if (ltp1->lag_update)
1247
60
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1248
141
            }
1249
936
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1250
936
            if (ltp2->data_present)
1251
72
            {
1252
72
                if (ltp2->lag_update)
1253
27
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1254
72
            }
1255
936
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1256
936
        }
1257
8.94k
#endif
1258
1259
        /* long term prediction */
1260
8.94k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1261
8.94k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1262
8.94k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1263
8.94k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1264
8.94k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1265
8.94k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1266
8.94k
    }
1267
23.7k
#endif
1268
1269
    /* tns decoding */
1270
23.7k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1271
23.7k
        spec_coef1, hDecoder->frameLength);
1272
23.7k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1273
23.7k
        spec_coef2, hDecoder->frameLength);
1274
1275
    /* drc decoding */
1276
23.7k
#if APPLY_DRC
1277
23.7k
    if (hDecoder->drc->present)
1278
576
    {
1279
576
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1280
463
            drc_decode(hDecoder->drc, spec_coef1);
1281
576
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1282
461
            drc_decode(hDecoder->drc, spec_coef2);
1283
576
    }
1284
23.7k
#endif
1285
    /* filter bank */
1286
#ifdef SSR_DEC
1287
    if (hDecoder->object_type != SSR)
1288
    {
1289
#endif
1290
23.7k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1291
23.7k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1292
23.7k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1293
23.7k
            hDecoder->object_type, hDecoder->frameLength);
1294
23.7k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1295
23.7k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1296
23.7k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1297
23.7k
            hDecoder->object_type, hDecoder->frameLength);
1298
#ifdef SSR_DEC
1299
    } else {
1300
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1301
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1302
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1303
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1304
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1305
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1306
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1307
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1308
    }
1309
#endif
1310
1311
    /* save window shape for next frame */
1312
23.7k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1313
23.7k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1314
1315
23.7k
#ifdef LTP_DEC
1316
23.7k
    if (is_ltp_ot(hDecoder->object_type))
1317
8.94k
    {
1318
8.94k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1319
8.94k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1320
8.94k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1321
8.94k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1322
8.94k
    }
1323
23.7k
#endif
1324
1325
23.7k
#ifdef SBR_DEC
1326
23.7k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1327
17.7k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1328
17.7k
    {
1329
17.7k
        int ele = hDecoder->fr_ch_ele;
1330
17.7k
        int ch0 = cpe->channel;
1331
17.7k
        int ch1 = cpe->paired_channel;
1332
1333
        /* following case can happen when forceUpSampling == 1 */
1334
17.7k
        if (hDecoder->sbr[ele] == NULL)
1335
6.60k
        {
1336
6.60k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1337
6.60k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1338
6.60k
                hDecoder->downSampledSBR
1339
#ifdef DRM
1340
                , 0
1341
#endif
1342
6.60k
                );
1343
6.60k
        }
1344
17.7k
        if (!hDecoder->sbr[ele])
1345
43
            return 19;
1346
1347
17.7k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1348
899
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1349
16.8k
        else
1350
16.8k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1351
1352
17.7k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1353
17.7k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1354
17.7k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1355
17.7k
        if (retval > 0)
1356
0
            return retval;
1357
17.7k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
1
    {
1360
1
        return 23;
1361
1
    }
1362
23.6k
#endif
1363
1364
23.6k
    return 0;
1365
23.7k
}
reconstruct_channel_pair
Line
Count
Source
1133
19.9k
{
1134
19.9k
    uint8_t retval;
1135
19.9k
    ALIGN real_t spec_coef1[1024];
1136
19.9k
    ALIGN real_t spec_coef2[1024];
1137
1138
#ifdef PROFILE
1139
    int64_t count = faad_get_ts();
1140
#endif
1141
19.9k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1142
16.6k
    {
1143
16.6k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1144
16.6k
        if (retval > 0)
1145
0
            return retval;
1146
1147
16.6k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1148
16.6k
    }
1149
1150
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1151
19.9k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1152
0
        return 15;
1153
19.9k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1154
0
        return 15;
1155
1156
    /* dequantisation and scaling */
1157
19.9k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1158
19.9k
    if (retval > 0)
1159
12
        return retval;
1160
19.8k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1161
19.8k
    if (retval > 0)
1162
3
        return retval;
1163
1164
#ifdef PROFILE
1165
    count = faad_get_ts() - count;
1166
    hDecoder->requant_cycles += count;
1167
#endif
1168
1169
    /* pns decoding */
1170
19.8k
    if (ics1->ms_mask_present)
1171
4.63k
    {
1172
4.63k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1173
4.63k
            &(hDecoder->__r1), &(hDecoder->__r2));
1174
15.2k
    } else {
1175
15.2k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1176
15.2k
            &(hDecoder->__r1), &(hDecoder->__r2));
1177
15.2k
    }
1178
1179
    /* mid/side decoding */
1180
19.8k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1181
1182
#if 0
1183
    {
1184
        int i;
1185
        for (i = 0; i < 1024; i++)
1186
        {
1187
            //printf("%d\n", spec_coef1[i]);
1188
            printf("0x%.8X\n", spec_coef1[i]);
1189
        }
1190
        for (i = 0; i < 1024; i++)
1191
        {
1192
            //printf("%d\n", spec_coef2[i]);
1193
            printf("0x%.8X\n", spec_coef2[i]);
1194
        }
1195
    }
1196
#endif
1197
1198
    /* intensity stereo decoding */
1199
19.8k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1200
1201
#if 0
1202
    {
1203
        int i;
1204
        for (i = 0; i < 1024; i++)
1205
        {
1206
            printf("%d\n", spec_coef1[i]);
1207
            //printf("0x%.8X\n", spec_coef1[i]);
1208
        }
1209
        for (i = 0; i < 1024; i++)
1210
        {
1211
            printf("%d\n", spec_coef2[i]);
1212
            //printf("0x%.8X\n", spec_coef2[i]);
1213
        }
1214
    }
1215
#endif
1216
1217
#ifdef MAIN_DEC
1218
    /* MAIN object type prediction */
1219
    if (hDecoder->object_type == MAIN)
1220
    {
1221
        /* intra channel prediction */
1222
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1223
            hDecoder->sf_index);
1224
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1225
            hDecoder->sf_index);
1226
1227
        /* In addition, for scalefactor bands coded by perceptual
1228
           noise substitution the predictors belonging to the
1229
           corresponding spectral coefficients are reset.
1230
        */
1231
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1232
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1233
    }
1234
#endif
1235
1236
19.8k
#ifdef LTP_DEC
1237
19.8k
    if (is_ltp_ot(hDecoder->object_type))
1238
8.12k
    {
1239
8.12k
        ltp_info *ltp1 = &(ics1->ltp);
1240
8.12k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1241
8.12k
#ifdef LD_DEC
1242
8.12k
        if (hDecoder->object_type == LD)
1243
829
        {
1244
829
            if (ltp1->data_present)
1245
93
            {
1246
93
                if (ltp1->lag_update)
1247
38
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1248
93
            }
1249
829
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1250
829
            if (ltp2->data_present)
1251
62
            {
1252
62
                if (ltp2->lag_update)
1253
36
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1254
62
            }
1255
829
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1256
829
        }
1257
8.12k
#endif
1258
1259
        /* long term prediction */
1260
8.12k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1261
8.12k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1262
8.12k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1263
8.12k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1264
8.12k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1265
8.12k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1266
8.12k
    }
1267
19.8k
#endif
1268
1269
    /* tns decoding */
1270
19.8k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1271
19.8k
        spec_coef1, hDecoder->frameLength);
1272
19.8k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1273
19.8k
        spec_coef2, hDecoder->frameLength);
1274
1275
    /* drc decoding */
1276
19.8k
#if APPLY_DRC
1277
19.8k
    if (hDecoder->drc->present)
1278
751
    {
1279
751
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1280
654
            drc_decode(hDecoder->drc, spec_coef1);
1281
751
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1282
662
            drc_decode(hDecoder->drc, spec_coef2);
1283
751
    }
1284
19.8k
#endif
1285
    /* filter bank */
1286
#ifdef SSR_DEC
1287
    if (hDecoder->object_type != SSR)
1288
    {
1289
#endif
1290
19.8k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1291
19.8k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1292
19.8k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1293
19.8k
            hDecoder->object_type, hDecoder->frameLength);
1294
19.8k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1295
19.8k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1296
19.8k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1297
19.8k
            hDecoder->object_type, hDecoder->frameLength);
1298
#ifdef SSR_DEC
1299
    } else {
1300
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1301
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1302
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1303
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1304
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1305
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1306
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1307
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1308
    }
1309
#endif
1310
1311
    /* save window shape for next frame */
1312
19.8k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1313
19.8k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1314
1315
19.8k
#ifdef LTP_DEC
1316
19.8k
    if (is_ltp_ot(hDecoder->object_type))
1317
8.12k
    {
1318
8.12k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1319
8.12k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1320
8.12k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1321
8.12k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1322
8.12k
    }
1323
19.8k
#endif
1324
1325
19.8k
#ifdef SBR_DEC
1326
19.8k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1327
17.2k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1328
17.2k
    {
1329
17.2k
        int ele = hDecoder->fr_ch_ele;
1330
17.2k
        int ch0 = cpe->channel;
1331
17.2k
        int ch1 = cpe->paired_channel;
1332
1333
        /* following case can happen when forceUpSampling == 1 */
1334
17.2k
        if (hDecoder->sbr[ele] == NULL)
1335
6.16k
        {
1336
6.16k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1337
6.16k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1338
6.16k
                hDecoder->downSampledSBR
1339
#ifdef DRM
1340
                , 0
1341
#endif
1342
6.16k
                );
1343
6.16k
        }
1344
17.2k
        if (!hDecoder->sbr[ele])
1345
41
            return 19;
1346
1347
17.2k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1348
779
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1349
16.4k
        else
1350
16.4k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1351
1352
17.2k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1353
17.2k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1354
17.2k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1355
17.2k
        if (retval > 0)
1356
0
            return retval;
1357
17.2k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1358
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1359
1
    {
1360
1
        return 23;
1361
1
    }
1362
19.8k
#endif
1363
1364
19.8k
    return 0;
1365
19.8k
}