Coverage Report

Created: 2026-07-16 06:20

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
489k
#define bit_set(A, B) ((A) & (1<<(B)))
288
289
/* 4.5.2.3.4 */
290
/*
291
  - determine the number of windows in a window_sequence named num_windows
292
  - determine the number of window_groups named num_window_groups
293
  - determine the number of windows in each group named window_group_length[g]
294
  - determine the total number of scalefactor window bands named num_swb for
295
    the actual window type
296
  - determine swb_offset[swb], the offset of the first coefficient in
297
    scalefactor window band named swb of the window actually used
298
  - determine sect_sfb_offset[g][section],the offset of the first coefficient
299
    in section named section. This offset depends on window_sequence and
300
    scale_factor_grouping and is needed to decode the spectral_data().
301
*/
302
uint8_t window_grouping_info(NeAACDecStruct *hDecoder, ic_stream *ics)
303
663k
{
304
663k
    uint8_t i, g;
305
306
663k
    uint8_t sf_index = hDecoder->sf_index;
307
308
663k
    if (sf_index >= 12)
309
10
        return 32;
310
311
663k
    switch (ics->window_sequence) {
312
547k
    case ONLY_LONG_SEQUENCE:
313
580k
    case LONG_START_SEQUENCE:
314
593k
    case LONG_STOP_SEQUENCE:
315
593k
        ics->num_windows = 1;
316
593k
        ics->num_window_groups = 1;
317
593k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
#ifdef LD_DEC
319
438k
        if (hDecoder->object_type == LD)
320
5.08k
        {
321
5.08k
            if (hDecoder->frameLength == 512)
322
2.03k
                ics->num_swb = num_swb_512_window[sf_index];
323
3.04k
            else /* if (hDecoder->frameLength == 480) */
324
3.04k
                ics->num_swb = num_swb_480_window[sf_index];
325
433k
        } else {
326
433k
#endif
327
588k
            if (hDecoder->frameLength == 1024)
328
492k
                ics->num_swb = num_swb_1024_window[sf_index];
329
96.4k
            else /* if (hDecoder->frameLength == 960) */
330
96.4k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
593k
        if (ics->max_sfb > ics->num_swb)
336
281
        {
337
281
            return 32;
338
281
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
#ifdef LD_DEC
343
438k
        if (hDecoder->object_type == LD)
344
5.06k
        {
345
5.06k
            if (hDecoder->frameLength == 512)
346
2.02k
            {
347
50.3k
                for (i = 0; i < ics->num_swb; i++)
348
48.3k
                {
349
48.3k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
48.3k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
48.3k
                }
352
3.04k
            } else /* if (hDecoder->frameLength == 480) */ {
353
95.1k
                for (i = 0; i < ics->num_swb; i++)
354
92.1k
                {
355
92.1k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
92.1k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
92.1k
                }
358
3.04k
            }
359
5.06k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
5.06k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
5.06k
            ics->swb_offset_max = hDecoder->frameLength;
362
433k
        } else {
363
433k
#endif
364
25.5M
            for (i = 0; i < ics->num_swb; i++)
365
24.9M
            {
366
24.9M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
24.9M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
24.9M
            }
369
154k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
154k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
154k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
154k
        return 0;
376
69.9k
    case EIGHT_SHORT_SEQUENCE:
377
69.9k
        ics->num_windows = 8;
378
69.9k
        ics->num_window_groups = 1;
379
69.9k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
69.9k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
69.9k
        if (ics->max_sfb > ics->num_swb)
383
19
        {
384
19
            return 32;
385
19
        }
386
387
1.03M
        for (i = 0; i < ics->num_swb; i++)
388
962k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
69.9k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
69.9k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
559k
        for (i = 0; i < ics->num_windows-1; i++) {
393
489k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
395k
            {
395
395k
                ics->num_window_groups += 1;
396
395k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
395k
            } else {
398
93.6k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
93.6k
            }
400
489k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
535k
        for (g = 0; g < ics->num_window_groups; g++)
404
465k
        {
405
465k
            uint16_t width;
406
465k
            uint8_t sect_sfb = 0;
407
465k
            uint16_t offset = 0;
408
409
6.85M
            for (i = 0; i < ics->num_swb; i++)
410
6.39M
            {
411
6.39M
                if (i+1 == ics->num_swb)
412
465k
                {
413
465k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
5.92M
                } else {
415
5.92M
                    width = swb_offset_128_window[sf_index][i+1] -
416
5.92M
                        swb_offset_128_window[sf_index][i];
417
5.92M
                }
418
6.39M
                width *= ics->window_group_length[g];
419
6.39M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
6.39M
                offset += width;
421
6.39M
            }
422
465k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
465k
        }
424
69.9k
        return 0;
425
0
    default:
426
0
        return 32;
427
663k
    }
428
663k
}
window_grouping_info
Line
Count
Source
303
182k
{
304
182k
    uint8_t i, g;
305
306
182k
    uint8_t sf_index = hDecoder->sf_index;
307
308
182k
    if (sf_index >= 12)
309
4
        return 32;
310
311
182k
    switch (ics->window_sequence) {
312
140k
    case ONLY_LONG_SEQUENCE:
313
148k
    case LONG_START_SEQUENCE:
314
154k
    case LONG_STOP_SEQUENCE:
315
154k
        ics->num_windows = 1;
316
154k
        ics->num_window_groups = 1;
317
154k
        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
154k
            if (hDecoder->frameLength == 1024)
328
121k
                ics->num_swb = num_swb_1024_window[sf_index];
329
33.8k
            else /* if (hDecoder->frameLength == 960) */
330
33.8k
                ics->num_swb = num_swb_960_window[sf_index];
331
#ifdef LD_DEC
332
        }
333
#endif
334
335
154k
        if (ics->max_sfb > ics->num_swb)
336
89
        {
337
89
            return 32;
338
89
        }
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.81M
            for (i = 0; i < ics->num_swb; i++)
365
6.65M
            {
366
6.65M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
6.65M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
6.65M
            }
369
154k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
154k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
154k
            ics->swb_offset_max = hDecoder->frameLength;
372
#ifdef LD_DEC
373
        }
374
#endif
375
154k
        return 0;
376
27.1k
    case EIGHT_SHORT_SEQUENCE:
377
27.1k
        ics->num_windows = 8;
378
27.1k
        ics->num_window_groups = 1;
379
27.1k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
27.1k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
27.1k
        if (ics->max_sfb > ics->num_swb)
383
6
        {
384
6
            return 32;
385
6
        }
386
387
406k
        for (i = 0; i < ics->num_swb; i++)
388
379k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
27.1k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
27.1k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
217k
        for (i = 0; i < ics->num_windows-1; i++) {
393
190k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
152k
            {
395
152k
                ics->num_window_groups += 1;
396
152k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
152k
            } else {
398
37.1k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
37.1k
            }
400
190k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
207k
        for (g = 0; g < ics->num_window_groups; g++)
404
180k
        {
405
180k
            uint16_t width;
406
180k
            uint8_t sect_sfb = 0;
407
180k
            uint16_t offset = 0;
408
409
2.69M
            for (i = 0; i < ics->num_swb; i++)
410
2.51M
            {
411
2.51M
                if (i+1 == ics->num_swb)
412
180k
                {
413
180k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
2.33M
                } else {
415
2.33M
                    width = swb_offset_128_window[sf_index][i+1] -
416
2.33M
                        swb_offset_128_window[sf_index][i];
417
2.33M
                }
418
2.51M
                width *= ics->window_group_length[g];
419
2.51M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
2.51M
                offset += width;
421
2.51M
            }
422
180k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
180k
        }
424
27.1k
        return 0;
425
0
    default:
426
0
        return 32;
427
182k
    }
428
182k
}
window_grouping_info
Line
Count
Source
303
481k
{
304
481k
    uint8_t i, g;
305
306
481k
    uint8_t sf_index = hDecoder->sf_index;
307
308
481k
    if (sf_index >= 12)
309
6
        return 32;
310
311
481k
    switch (ics->window_sequence) {
312
407k
    case ONLY_LONG_SEQUENCE:
313
431k
    case LONG_START_SEQUENCE:
314
438k
    case LONG_STOP_SEQUENCE:
315
438k
        ics->num_windows = 1;
316
438k
        ics->num_window_groups = 1;
317
438k
        ics->window_group_length[ics->num_window_groups-1] = 1;
318
438k
#ifdef LD_DEC
319
438k
        if (hDecoder->object_type == LD)
320
5.08k
        {
321
5.08k
            if (hDecoder->frameLength == 512)
322
2.03k
                ics->num_swb = num_swb_512_window[sf_index];
323
3.04k
            else /* if (hDecoder->frameLength == 480) */
324
3.04k
                ics->num_swb = num_swb_480_window[sf_index];
325
433k
        } else {
326
433k
#endif
327
433k
            if (hDecoder->frameLength == 1024)
328
371k
                ics->num_swb = num_swb_1024_window[sf_index];
329
62.5k
            else /* if (hDecoder->frameLength == 960) */
330
62.5k
                ics->num_swb = num_swb_960_window[sf_index];
331
433k
#ifdef LD_DEC
332
433k
        }
333
438k
#endif
334
335
438k
        if (ics->max_sfb > ics->num_swb)
336
192
        {
337
192
            return 32;
338
192
        }
339
340
        /* preparation of sect_sfb_offset for long blocks */
341
        /* also copy the last value! */
342
438k
#ifdef LD_DEC
343
438k
        if (hDecoder->object_type == LD)
344
5.06k
        {
345
5.06k
            if (hDecoder->frameLength == 512)
346
2.02k
            {
347
50.3k
                for (i = 0; i < ics->num_swb; i++)
348
48.3k
                {
349
48.3k
                    ics->sect_sfb_offset[0][i] = swb_offset_512_window[sf_index][i];
350
48.3k
                    ics->swb_offset[i] = swb_offset_512_window[sf_index][i];
351
48.3k
                }
352
3.04k
            } else /* if (hDecoder->frameLength == 480) */ {
353
95.1k
                for (i = 0; i < ics->num_swb; i++)
354
92.1k
                {
355
92.1k
                    ics->sect_sfb_offset[0][i] = swb_offset_480_window[sf_index][i];
356
92.1k
                    ics->swb_offset[i] = swb_offset_480_window[sf_index][i];
357
92.1k
                }
358
3.04k
            }
359
5.06k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
360
5.06k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
361
5.06k
            ics->swb_offset_max = hDecoder->frameLength;
362
433k
        } else {
363
433k
#endif
364
18.7M
            for (i = 0; i < ics->num_swb; i++)
365
18.2M
            {
366
18.2M
                ics->sect_sfb_offset[0][i] = swb_offset_1024_window[sf_index][i];
367
18.2M
                ics->swb_offset[i] = swb_offset_1024_window[sf_index][i];
368
18.2M
            }
369
433k
            ics->sect_sfb_offset[0][ics->num_swb] = hDecoder->frameLength;
370
433k
            ics->swb_offset[ics->num_swb] = hDecoder->frameLength;
371
433k
            ics->swb_offset_max = hDecoder->frameLength;
372
433k
#ifdef LD_DEC
373
433k
        }
374
438k
#endif
375
438k
        return 0;
376
42.7k
    case EIGHT_SHORT_SEQUENCE:
377
42.7k
        ics->num_windows = 8;
378
42.7k
        ics->num_window_groups = 1;
379
42.7k
        ics->window_group_length[ics->num_window_groups-1] = 1;
380
42.7k
        ics->num_swb = num_swb_128_window[sf_index];
381
382
42.7k
        if (ics->max_sfb > ics->num_swb)
383
13
        {
384
13
            return 32;
385
13
        }
386
387
625k
        for (i = 0; i < ics->num_swb; i++)
388
582k
            ics->swb_offset[i] = swb_offset_128_window[sf_index][i];
389
42.7k
        ics->swb_offset[ics->num_swb] = hDecoder->frameLength/8;
390
42.7k
        ics->swb_offset_max = hDecoder->frameLength/8;
391
392
341k
        for (i = 0; i < ics->num_windows-1; i++) {
393
299k
            if (bit_set(ics->scale_factor_grouping, 6-i) == 0)
394
242k
            {
395
242k
                ics->num_window_groups += 1;
396
242k
                ics->window_group_length[ics->num_window_groups-1] = 1;
397
242k
            } else {
398
56.5k
                ics->window_group_length[ics->num_window_groups-1] += 1;
399
56.5k
            }
400
299k
        }
401
402
        /* preparation of sect_sfb_offset for short blocks */
403
328k
        for (g = 0; g < ics->num_window_groups; g++)
404
285k
        {
405
285k
            uint16_t width;
406
285k
            uint8_t sect_sfb = 0;
407
285k
            uint16_t offset = 0;
408
409
4.16M
            for (i = 0; i < ics->num_swb; i++)
410
3.88M
            {
411
3.88M
                if (i+1 == ics->num_swb)
412
285k
                {
413
285k
                    width = (hDecoder->frameLength/8) - swb_offset_128_window[sf_index][i];
414
3.59M
                } else {
415
3.59M
                    width = swb_offset_128_window[sf_index][i+1] -
416
3.59M
                        swb_offset_128_window[sf_index][i];
417
3.59M
                }
418
3.88M
                width *= ics->window_group_length[g];
419
3.88M
                ics->sect_sfb_offset[g][sect_sfb++] = offset;
420
3.88M
                offset += width;
421
3.88M
            }
422
285k
            ics->sect_sfb_offset[g][sect_sfb] = offset;
423
285k
        }
424
42.7k
        return 0;
425
0
    default:
426
0
        return 32;
427
481k
    }
428
481k
}
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
706M
{
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
306M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
441
306M
        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
306M
        REAL_CONST(0)
443
    };
444
    real_t x1, x2;
445
#endif
446
    int16_t sgn = 1;
447
    /* compute the magnitude in int: -q is evaluated as int and so does not
448
       wrap for q == -32768 the way an int16_t negation would, which keeps the
449
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
450
    int aq = q;
451
452
306M
    if (aq < 0)
453
139k
    {
454
139k
        aq = -aq;
455
139k
        sgn = -1;
456
139k
    }
457
458
306M
    if (aq < IQ_TABLE_SIZE)
459
306M
    {
460
//#define IQUANT_PRINT
461
#ifdef IQUANT_PRINT
462
        //printf("0x%.8X\n", sgn * tab[aq]);
463
        printf("%d\n", sgn * tab[aq]);
464
#endif
465
306M
        return sgn * tab[aq];
466
306M
    }
467
468
3.01k
#ifndef BIG_IQ_TABLE
469
3.01k
    if (aq >= 8192)
470
501
    {
471
501
        *error = 17;
472
501
        return 0;
473
501
    }
474
475
    /* linear interpolation */
476
2.51k
    x1 = tab[aq>>3];
477
2.51k
    x2 = tab[(aq>>3) + 1];
478
2.51k
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
479
#else
480
    *error = 17;
481
    return 0;
482
#endif
483
484
#else
485
399M
    if (q < 0)
486
138k
    {
487
        /* tab contains a value for all possible q [0,8192] */
488
138k
        if (-q < IQ_TABLE_SIZE)
489
137k
            return -tab[-q];
490
491
1.72k
        *error = 17;
492
1.72k
        return 0;
493
399M
    } else {
494
        /* tab contains a value for all possible q [0,8192] */
495
399M
        if (q < IQ_TABLE_SIZE)
496
399M
            return tab[q];
497
498
1.33k
        *error = 17;
499
1.33k
        return 0;
500
399M
    }
501
#endif
502
3.01k
}
specrec.c:iquant
Line
Count
Source
432
306M
{
433
306M
#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
306M
#ifndef BIG_IQ_TABLE
439
306M
    static const real_t errcorr[] = {
440
306M
        REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
441
306M
        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
306M
        REAL_CONST(0)
443
306M
    };
444
306M
    real_t x1, x2;
445
306M
#endif
446
306M
    int16_t sgn = 1;
447
    /* compute the magnitude in int: -q is evaluated as int and so does not
448
       wrap for q == -32768 the way an int16_t negation would, which keeps the
449
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
450
306M
    int aq = q;
451
452
306M
    if (aq < 0)
453
139k
    {
454
139k
        aq = -aq;
455
139k
        sgn = -1;
456
139k
    }
457
458
306M
    if (aq < IQ_TABLE_SIZE)
459
306M
    {
460
//#define IQUANT_PRINT
461
#ifdef IQUANT_PRINT
462
        //printf("0x%.8X\n", sgn * tab[aq]);
463
        printf("%d\n", sgn * tab[aq]);
464
#endif
465
306M
        return sgn * tab[aq];
466
306M
    }
467
468
3.01k
#ifndef BIG_IQ_TABLE
469
3.01k
    if (aq >= 8192)
470
501
    {
471
501
        *error = 17;
472
501
        return 0;
473
501
    }
474
475
    /* linear interpolation */
476
2.51k
    x1 = tab[aq>>3];
477
2.51k
    x2 = tab[(aq>>3) + 1];
478
2.51k
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
479
#else
480
    *error = 17;
481
    return 0;
482
#endif
483
484
#else
485
    if (q < 0)
486
    {
487
        /* tab contains a value for all possible q [0,8192] */
488
        if (-q < IQ_TABLE_SIZE)
489
            return -tab[-q];
490
491
        *error = 17;
492
        return 0;
493
    } else {
494
        /* tab contains a value for all possible q [0,8192] */
495
        if (q < IQ_TABLE_SIZE)
496
            return tab[q];
497
498
        *error = 17;
499
        return 0;
500
    }
501
#endif
502
3.01k
}
specrec.c:iquant
Line
Count
Source
432
399M
{
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
    /* compute the magnitude in int: -q is evaluated as int and so does not
448
       wrap for q == -32768 the way an int16_t negation would, which keeps the
449
       comparison against IQ_TABLE_SIZE in range like the floating-point path */
450
    int aq = q;
451
452
    if (aq < 0)
453
    {
454
        aq = -aq;
455
        sgn = -1;
456
    }
457
458
    if (aq < IQ_TABLE_SIZE)
459
    {
460
//#define IQUANT_PRINT
461
#ifdef IQUANT_PRINT
462
        //printf("0x%.8X\n", sgn * tab[aq]);
463
        printf("%d\n", sgn * tab[aq]);
464
#endif
465
        return sgn * tab[aq];
466
    }
467
468
#ifndef BIG_IQ_TABLE
469
    if (aq >= 8192)
470
    {
471
        *error = 17;
472
        return 0;
473
    }
474
475
    /* linear interpolation */
476
    x1 = tab[aq>>3];
477
    x2 = tab[(aq>>3) + 1];
478
    return sgn * 16 * (MUL_R(errcorr[aq&7],(x2-x1)) + x1);
479
#else
480
    *error = 17;
481
    return 0;
482
#endif
483
484
#else
485
399M
    if (q < 0)
486
138k
    {
487
        /* tab contains a value for all possible q [0,8192] */
488
138k
        if (-q < IQ_TABLE_SIZE)
489
137k
            return -tab[-q];
490
491
1.72k
        *error = 17;
492
1.72k
        return 0;
493
399M
    } else {
494
        /* tab contains a value for all possible q [0,8192] */
495
399M
        if (q < IQ_TABLE_SIZE)
496
399M
            return tab[q];
497
498
1.33k
        *error = 17;
499
1.33k
        return 0;
500
399M
    }
501
399M
#endif
502
399M
}
503
504
#ifndef FIXED_POINT
505
ALIGN static const real_t pow2sf_tab[] = {
506
    2.9802322387695313E-008, 5.9604644775390625E-008, 1.1920928955078125E-007,
507
    2.384185791015625E-007, 4.76837158203125E-007, 9.5367431640625E-007,
508
    1.9073486328125E-006, 3.814697265625E-006, 7.62939453125E-006,
509
    1.52587890625E-005, 3.0517578125E-005, 6.103515625E-005,
510
    0.0001220703125, 0.000244140625, 0.00048828125,
511
    0.0009765625, 0.001953125, 0.00390625,
512
    0.0078125, 0.015625, 0.03125,
513
    0.0625, 0.125, 0.25,
514
    0.5, 1.0, 2.0,
515
    4.0, 8.0, 16.0, 32.0,
516
    64.0, 128.0, 256.0,
517
    512.0, 1024.0, 2048.0,
518
    4096.0, 8192.0, 16384.0,
519
    32768.0, 65536.0, 131072.0,
520
    262144.0, 524288.0, 1048576.0,
521
    2097152.0, 4194304.0, 8388608.0,
522
    16777216.0, 33554432.0, 67108864.0,
523
    134217728.0, 268435456.0, 536870912.0,
524
    1073741824.0, 2147483648.0, 4294967296.0,
525
    8589934592.0, 17179869184.0, 34359738368.0,
526
    68719476736.0, 137438953472.0, 274877906944.0
527
};
528
#endif
529
530
/* quant_to_spec: perform dequantisation and scaling
531
 * and in case of short block it also does the deinterleaving
532
 */
533
/*
534
  For ONLY_LONG_SEQUENCE windows (num_window_groups = 1,
535
  window_group_length[0] = 1) the spectral data is in ascending spectral
536
  order.
537
  For the EIGHT_SHORT_SEQUENCE window, the spectral order depends on the
538
  grouping in the following manner:
539
  - Groups are ordered sequentially
540
  - Within a group, a scalefactor band consists of the spectral data of all
541
    grouped SHORT_WINDOWs for the associated scalefactor window band. To
542
    clarify via example, the length of a group is in the range of one to eight
543
    SHORT_WINDOWs.
544
  - If there are eight groups each with length one (num_window_groups = 8,
545
    window_group_length[0..7] = 1), the result is a sequence of eight spectra,
546
    each in ascending spectral order.
547
  - If there is only one group with length eight (num_window_groups = 1,
548
    window_group_length[0] = 8), the result is that spectral data of all eight
549
    SHORT_WINDOWs is interleaved by scalefactor window bands.
550
  - Within a scalefactor window band, the coefficients are in ascending
551
    spectral order.
552
*/
553
static uint8_t quant_to_spec(NeAACDecStruct *hDecoder,
554
                             ic_stream *ics, int16_t *quant_data,
555
                             real_t *spec_data, uint16_t frame_len)
556
700k
{
557
700k
    ALIGN static const real_t pow2_table[] =
558
700k
    {
559
700k
        COEF_CONST(1.0),
560
700k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
561
700k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
562
700k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
563
700k
    };
564
700k
    const real_t *tab = iq_table;
565
566
700k
    uint8_t g, sfb, win;
567
700k
    uint16_t width, bin, k, gindex;
568
700k
    uint8_t error = 0; /* Init error flag */
569
#ifndef FIXED_POINT
570
    real_t scf;
571
#else
572
    int32_t sat_shift_mask = 0;
573
#endif
574
575
700k
    k = 0;
576
700k
    gindex = 0;
577
578
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
579
     * Without peeking into AAC specification, there is no strong evidence if
580
     * such streams are invalid -> just calm down MSAN. */
581
700k
    if (ics->num_swb == 0)
582
1.10k
        memset(spec_data, 0, frame_len * sizeof(real_t));
583
584
1.81M
    for (g = 0; g < ics->num_window_groups; g++)
585
1.11M
    {
586
1.11M
        uint16_t j = 0;
587
1.11M
        uint16_t gincrease = 0;
588
1.11M
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
589
590
34.2M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
591
33.1M
        {
592
33.1M
            int32_t exp, frac;
593
33.1M
            uint16_t wa = gindex + j;
594
33.1M
            int16_t scale_factor = ics->scale_factors[g][sfb];
595
596
33.1M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
597
598
#ifdef FIXED_POINT
599
            scale_factor -= 100;
600
            /* IMDCT pre-scaling */
601
14.2M
            if (hDecoder->object_type == LD)
602
74.6k
            {
603
74.6k
                scale_factor -= 24 /*9*/;
604
14.1M
            } else {
605
14.1M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
606
2.78M
                    scale_factor -= 16 /*7*/;
607
11.3M
                else
608
11.3M
                    scale_factor -= 28 /*10*/;
609
14.1M
            }
610
14.2M
            if (scale_factor > 120)
611
921
                scale_factor = 120;  /* => exp <= 30 */
612
#else
613
            (void)hDecoder;
614
#endif
615
616
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
617
33.1M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
618
79.5k
            {
619
79.5k
                scale_factor = 0;
620
79.5k
            }
621
622
            /* scale_factor must be between 0 and 255 */
623
33.1M
            exp = (scale_factor /* - 100 */) >> 2;
624
            /* frac must always be > 0 */
625
33.1M
            frac = (scale_factor /* - 100 */) & 3;
626
627
#ifndef FIXED_POINT
628
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
629
#else
630
14.2M
            if (exp > 0)
631
26.7k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
632
#endif
633
634
67.7M
            for (win = 0; win < ics->window_group_length[g]; win++)
635
34.6M
            {
636
211M
                for (bin = 0; bin < width; bin += 4)
637
176M
                {
638
176M
                    uint16_t wb = wa + bin;
639
#ifndef FIXED_POINT
640
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
641
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
642
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
643
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
644
#else
645
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
646
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
647
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
648
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
649
650
76.6M
                    if (exp == -32)
651
68.3M
                    {
652
68.3M
                        spec_data[wb+0] = 0;
653
68.3M
                        spec_data[wb+1] = 0;
654
68.3M
                        spec_data[wb+2] = 0;
655
68.3M
                        spec_data[wb+3] = 0;
656
68.3M
                    } else if (exp <= 0) {
657
8.14M
                        spec_data[wb+0] = iq0 >> -exp;
658
8.14M
                        spec_data[wb+1] = iq1 >> -exp;
659
8.14M
                        spec_data[wb+2] = iq2 >> -exp;
660
8.14M
                        spec_data[wb+3] = iq3 >> -exp;
661
8.14M
                    } else { /* exp > 0 */
662
141k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
663
141k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
664
141k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
665
141k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
666
141k
                    }
667
76.6M
                    if (frac != 0)
668
240k
                    {
669
240k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
670
240k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
671
240k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
672
240k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
673
240k
                    }
674
675
//#define SCFS_PRINT
676
#ifdef SCFS_PRINT
677
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
682
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
683
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
684
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
685
#endif
686
#endif
687
688
176M
                    gincrease += 4;
689
176M
                    k += 4;
690
176M
                }
691
34.6M
                wa += win_inc;
692
34.6M
            }
693
33.1M
            j += width;
694
33.1M
        }
695
1.11M
        gindex += gincrease;
696
1.11M
    }
697
698
700k
    return error;
699
700k
}
specrec.c:quant_to_spec
Line
Count
Source
556
303k
{
557
303k
    ALIGN static const real_t pow2_table[] =
558
303k
    {
559
303k
        COEF_CONST(1.0),
560
303k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
561
303k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
562
303k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
563
303k
    };
564
303k
    const real_t *tab = iq_table;
565
566
303k
    uint8_t g, sfb, win;
567
303k
    uint16_t width, bin, k, gindex;
568
303k
    uint8_t error = 0; /* Init error flag */
569
#ifndef FIXED_POINT
570
    real_t scf;
571
#else
572
303k
    int32_t sat_shift_mask = 0;
573
303k
#endif
574
575
303k
    k = 0;
576
303k
    gindex = 0;
577
578
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
579
     * Without peeking into AAC specification, there is no strong evidence if
580
     * such streams are invalid -> just calm down MSAN. */
581
303k
    if (ics->num_swb == 0)
582
398
        memset(spec_data, 0, frame_len * sizeof(real_t));
583
584
782k
    for (g = 0; g < ics->num_window_groups; g++)
585
478k
    {
586
478k
        uint16_t j = 0;
587
478k
        uint16_t gincrease = 0;
588
478k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
589
590
14.7M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
591
14.2M
        {
592
14.2M
            int32_t exp, frac;
593
14.2M
            uint16_t wa = gindex + j;
594
14.2M
            int16_t scale_factor = ics->scale_factors[g][sfb];
595
596
14.2M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
597
598
14.2M
#ifdef FIXED_POINT
599
14.2M
            scale_factor -= 100;
600
            /* IMDCT pre-scaling */
601
14.2M
            if (hDecoder->object_type == LD)
602
74.6k
            {
603
74.6k
                scale_factor -= 24 /*9*/;
604
14.1M
            } else {
605
14.1M
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
606
2.78M
                    scale_factor -= 16 /*7*/;
607
11.3M
                else
608
11.3M
                    scale_factor -= 28 /*10*/;
609
14.1M
            }
610
14.2M
            if (scale_factor > 120)
611
921
                scale_factor = 120;  /* => exp <= 30 */
612
#else
613
            (void)hDecoder;
614
#endif
615
616
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
617
14.2M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
618
48.5k
            {
619
48.5k
                scale_factor = 0;
620
48.5k
            }
621
622
            /* scale_factor must be between 0 and 255 */
623
14.2M
            exp = (scale_factor /* - 100 */) >> 2;
624
            /* frac must always be > 0 */
625
14.2M
            frac = (scale_factor /* - 100 */) & 3;
626
627
#ifndef FIXED_POINT
628
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
629
#else
630
14.2M
            if (exp > 0)
631
26.7k
                sat_shift_mask = SAT_SHIFT_MASK(exp);
632
14.2M
#endif
633
634
29.0M
            for (win = 0; win < ics->window_group_length[g]; win++)
635
14.7M
            {
636
91.4M
                for (bin = 0; bin < width; bin += 4)
637
76.6M
                {
638
76.6M
                    uint16_t wb = wa + bin;
639
#ifndef FIXED_POINT
640
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
641
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
642
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
643
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
644
#else
645
76.6M
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
646
76.6M
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
647
76.6M
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
648
76.6M
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
649
650
76.6M
                    if (exp == -32)
651
68.3M
                    {
652
68.3M
                        spec_data[wb+0] = 0;
653
68.3M
                        spec_data[wb+1] = 0;
654
68.3M
                        spec_data[wb+2] = 0;
655
68.3M
                        spec_data[wb+3] = 0;
656
68.3M
                    } else if (exp <= 0) {
657
8.14M
                        spec_data[wb+0] = iq0 >> -exp;
658
8.14M
                        spec_data[wb+1] = iq1 >> -exp;
659
8.14M
                        spec_data[wb+2] = iq2 >> -exp;
660
8.14M
                        spec_data[wb+3] = iq3 >> -exp;
661
8.14M
                    } else { /* exp > 0 */
662
141k
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
663
141k
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
664
141k
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
665
141k
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
666
141k
                    }
667
76.6M
                    if (frac != 0)
668
240k
                    {
669
240k
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
670
240k
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
671
240k
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
672
240k
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
673
240k
                    }
674
675
//#define SCFS_PRINT
676
#ifdef SCFS_PRINT
677
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
682
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
683
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
684
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
685
#endif
686
76.6M
#endif
687
688
76.6M
                    gincrease += 4;
689
76.6M
                    k += 4;
690
76.6M
                }
691
14.7M
                wa += win_inc;
692
14.7M
            }
693
14.2M
            j += width;
694
14.2M
        }
695
478k
        gindex += gincrease;
696
478k
    }
697
698
303k
    return error;
699
303k
}
specrec.c:quant_to_spec
Line
Count
Source
556
396k
{
557
396k
    ALIGN static const real_t pow2_table[] =
558
396k
    {
559
396k
        COEF_CONST(1.0),
560
396k
        COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
561
396k
        COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
562
396k
        COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
563
396k
    };
564
396k
    const real_t *tab = iq_table;
565
566
396k
    uint8_t g, sfb, win;
567
396k
    uint16_t width, bin, k, gindex;
568
396k
    uint8_t error = 0; /* Init error flag */
569
396k
#ifndef FIXED_POINT
570
396k
    real_t scf;
571
#else
572
    int32_t sat_shift_mask = 0;
573
#endif
574
575
396k
    k = 0;
576
396k
    gindex = 0;
577
578
    /* In this case quant_to_spec is no-op and spec_data remains undefined.
579
     * Without peeking into AAC specification, there is no strong evidence if
580
     * such streams are invalid -> just calm down MSAN. */
581
396k
    if (ics->num_swb == 0)
582
709
        memset(spec_data, 0, frame_len * sizeof(real_t));
583
584
1.03M
    for (g = 0; g < ics->num_window_groups; g++)
585
634k
    {
586
634k
        uint16_t j = 0;
587
634k
        uint16_t gincrease = 0;
588
634k
        uint16_t win_inc = ics->swb_offset[ics->num_swb];
589
590
19.5M
        for (sfb = 0; sfb < ics->num_swb; sfb++)
591
18.8M
        {
592
18.8M
            int32_t exp, frac;
593
18.8M
            uint16_t wa = gindex + j;
594
18.8M
            int16_t scale_factor = ics->scale_factors[g][sfb];
595
596
18.8M
            width = ics->swb_offset[sfb+1] - ics->swb_offset[sfb];
597
598
#ifdef FIXED_POINT
599
            scale_factor -= 100;
600
            /* IMDCT pre-scaling */
601
            if (hDecoder->object_type == LD)
602
            {
603
                scale_factor -= 24 /*9*/;
604
            } else {
605
                if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)
606
                    scale_factor -= 16 /*7*/;
607
                else
608
                    scale_factor -= 28 /*10*/;
609
            }
610
            if (scale_factor > 120)
611
                scale_factor = 120;  /* => exp <= 30 */
612
#else
613
18.8M
            (void)hDecoder;
614
18.8M
#endif
615
616
            /* scale_factor for IS or PNS, has different meaning; fill with almost zeroes */
617
18.8M
            if (is_intensity(ics, g, sfb) || is_noise(ics, g, sfb))
618
30.9k
            {
619
30.9k
                scale_factor = 0;
620
30.9k
            }
621
622
            /* scale_factor must be between 0 and 255 */
623
18.8M
            exp = (scale_factor /* - 100 */) >> 2;
624
            /* frac must always be > 0 */
625
18.8M
            frac = (scale_factor /* - 100 */) & 3;
626
627
18.8M
#ifndef FIXED_POINT
628
18.8M
            scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac];
629
#else
630
            if (exp > 0)
631
                sat_shift_mask = SAT_SHIFT_MASK(exp);
632
#endif
633
634
38.6M
            for (win = 0; win < ics->window_group_length[g]; win++)
635
19.8M
            {
636
119M
                for (bin = 0; bin < width; bin += 4)
637
99.9M
                {
638
99.9M
                    uint16_t wb = wa + bin;
639
99.9M
#ifndef FIXED_POINT
640
99.9M
                    spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf;
641
99.9M
                    spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf;
642
99.9M
                    spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf;
643
99.9M
                    spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf;
644
#else
645
                    real_t iq0 = iquant(quant_data[k+0], tab, &error);
646
                    real_t iq1 = iquant(quant_data[k+1], tab, &error);
647
                    real_t iq2 = iquant(quant_data[k+2], tab, &error);
648
                    real_t iq3 = iquant(quant_data[k+3], tab, &error);
649
650
                    if (exp == -32)
651
                    {
652
                        spec_data[wb+0] = 0;
653
                        spec_data[wb+1] = 0;
654
                        spec_data[wb+2] = 0;
655
                        spec_data[wb+3] = 0;
656
                    } else if (exp <= 0) {
657
                        spec_data[wb+0] = iq0 >> -exp;
658
                        spec_data[wb+1] = iq1 >> -exp;
659
                        spec_data[wb+2] = iq2 >> -exp;
660
                        spec_data[wb+3] = iq3 >> -exp;
661
                    } else { /* exp > 0 */
662
                        spec_data[wb+0] = SAT_SHIFT(iq0, exp, sat_shift_mask);
663
                        spec_data[wb+1] = SAT_SHIFT(iq1, exp, sat_shift_mask);
664
                        spec_data[wb+2] = SAT_SHIFT(iq2, exp, sat_shift_mask);
665
                        spec_data[wb+3] = SAT_SHIFT(iq3, exp, sat_shift_mask);
666
                    }
667
                    if (frac != 0)
668
                    {
669
                        spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]);
670
                        spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]);
671
                        spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]);
672
                        spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]);
673
                    }
674
675
//#define SCFS_PRINT
676
#ifdef SCFS_PRINT
677
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
678
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
679
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
680
                    printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
681
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
682
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
683
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
684
                    //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
685
#endif
686
#endif
687
688
99.9M
                    gincrease += 4;
689
99.9M
                    k += 4;
690
99.9M
                }
691
19.8M
                wa += win_inc;
692
19.8M
            }
693
18.8M
            j += width;
694
18.8M
        }
695
634k
        gindex += gincrease;
696
634k
    }
697
698
396k
    return error;
699
396k
}
700
701
static uint8_t allocate_single_channel(NeAACDecStruct *hDecoder, uint8_t channel,
702
                                       uint8_t output_channels)
703
291k
{
704
291k
    int mul = 1;
705
706
#ifdef MAIN_DEC
707
    /* MAIN object type prediction */
708
174k
    if (hDecoder->object_type == MAIN)
709
71.1k
    {
710
        /* allocate the state only when needed */
711
71.1k
        if (hDecoder->pred_stat[channel] != NULL)
712
1.59k
        {
713
1.59k
            faad_free(hDecoder->pred_stat[channel]);
714
1.59k
            hDecoder->pred_stat[channel] = NULL;
715
1.59k
        }
716
717
71.1k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
718
71.1k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
719
71.1k
    }
720
#endif
721
722
#ifdef LTP_DEC
723
174k
    if (is_ltp_ot(hDecoder->object_type))
724
52.4k
    {
725
        /* allocate the state only when needed */
726
52.4k
        if (hDecoder->lt_pred_stat[channel] != NULL)
727
964
        {
728
964
            faad_free(hDecoder->lt_pred_stat[channel]);
729
964
            hDecoder->lt_pred_stat[channel] = NULL;
730
964
        }
731
732
52.4k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
733
52.4k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
734
52.4k
    }
735
#endif
736
737
291k
    if (hDecoder->time_out[channel] != NULL)
738
4.34k
    {
739
4.34k
        faad_free(hDecoder->time_out[channel]);
740
4.34k
        hDecoder->time_out[channel] = NULL;
741
4.34k
    }
742
743
291k
    {
744
291k
        mul = 1;
745
291k
#ifdef SBR_DEC
746
291k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
747
291k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
748
232k
        {
749
            /* SBR requires 2 times as much output data */
750
232k
            mul = 2;
751
232k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
752
232k
        }
753
291k
#endif
754
291k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
755
291k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
756
291k
    }
757
758
291k
#if (defined(PS_DEC) || defined(DRM_PS))
759
291k
    if (output_channels == 2)
760
121k
    {
761
121k
        if (hDecoder->time_out[channel+1] != NULL)
762
1.12k
        {
763
1.12k
            faad_free(hDecoder->time_out[channel+1]);
764
1.12k
            hDecoder->time_out[channel+1] = NULL;
765
1.12k
        }
766
767
121k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
768
121k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
769
121k
    }
770
291k
#endif
771
772
291k
    if (hDecoder->fb_intermed[channel] != NULL)
773
3.81k
    {
774
3.81k
        faad_free(hDecoder->fb_intermed[channel]);
775
3.81k
        hDecoder->fb_intermed[channel] = NULL;
776
3.81k
    }
777
778
291k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
779
291k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
780
781
#ifdef SSR_DEC
782
    if (hDecoder->object_type == SSR)
783
    {
784
        if (hDecoder->ssr_overlap[channel] == NULL)
785
        {
786
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
787
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
788
        }
789
        if (hDecoder->prev_fmd[channel] == NULL)
790
        {
791
            uint16_t k;
792
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
793
            for (k = 0; k < 2*hDecoder->frameLength; k++)
794
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
795
        }
796
    }
797
#endif
798
799
291k
    return 0;
800
291k
}
specrec.c:allocate_single_channel
Line
Count
Source
703
117k
{
704
117k
    int mul = 1;
705
706
#ifdef MAIN_DEC
707
    /* MAIN object type prediction */
708
    if (hDecoder->object_type == MAIN)
709
    {
710
        /* allocate the state only when needed */
711
        if (hDecoder->pred_stat[channel] != NULL)
712
        {
713
            faad_free(hDecoder->pred_stat[channel]);
714
            hDecoder->pred_stat[channel] = NULL;
715
        }
716
717
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
718
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
719
    }
720
#endif
721
722
#ifdef LTP_DEC
723
    if (is_ltp_ot(hDecoder->object_type))
724
    {
725
        /* allocate the state only when needed */
726
        if (hDecoder->lt_pred_stat[channel] != NULL)
727
        {
728
            faad_free(hDecoder->lt_pred_stat[channel]);
729
            hDecoder->lt_pred_stat[channel] = NULL;
730
        }
731
732
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
733
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
734
    }
735
#endif
736
737
117k
    if (hDecoder->time_out[channel] != NULL)
738
0
    {
739
0
        faad_free(hDecoder->time_out[channel]);
740
0
        hDecoder->time_out[channel] = NULL;
741
0
    }
742
743
117k
    {
744
117k
        mul = 1;
745
117k
#ifdef SBR_DEC
746
117k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
747
117k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
748
101k
        {
749
            /* SBR requires 2 times as much output data */
750
101k
            mul = 2;
751
101k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
752
101k
        }
753
117k
#endif
754
117k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
755
117k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
756
117k
    }
757
758
117k
#if (defined(PS_DEC) || defined(DRM_PS))
759
117k
    if (output_channels == 2)
760
117k
    {
761
117k
        if (hDecoder->time_out[channel+1] != NULL)
762
0
        {
763
0
            faad_free(hDecoder->time_out[channel+1]);
764
0
            hDecoder->time_out[channel+1] = NULL;
765
0
        }
766
767
117k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
768
117k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
769
117k
    }
770
117k
#endif
771
772
117k
    if (hDecoder->fb_intermed[channel] != NULL)
773
0
    {
774
0
        faad_free(hDecoder->fb_intermed[channel]);
775
0
        hDecoder->fb_intermed[channel] = NULL;
776
0
    }
777
778
117k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
779
117k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
780
781
#ifdef SSR_DEC
782
    if (hDecoder->object_type == SSR)
783
    {
784
        if (hDecoder->ssr_overlap[channel] == NULL)
785
        {
786
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
787
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
788
        }
789
        if (hDecoder->prev_fmd[channel] == NULL)
790
        {
791
            uint16_t k;
792
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
793
            for (k = 0; k < 2*hDecoder->frameLength; k++)
794
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
795
        }
796
    }
797
#endif
798
799
117k
    return 0;
800
117k
}
specrec.c:allocate_single_channel
Line
Count
Source
703
174k
{
704
174k
    int mul = 1;
705
706
174k
#ifdef MAIN_DEC
707
    /* MAIN object type prediction */
708
174k
    if (hDecoder->object_type == MAIN)
709
71.1k
    {
710
        /* allocate the state only when needed */
711
71.1k
        if (hDecoder->pred_stat[channel] != NULL)
712
1.59k
        {
713
1.59k
            faad_free(hDecoder->pred_stat[channel]);
714
1.59k
            hDecoder->pred_stat[channel] = NULL;
715
1.59k
        }
716
717
71.1k
        hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
718
71.1k
        reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
719
71.1k
    }
720
174k
#endif
721
722
174k
#ifdef LTP_DEC
723
174k
    if (is_ltp_ot(hDecoder->object_type))
724
52.4k
    {
725
        /* allocate the state only when needed */
726
52.4k
        if (hDecoder->lt_pred_stat[channel] != NULL)
727
964
        {
728
964
            faad_free(hDecoder->lt_pred_stat[channel]);
729
964
            hDecoder->lt_pred_stat[channel] = NULL;
730
964
        }
731
732
52.4k
        hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
733
52.4k
        memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
734
52.4k
    }
735
174k
#endif
736
737
174k
    if (hDecoder->time_out[channel] != NULL)
738
4.34k
    {
739
4.34k
        faad_free(hDecoder->time_out[channel]);
740
4.34k
        hDecoder->time_out[channel] = NULL;
741
4.34k
    }
742
743
174k
    {
744
174k
        mul = 1;
745
174k
#ifdef SBR_DEC
746
174k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
747
174k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
748
131k
        {
749
            /* SBR requires 2 times as much output data */
750
131k
            mul = 2;
751
131k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
752
131k
        }
753
174k
#endif
754
174k
        hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
755
174k
        memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
756
174k
    }
757
758
174k
#if (defined(PS_DEC) || defined(DRM_PS))
759
174k
    if (output_channels == 2)
760
3.96k
    {
761
3.96k
        if (hDecoder->time_out[channel+1] != NULL)
762
1.12k
        {
763
1.12k
            faad_free(hDecoder->time_out[channel+1]);
764
1.12k
            hDecoder->time_out[channel+1] = NULL;
765
1.12k
        }
766
767
3.96k
        hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
768
3.96k
        memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t));
769
3.96k
    }
770
174k
#endif
771
772
174k
    if (hDecoder->fb_intermed[channel] != NULL)
773
3.81k
    {
774
3.81k
        faad_free(hDecoder->fb_intermed[channel]);
775
3.81k
        hDecoder->fb_intermed[channel] = NULL;
776
3.81k
    }
777
778
174k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
779
174k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
780
781
#ifdef SSR_DEC
782
    if (hDecoder->object_type == SSR)
783
    {
784
        if (hDecoder->ssr_overlap[channel] == NULL)
785
        {
786
            hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
787
            memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
788
        }
789
        if (hDecoder->prev_fmd[channel] == NULL)
790
        {
791
            uint16_t k;
792
            hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
793
            for (k = 0; k < 2*hDecoder->frameLength; k++)
794
                hDecoder->prev_fmd[channel][k] = REAL_CONST(-1);
795
        }
796
    }
797
#endif
798
799
174k
    return 0;
800
174k
}
801
802
static uint8_t allocate_channel_pair(NeAACDecStruct *hDecoder,
803
                                     uint8_t channel, uint8_t paired_channel)
804
45.5k
{
805
45.5k
    int mul = 1;
806
807
#ifdef MAIN_DEC
808
    /* MAIN object type prediction */
809
20.3k
    if (hDecoder->object_type == MAIN)
810
10.2k
    {
811
        /* allocate the state only when needed */
812
10.2k
        if (hDecoder->pred_stat[channel] == NULL)
813
10.2k
        {
814
10.2k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
815
10.2k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
816
10.2k
        }
817
10.2k
        if (hDecoder->pred_stat[paired_channel] == NULL)
818
10.2k
        {
819
10.2k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
820
10.2k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
821
10.2k
        }
822
10.2k
    }
823
#endif
824
825
#ifdef LTP_DEC
826
20.3k
    if (is_ltp_ot(hDecoder->object_type))
827
7.68k
    {
828
        /* allocate the state only when needed */
829
7.68k
        if (hDecoder->lt_pred_stat[channel] == NULL)
830
7.63k
        {
831
7.63k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
832
7.63k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
833
7.63k
        }
834
7.68k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
835
7.63k
        {
836
7.63k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
837
7.63k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
838
7.63k
        }
839
7.68k
    }
840
#endif
841
842
45.5k
    {
843
45.5k
        mul = 1;
844
45.5k
#ifdef SBR_DEC
845
45.5k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
846
45.5k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
847
37.7k
        {
848
            /* SBR requires 2 times as much output data */
849
37.7k
            mul = 2;
850
37.7k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
851
37.7k
        }
852
45.5k
#endif
853
45.5k
    }
854
45.5k
    if (hDecoder->time_out[channel] != NULL)
855
93
    {
856
93
        faad_free(hDecoder->time_out[channel]);
857
93
        hDecoder->time_out[channel] = NULL;
858
93
    }
859
45.5k
    if (hDecoder->time_out[paired_channel] != NULL)
860
92
    {
861
92
        faad_free(hDecoder->time_out[paired_channel]);
862
92
        hDecoder->time_out[paired_channel] = NULL;
863
92
    }
864
45.5k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
865
45.5k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
866
45.5k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
867
45.5k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
868
869
45.5k
    if (hDecoder->fb_intermed[channel] != NULL)
870
93
    {
871
93
        faad_free(hDecoder->fb_intermed[channel]);
872
93
        hDecoder->fb_intermed[channel] = NULL;
873
93
    }
874
45.5k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
875
86
    {
876
86
        faad_free(hDecoder->fb_intermed[paired_channel]);
877
86
        hDecoder->fb_intermed[paired_channel] = NULL;
878
86
    }
879
45.5k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
880
45.5k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
881
45.5k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
882
45.5k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
883
884
#ifdef SSR_DEC
885
    if (hDecoder->object_type == SSR)
886
    {
887
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
888
        {
889
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
890
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
891
        }
892
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
893
        {
894
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
895
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
896
        }
897
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
898
        {
899
            uint16_t k;
900
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
901
            for (k = 0; k < 2*hDecoder->frameLength; k++)
902
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
903
        }
904
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
905
        {
906
            uint16_t k;
907
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
908
            for (k = 0; k < 2*hDecoder->frameLength; k++)
909
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
910
        }
911
    }
912
#endif
913
914
45.5k
    return 0;
915
45.5k
}
specrec.c:allocate_channel_pair
Line
Count
Source
804
25.1k
{
805
25.1k
    int mul = 1;
806
807
#ifdef MAIN_DEC
808
    /* MAIN object type prediction */
809
    if (hDecoder->object_type == MAIN)
810
    {
811
        /* allocate the state only when needed */
812
        if (hDecoder->pred_stat[channel] == NULL)
813
        {
814
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
815
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
816
        }
817
        if (hDecoder->pred_stat[paired_channel] == NULL)
818
        {
819
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
820
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
821
        }
822
    }
823
#endif
824
825
#ifdef LTP_DEC
826
    if (is_ltp_ot(hDecoder->object_type))
827
    {
828
        /* allocate the state only when needed */
829
        if (hDecoder->lt_pred_stat[channel] == NULL)
830
        {
831
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
832
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
833
        }
834
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
835
        {
836
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
837
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
838
        }
839
    }
840
#endif
841
842
25.1k
    {
843
25.1k
        mul = 1;
844
25.1k
#ifdef SBR_DEC
845
25.1k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
846
25.1k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
847
22.1k
        {
848
            /* SBR requires 2 times as much output data */
849
22.1k
            mul = 2;
850
22.1k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
851
22.1k
        }
852
25.1k
#endif
853
25.1k
    }
854
25.1k
    if (hDecoder->time_out[channel] != NULL)
855
6
    {
856
6
        faad_free(hDecoder->time_out[channel]);
857
6
        hDecoder->time_out[channel] = NULL;
858
6
    }
859
25.1k
    if (hDecoder->time_out[paired_channel] != NULL)
860
6
    {
861
6
        faad_free(hDecoder->time_out[paired_channel]);
862
6
        hDecoder->time_out[paired_channel] = NULL;
863
6
    }
864
25.1k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
865
25.1k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
866
25.1k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
867
25.1k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
868
869
25.1k
    if (hDecoder->fb_intermed[channel] != NULL)
870
6
    {
871
6
        faad_free(hDecoder->fb_intermed[channel]);
872
6
        hDecoder->fb_intermed[channel] = NULL;
873
6
    }
874
25.1k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
875
0
    {
876
0
        faad_free(hDecoder->fb_intermed[paired_channel]);
877
0
        hDecoder->fb_intermed[paired_channel] = NULL;
878
0
    }
879
25.1k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
880
25.1k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
881
25.1k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
882
25.1k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
883
884
#ifdef SSR_DEC
885
    if (hDecoder->object_type == SSR)
886
    {
887
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
888
        {
889
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
890
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
891
        }
892
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
893
        {
894
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
895
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
896
        }
897
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
898
        {
899
            uint16_t k;
900
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
901
            for (k = 0; k < 2*hDecoder->frameLength; k++)
902
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
903
        }
904
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
905
        {
906
            uint16_t k;
907
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
908
            for (k = 0; k < 2*hDecoder->frameLength; k++)
909
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
910
        }
911
    }
912
#endif
913
914
25.1k
    return 0;
915
25.1k
}
specrec.c:allocate_channel_pair
Line
Count
Source
804
20.3k
{
805
20.3k
    int mul = 1;
806
807
20.3k
#ifdef MAIN_DEC
808
    /* MAIN object type prediction */
809
20.3k
    if (hDecoder->object_type == MAIN)
810
10.2k
    {
811
        /* allocate the state only when needed */
812
10.2k
        if (hDecoder->pred_stat[channel] == NULL)
813
10.2k
        {
814
10.2k
            hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
815
10.2k
            reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength);
816
10.2k
        }
817
10.2k
        if (hDecoder->pred_stat[paired_channel] == NULL)
818
10.2k
        {
819
10.2k
            hDecoder->pred_stat[paired_channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state));
820
10.2k
            reset_all_predictors(hDecoder->pred_stat[paired_channel], hDecoder->frameLength);
821
10.2k
        }
822
10.2k
    }
823
20.3k
#endif
824
825
20.3k
#ifdef LTP_DEC
826
20.3k
    if (is_ltp_ot(hDecoder->object_type))
827
7.68k
    {
828
        /* allocate the state only when needed */
829
7.68k
        if (hDecoder->lt_pred_stat[channel] == NULL)
830
7.63k
        {
831
7.63k
            hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
832
7.63k
            memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
833
7.63k
        }
834
7.68k
        if (hDecoder->lt_pred_stat[paired_channel] == NULL)
835
7.63k
        {
836
7.63k
            hDecoder->lt_pred_stat[paired_channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t));
837
7.63k
            memset(hDecoder->lt_pred_stat[paired_channel], 0, hDecoder->frameLength*4 * sizeof(int16_t));
838
7.63k
        }
839
7.68k
    }
840
20.3k
#endif
841
842
20.3k
    {
843
20.3k
        mul = 1;
844
20.3k
#ifdef SBR_DEC
845
20.3k
        hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0;
846
20.3k
        if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
847
15.5k
        {
848
            /* SBR requires 2 times as much output data */
849
15.5k
            mul = 2;
850
15.5k
            hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1;
851
15.5k
        }
852
20.3k
#endif
853
20.3k
    }
854
20.3k
    if (hDecoder->time_out[channel] != NULL)
855
87
    {
856
87
        faad_free(hDecoder->time_out[channel]);
857
87
        hDecoder->time_out[channel] = NULL;
858
87
    }
859
20.3k
    if (hDecoder->time_out[paired_channel] != NULL)
860
86
    {
861
86
        faad_free(hDecoder->time_out[paired_channel]);
862
86
        hDecoder->time_out[paired_channel] = NULL;
863
86
    }
864
20.3k
    hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
865
20.3k
    memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
866
20.3k
    hDecoder->time_out[paired_channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t));
867
20.3k
    memset(hDecoder->time_out[paired_channel], 0, mul*hDecoder->frameLength*sizeof(real_t));
868
869
20.3k
    if (hDecoder->fb_intermed[channel] != NULL)
870
87
    {
871
87
        faad_free(hDecoder->fb_intermed[channel]);
872
87
        hDecoder->fb_intermed[channel] = NULL;
873
87
    }
874
20.3k
    if (hDecoder->fb_intermed[paired_channel] != NULL)
875
86
    {
876
86
        faad_free(hDecoder->fb_intermed[paired_channel]);
877
86
        hDecoder->fb_intermed[paired_channel] = NULL;
878
86
    }
879
20.3k
    hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
880
20.3k
    memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t));
881
20.3k
    hDecoder->fb_intermed[paired_channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t));
882
20.3k
    memset(hDecoder->fb_intermed[paired_channel], 0, hDecoder->frameLength*sizeof(real_t));
883
884
#ifdef SSR_DEC
885
    if (hDecoder->object_type == SSR)
886
    {
887
        if (hDecoder->ssr_overlap[cpe->channel] == NULL)
888
        {
889
            hDecoder->ssr_overlap[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
890
            memset(hDecoder->ssr_overlap[cpe->channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
891
        }
892
        if (hDecoder->ssr_overlap[cpe->paired_channel] == NULL)
893
        {
894
            hDecoder->ssr_overlap[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
895
            memset(hDecoder->ssr_overlap[cpe->paired_channel], 0, 2*hDecoder->frameLength*sizeof(real_t));
896
        }
897
        if (hDecoder->prev_fmd[cpe->channel] == NULL)
898
        {
899
            uint16_t k;
900
            hDecoder->prev_fmd[cpe->channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
901
            for (k = 0; k < 2*hDecoder->frameLength; k++)
902
                hDecoder->prev_fmd[cpe->channel][k] = REAL_CONST(-1);
903
        }
904
        if (hDecoder->prev_fmd[cpe->paired_channel] == NULL)
905
        {
906
            uint16_t k;
907
            hDecoder->prev_fmd[cpe->paired_channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t));
908
            for (k = 0; k < 2*hDecoder->frameLength; k++)
909
                hDecoder->prev_fmd[cpe->paired_channel][k] = REAL_CONST(-1);
910
        }
911
    }
912
#endif
913
914
20.3k
    return 0;
915
20.3k
}
916
917
uint8_t reconstruct_single_channel(NeAACDecStruct *hDecoder, ic_stream *ics,
918
                                   element *sce, int16_t *spec_data)
919
550k
{
920
550k
    uint8_t retval;
921
550k
    uint8_t output_channels;
922
550k
    ALIGN real_t spec_coef[1024];
923
924
#ifdef PROFILE
925
    int64_t count = faad_get_ts();
926
#endif
927
928
929
    /* always allocate 2 channels, PS can always "suddenly" turn up */
930
#if ( (defined(DRM) && defined(DRM_PS)) )
931
    output_channels = 2;
932
#elif defined(PS_DEC)
933
412k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
934
11.3k
        output_channels = 2;
935
401k
    else
936
401k
        output_channels = 1;
937
#else
938
    output_channels = 1;
939
#endif
940
941
550k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
942
482k
    {
943
        /* element_output_channels not set yet */
944
482k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
945
482k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
946
        /* element inconsistency */
947
948
        /* this only happens if PS is actually found but not in the first frame
949
         * this means that there is only 1 bitstream element!
950
         */
951
952
        /* The simplest way to fix the accounting,
953
         * is to reallocate this and all the following channels.
954
         */
955
1.24k
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
956
1.24k
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
957
958
1.24k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
959
960
        //return 21;
961
1.24k
    }
962
963
550k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
964
492k
    {
965
492k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
966
492k
        if (retval > 0)
967
0
            return retval;
968
969
492k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
970
492k
    }
971
972
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
973
550k
    if(!hDecoder->time_out[sce->channel])
974
0
        return 15;
975
550k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
976
0
        return 15;
977
550k
    if(!hDecoder->fb_intermed[sce->channel])
978
0
        return 15;
979
980
    /* dequantisation and scaling */
981
550k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
982
550k
    if (retval > 0)
983
172
        return retval;
984
985
#ifdef PROFILE
986
    count = faad_get_ts() - count;
987
    hDecoder->requant_cycles += count;
988
#endif
989
990
991
    /* pns decoding */
992
550k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
993
550k
        &(hDecoder->__r1), &(hDecoder->__r2));
994
995
#ifdef MAIN_DEC
996
    /* MAIN object type prediction */
997
196k
    if (hDecoder->object_type == MAIN)
998
79.3k
    {
999
79.3k
    if (!hDecoder->pred_stat[sce->channel])
1000
0
      return 33;
1001
1002
        /* intra channel prediction */
1003
79.3k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1004
79.3k
            hDecoder->sf_index);
1005
1006
        /* In addition, for scalefactor bands coded by perceptual
1007
           noise substitution the predictors belonging to the
1008
           corresponding spectral coefficients are reset.
1009
        */
1010
79.3k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1011
79.3k
    }
1012
196k
#endif
1013
1014
#ifdef LTP_DEC
1015
412k
    if (is_ltp_ot(hDecoder->object_type))
1016
187k
    {
1017
187k
#ifdef LD_DEC
1018
187k
        if (hDecoder->object_type == LD)
1019
1.24k
        {
1020
1.24k
            if (ics->ltp.data_present)
1021
158
            {
1022
158
                if (ics->ltp.lag_update)
1023
47
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1024
158
            }
1025
1.24k
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1026
1.24k
        }
1027
187k
#endif
1028
1029
        /* long term prediction */
1030
187k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1031
187k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1032
187k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1033
187k
    }
1034
196k
#endif
1035
1036
    /* tns decoding */
1037
196k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1038
196k
        spec_coef, hDecoder->frameLength);
1039
1040
    /* drc decoding */
1041
196k
#ifdef APPLY_DRC
1042
550k
    if (hDecoder->drc->present)
1043
26.3k
    {
1044
26.3k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1045
23.5k
            drc_decode(hDecoder->drc, spec_coef);
1046
26.3k
    }
1047
196k
#endif
1048
    /* filter bank */
1049
#ifdef SSR_DEC
1050
    if (hDecoder->object_type != SSR)
1051
    {
1052
#endif
1053
196k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1054
196k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1055
196k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1056
196k
            hDecoder->object_type, hDecoder->frameLength);
1057
#ifdef SSR_DEC
1058
    } else {
1059
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1060
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1061
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1062
            hDecoder->frameLength);
1063
    }
1064
#endif
1065
1066
    /* save window shape for next frame */
1067
196k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1068
1069
#ifdef LTP_DEC
1070
412k
    if (is_ltp_ot(hDecoder->object_type))
1071
187k
    {
1072
187k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1073
187k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1074
187k
    }
1075
#endif
1076
1077
196k
#ifdef SBR_DEC
1078
550k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1079
436k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1080
436k
    {
1081
436k
        int ele = hDecoder->fr_ch_ele;
1082
436k
        int ch = sce->channel;
1083
1084
        /* following case can happen when forceUpSampling == 1 */
1085
436k
        if (hDecoder->sbr[ele] == NULL)
1086
331k
        {
1087
331k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1088
331k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1089
331k
                hDecoder->downSampledSBR
1090
#ifdef DRM
1091
                , 0
1092
#endif
1093
331k
                );
1094
331k
        }
1095
436k
        if (!hDecoder->sbr[ele])
1096
102
            return 19;
1097
1098
436k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1099
51.8k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1100
384k
        else
1101
384k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1102
1103
        /* check if any of the PS tools is used */
1104
436k
#if (defined(PS_DEC) || defined(DRM_PS))
1105
436k
        if (hDecoder->ps_used[ele] == 0)
1106
415k
        {
1107
415k
#endif
1108
415k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1109
415k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1110
415k
#if (defined(PS_DEC) || defined(DRM_PS))
1111
415k
        } else {
1112
20.9k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1113
20.9k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1114
20.9k
                hDecoder->downSampledSBR);
1115
20.9k
        }
1116
436k
#endif
1117
436k
        if (retval > 0)
1118
94
            return retval;
1119
436k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1120
13
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1121
13
    {
1122
13
        return 23;
1123
13
    }
1124
549k
#endif
1125
1126
    /* copy L to R when no PS is used */
1127
549k
#if (defined(PS_DEC) || defined(DRM_PS))
1128
549k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1129
528k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1130
127k
    {
1131
127k
        int ele = hDecoder->fr_ch_ele;
1132
127k
        int ch = sce->channel;
1133
127k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1134
127k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1135
1136
127k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1137
127k
    }
1138
549k
#endif
1139
1140
549k
    return 0;
1141
196k
}
reconstruct_single_channel
Line
Count
Source
919
137k
{
920
137k
    uint8_t retval;
921
137k
    uint8_t output_channels;
922
137k
    ALIGN real_t spec_coef[1024];
923
924
#ifdef PROFILE
925
    int64_t count = faad_get_ts();
926
#endif
927
928
929
    /* always allocate 2 channels, PS can always "suddenly" turn up */
930
137k
#if ( (defined(DRM) && defined(DRM_PS)) )
931
137k
    output_channels = 2;
932
#elif defined(PS_DEC)
933
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
934
        output_channels = 2;
935
    else
936
        output_channels = 1;
937
#else
938
    output_channels = 1;
939
#endif
940
941
137k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
942
117k
    {
943
        /* element_output_channels not set yet */
944
117k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
945
117k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
946
        /* element inconsistency */
947
948
        /* this only happens if PS is actually found but not in the first frame
949
         * this means that there is only 1 bitstream element!
950
         */
951
952
        /* The simplest way to fix the accounting,
953
         * is to reallocate this and all the following channels.
954
         */
955
0
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
956
0
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
957
958
0
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
959
960
        //return 21;
961
0
    }
962
963
137k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
964
117k
    {
965
117k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
966
117k
        if (retval > 0)
967
0
            return retval;
968
969
117k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
970
117k
    }
971
972
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
973
137k
    if(!hDecoder->time_out[sce->channel])
974
0
        return 15;
975
137k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
976
0
        return 15;
977
137k
    if(!hDecoder->fb_intermed[sce->channel])
978
0
        return 15;
979
980
    /* dequantisation and scaling */
981
137k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
982
137k
    if (retval > 0)
983
59
        return retval;
984
985
#ifdef PROFILE
986
    count = faad_get_ts() - count;
987
    hDecoder->requant_cycles += count;
988
#endif
989
990
991
    /* pns decoding */
992
137k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
993
137k
        &(hDecoder->__r1), &(hDecoder->__r2));
994
995
#ifdef MAIN_DEC
996
    /* MAIN object type prediction */
997
    if (hDecoder->object_type == MAIN)
998
    {
999
    if (!hDecoder->pred_stat[sce->channel])
1000
      return 33;
1001
1002
        /* intra channel prediction */
1003
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1004
            hDecoder->sf_index);
1005
1006
        /* In addition, for scalefactor bands coded by perceptual
1007
           noise substitution the predictors belonging to the
1008
           corresponding spectral coefficients are reset.
1009
        */
1010
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1011
    }
1012
#endif
1013
1014
#ifdef LTP_DEC
1015
    if (is_ltp_ot(hDecoder->object_type))
1016
    {
1017
#ifdef LD_DEC
1018
        if (hDecoder->object_type == LD)
1019
        {
1020
            if (ics->ltp.data_present)
1021
            {
1022
                if (ics->ltp.lag_update)
1023
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1024
            }
1025
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1026
        }
1027
#endif
1028
1029
        /* long term prediction */
1030
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1031
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1032
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1033
    }
1034
#endif
1035
1036
    /* tns decoding */
1037
137k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1038
137k
        spec_coef, hDecoder->frameLength);
1039
1040
    /* drc decoding */
1041
137k
#ifdef APPLY_DRC
1042
137k
    if (hDecoder->drc->present)
1043
0
    {
1044
0
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1045
0
            drc_decode(hDecoder->drc, spec_coef);
1046
0
    }
1047
137k
#endif
1048
    /* filter bank */
1049
#ifdef SSR_DEC
1050
    if (hDecoder->object_type != SSR)
1051
    {
1052
#endif
1053
137k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1054
137k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1055
137k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1056
137k
            hDecoder->object_type, hDecoder->frameLength);
1057
#ifdef SSR_DEC
1058
    } else {
1059
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1060
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1061
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1062
            hDecoder->frameLength);
1063
    }
1064
#endif
1065
1066
    /* save window shape for next frame */
1067
137k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1068
1069
#ifdef LTP_DEC
1070
    if (is_ltp_ot(hDecoder->object_type))
1071
    {
1072
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1073
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1074
    }
1075
#endif
1076
1077
137k
#ifdef SBR_DEC
1078
137k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1079
120k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1080
120k
    {
1081
120k
        int ele = hDecoder->fr_ch_ele;
1082
120k
        int ch = sce->channel;
1083
1084
        /* following case can happen when forceUpSampling == 1 */
1085
120k
        if (hDecoder->sbr[ele] == NULL)
1086
82.5k
        {
1087
82.5k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1088
82.5k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1089
82.5k
                hDecoder->downSampledSBR
1090
82.5k
#ifdef DRM
1091
82.5k
                , 0
1092
82.5k
#endif
1093
82.5k
                );
1094
82.5k
        }
1095
120k
        if (!hDecoder->sbr[ele])
1096
0
            return 19;
1097
1098
120k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1099
18.8k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1100
101k
        else
1101
101k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1102
1103
        /* check if any of the PS tools is used */
1104
120k
#if (defined(PS_DEC) || defined(DRM_PS))
1105
120k
        if (hDecoder->ps_used[ele] == 0)
1106
110k
        {
1107
110k
#endif
1108
110k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1109
110k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1110
110k
#if (defined(PS_DEC) || defined(DRM_PS))
1111
110k
        } else {
1112
9.66k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1113
9.66k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1114
9.66k
                hDecoder->downSampledSBR);
1115
9.66k
        }
1116
120k
#endif
1117
120k
        if (retval > 0)
1118
13
            return retval;
1119
120k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1120
2
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1121
2
    {
1122
2
        return 23;
1123
2
    }
1124
137k
#endif
1125
1126
    /* copy L to R when no PS is used */
1127
137k
#if (defined(PS_DEC) || defined(DRM_PS))
1128
137k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1129
127k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1130
127k
    {
1131
127k
        int ele = hDecoder->fr_ch_ele;
1132
127k
        int ch = sce->channel;
1133
127k
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1134
127k
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1135
1136
127k
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1137
127k
    }
1138
137k
#endif
1139
1140
137k
    return 0;
1141
137k
}
reconstruct_single_channel
Line
Count
Source
919
196k
{
920
196k
    uint8_t retval;
921
196k
    uint8_t output_channels;
922
196k
    ALIGN real_t spec_coef[1024];
923
924
#ifdef PROFILE
925
    int64_t count = faad_get_ts();
926
#endif
927
928
929
    /* always allocate 2 channels, PS can always "suddenly" turn up */
930
#if ( (defined(DRM) && defined(DRM_PS)) )
931
    output_channels = 2;
932
#elif defined(PS_DEC)
933
196k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
934
5.51k
        output_channels = 2;
935
190k
    else
936
190k
        output_channels = 1;
937
#else
938
    output_channels = 1;
939
#endif
940
941
196k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
942
170k
    {
943
        /* element_output_channels not set yet */
944
170k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
945
170k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
946
        /* element inconsistency */
947
948
        /* this only happens if PS is actually found but not in the first frame
949
         * this means that there is only 1 bitstream element!
950
         */
951
952
        /* The simplest way to fix the accounting,
953
         * is to reallocate this and all the following channels.
954
         */
955
580
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
956
580
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
957
958
580
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
959
960
        //return 21;
961
580
    }
962
963
196k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
964
174k
    {
965
174k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
966
174k
        if (retval > 0)
967
0
            return retval;
968
969
174k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
970
174k
    }
971
972
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
973
196k
    if(!hDecoder->time_out[sce->channel])
974
0
        return 15;
975
196k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
976
0
        return 15;
977
196k
    if(!hDecoder->fb_intermed[sce->channel])
978
0
        return 15;
979
980
    /* dequantisation and scaling */
981
196k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
982
196k
    if (retval > 0)
983
69
        return retval;
984
985
#ifdef PROFILE
986
    count = faad_get_ts() - count;
987
    hDecoder->requant_cycles += count;
988
#endif
989
990
991
    /* pns decoding */
992
196k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
993
196k
        &(hDecoder->__r1), &(hDecoder->__r2));
994
995
196k
#ifdef MAIN_DEC
996
    /* MAIN object type prediction */
997
196k
    if (hDecoder->object_type == MAIN)
998
79.3k
    {
999
79.3k
    if (!hDecoder->pred_stat[sce->channel])
1000
0
      return 33;
1001
1002
        /* intra channel prediction */
1003
79.3k
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1004
79.3k
            hDecoder->sf_index);
1005
1006
        /* In addition, for scalefactor bands coded by perceptual
1007
           noise substitution the predictors belonging to the
1008
           corresponding spectral coefficients are reset.
1009
        */
1010
79.3k
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1011
79.3k
    }
1012
196k
#endif
1013
1014
196k
#ifdef LTP_DEC
1015
196k
    if (is_ltp_ot(hDecoder->object_type))
1016
56.1k
    {
1017
56.1k
#ifdef LD_DEC
1018
56.1k
        if (hDecoder->object_type == LD)
1019
632
        {
1020
632
            if (ics->ltp.data_present)
1021
87
            {
1022
87
                if (ics->ltp.lag_update)
1023
21
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1024
87
            }
1025
632
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1026
632
        }
1027
56.1k
#endif
1028
1029
        /* long term prediction */
1030
56.1k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1031
56.1k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1032
56.1k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1033
56.1k
    }
1034
196k
#endif
1035
1036
    /* tns decoding */
1037
196k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1038
196k
        spec_coef, hDecoder->frameLength);
1039
1040
    /* drc decoding */
1041
196k
#ifdef APPLY_DRC
1042
196k
    if (hDecoder->drc->present)
1043
12.6k
    {
1044
12.6k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1045
11.4k
            drc_decode(hDecoder->drc, spec_coef);
1046
12.6k
    }
1047
196k
#endif
1048
    /* filter bank */
1049
#ifdef SSR_DEC
1050
    if (hDecoder->object_type != SSR)
1051
    {
1052
#endif
1053
196k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1054
196k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1055
196k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1056
196k
            hDecoder->object_type, hDecoder->frameLength);
1057
#ifdef SSR_DEC
1058
    } else {
1059
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1060
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1061
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1062
            hDecoder->frameLength);
1063
    }
1064
#endif
1065
1066
    /* save window shape for next frame */
1067
196k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1068
1069
196k
#ifdef LTP_DEC
1070
196k
    if (is_ltp_ot(hDecoder->object_type))
1071
56.1k
    {
1072
56.1k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1073
56.1k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1074
56.1k
    }
1075
196k
#endif
1076
1077
196k
#ifdef SBR_DEC
1078
196k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1079
148k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1080
148k
    {
1081
148k
        int ele = hDecoder->fr_ch_ele;
1082
148k
        int ch = sce->channel;
1083
1084
        /* following case can happen when forceUpSampling == 1 */
1085
148k
        if (hDecoder->sbr[ele] == NULL)
1086
111k
        {
1087
111k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1088
111k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1089
111k
                hDecoder->downSampledSBR
1090
#ifdef DRM
1091
                , 0
1092
#endif
1093
111k
                );
1094
111k
        }
1095
148k
        if (!hDecoder->sbr[ele])
1096
43
            return 19;
1097
1098
148k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1099
19.0k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1100
129k
        else
1101
129k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1102
1103
        /* check if any of the PS tools is used */
1104
148k
#if (defined(PS_DEC) || defined(DRM_PS))
1105
148k
        if (hDecoder->ps_used[ele] == 0)
1106
142k
        {
1107
142k
#endif
1108
142k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1109
142k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1110
142k
#if (defined(PS_DEC) || defined(DRM_PS))
1111
142k
        } else {
1112
5.51k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1113
5.51k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1114
5.51k
                hDecoder->downSampledSBR);
1115
5.51k
        }
1116
148k
#endif
1117
148k
        if (retval > 0)
1118
50
            return retval;
1119
148k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1120
5
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1121
5
    {
1122
5
        return 23;
1123
5
    }
1124
195k
#endif
1125
1126
    /* copy L to R when no PS is used */
1127
195k
#if (defined(PS_DEC) || defined(DRM_PS))
1128
195k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1129
190k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1130
0
    {
1131
0
        int ele = hDecoder->fr_ch_ele;
1132
0
        int ch = sce->channel;
1133
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1134
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1135
1136
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1137
0
    }
1138
195k
#endif
1139
1140
195k
    return 0;
1141
196k
}
reconstruct_single_channel
Line
Count
Source
919
216k
{
920
216k
    uint8_t retval;
921
216k
    uint8_t output_channels;
922
216k
    ALIGN real_t spec_coef[1024];
923
924
#ifdef PROFILE
925
    int64_t count = faad_get_ts();
926
#endif
927
928
929
    /* always allocate 2 channels, PS can always "suddenly" turn up */
930
#if ( (defined(DRM) && defined(DRM_PS)) )
931
    output_channels = 2;
932
#elif defined(PS_DEC)
933
216k
    if (hDecoder->ps_used[hDecoder->fr_ch_ele])
934
5.80k
        output_channels = 2;
935
210k
    else
936
210k
        output_channels = 1;
937
#else
938
    output_channels = 1;
939
#endif
940
941
216k
    if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0)
942
195k
    {
943
        /* element_output_channels not set yet */
944
195k
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
945
195k
    } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) {
946
        /* element inconsistency */
947
948
        /* this only happens if PS is actually found but not in the first frame
949
         * this means that there is only 1 bitstream element!
950
         */
951
952
        /* The simplest way to fix the accounting,
953
         * is to reallocate this and all the following channels.
954
         */
955
669
        memset(&hDecoder->element_alloced[hDecoder->fr_ch_ele], 0,
956
669
            sizeof(uint8_t) * (MAX_SYNTAX_ELEMENTS - hDecoder->fr_ch_ele));
957
958
669
        hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels;
959
960
        //return 21;
961
669
    }
962
963
216k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0)
964
200k
    {
965
200k
        retval = allocate_single_channel(hDecoder, sce->channel, output_channels);
966
200k
        if (retval > 0)
967
0
            return retval;
968
969
200k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1;
970
200k
    }
971
972
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
973
216k
    if(!hDecoder->time_out[sce->channel])
974
0
        return 15;
975
216k
    if(output_channels > 1 && !hDecoder->time_out[sce->channel+1])
976
0
        return 15;
977
216k
    if(!hDecoder->fb_intermed[sce->channel])
978
0
        return 15;
979
980
    /* dequantisation and scaling */
981
216k
    retval = quant_to_spec(hDecoder, ics, spec_data, spec_coef, hDecoder->frameLength);
982
216k
    if (retval > 0)
983
44
        return retval;
984
985
#ifdef PROFILE
986
    count = faad_get_ts() - count;
987
    hDecoder->requant_cycles += count;
988
#endif
989
990
991
    /* pns decoding */
992
216k
    pns_decode(ics, NULL, spec_coef, NULL, hDecoder->frameLength, 0, hDecoder->object_type,
993
216k
        &(hDecoder->__r1), &(hDecoder->__r2));
994
995
#ifdef MAIN_DEC
996
    /* MAIN object type prediction */
997
    if (hDecoder->object_type == MAIN)
998
    {
999
    if (!hDecoder->pred_stat[sce->channel])
1000
      return 33;
1001
1002
        /* intra channel prediction */
1003
        ic_prediction(ics, spec_coef, hDecoder->pred_stat[sce->channel], hDecoder->frameLength,
1004
            hDecoder->sf_index);
1005
1006
        /* In addition, for scalefactor bands coded by perceptual
1007
           noise substitution the predictors belonging to the
1008
           corresponding spectral coefficients are reset.
1009
        */
1010
        pns_reset_pred_state(ics, hDecoder->pred_stat[sce->channel]);
1011
    }
1012
#endif
1013
1014
216k
#ifdef LTP_DEC
1015
216k
    if (is_ltp_ot(hDecoder->object_type))
1016
131k
    {
1017
131k
#ifdef LD_DEC
1018
131k
        if (hDecoder->object_type == LD)
1019
609
        {
1020
609
            if (ics->ltp.data_present)
1021
71
            {
1022
71
                if (ics->ltp.lag_update)
1023
26
                    hDecoder->ltp_lag[sce->channel] = ics->ltp.lag;
1024
71
            }
1025
609
            ics->ltp.lag = hDecoder->ltp_lag[sce->channel];
1026
609
        }
1027
131k
#endif
1028
1029
        /* long term prediction */
1030
131k
        lt_prediction(ics, &(ics->ltp), spec_coef, hDecoder->lt_pred_stat[sce->channel], hDecoder->fb,
1031
131k
            ics->window_shape, hDecoder->window_shape_prev[sce->channel],
1032
131k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1033
131k
    }
1034
216k
#endif
1035
1036
    /* tns decoding */
1037
216k
    tns_decode_frame(ics, &(ics->tns), hDecoder->sf_index, hDecoder->object_type,
1038
216k
        spec_coef, hDecoder->frameLength);
1039
1040
    /* drc decoding */
1041
216k
#ifdef APPLY_DRC
1042
216k
    if (hDecoder->drc->present)
1043
13.7k
    {
1044
13.7k
        if (!hDecoder->drc->exclude_mask[sce->channel] || !hDecoder->drc->excluded_chns_present)
1045
12.1k
            drc_decode(hDecoder->drc, spec_coef);
1046
13.7k
    }
1047
216k
#endif
1048
    /* filter bank */
1049
#ifdef SSR_DEC
1050
    if (hDecoder->object_type != SSR)
1051
    {
1052
#endif
1053
216k
        ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape,
1054
216k
            hDecoder->window_shape_prev[sce->channel], spec_coef,
1055
216k
            hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel],
1056
216k
            hDecoder->object_type, hDecoder->frameLength);
1057
#ifdef SSR_DEC
1058
    } else {
1059
        ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape,
1060
            hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel],
1061
            hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel],
1062
            hDecoder->frameLength);
1063
    }
1064
#endif
1065
1066
    /* save window shape for next frame */
1067
216k
    hDecoder->window_shape_prev[sce->channel] = ics->window_shape;
1068
1069
216k
#ifdef LTP_DEC
1070
216k
    if (is_ltp_ot(hDecoder->object_type))
1071
131k
    {
1072
131k
        lt_update_state(hDecoder->lt_pred_stat[sce->channel], hDecoder->time_out[sce->channel],
1073
131k
            hDecoder->fb_intermed[sce->channel], hDecoder->frameLength, hDecoder->object_type);
1074
131k
    }
1075
216k
#endif
1076
1077
216k
#ifdef SBR_DEC
1078
216k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1079
167k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1080
167k
    {
1081
167k
        int ele = hDecoder->fr_ch_ele;
1082
167k
        int ch = sce->channel;
1083
1084
        /* following case can happen when forceUpSampling == 1 */
1085
167k
        if (hDecoder->sbr[ele] == NULL)
1086
137k
        {
1087
137k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1088
137k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1089
137k
                hDecoder->downSampledSBR
1090
#ifdef DRM
1091
                , 0
1092
#endif
1093
137k
                );
1094
137k
        }
1095
167k
        if (!hDecoder->sbr[ele])
1096
59
            return 19;
1097
1098
167k
        if (sce->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1099
13.9k
            hDecoder->sbr[ele]->maxAACLine = 8*min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1100
153k
        else
1101
153k
            hDecoder->sbr[ele]->maxAACLine = min(sce->ics1.swb_offset[max(sce->ics1.max_sfb-1, 0)], sce->ics1.swb_offset_max);
1102
1103
        /* check if any of the PS tools is used */
1104
167k
#if (defined(PS_DEC) || defined(DRM_PS))
1105
167k
        if (hDecoder->ps_used[ele] == 0)
1106
161k
        {
1107
161k
#endif
1108
161k
            retval = sbrDecodeSingleFrame(hDecoder->sbr[ele], hDecoder->time_out[ch],
1109
161k
                hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1110
161k
#if (defined(PS_DEC) || defined(DRM_PS))
1111
161k
        } else {
1112
5.80k
            retval = sbrDecodeSingleFramePS(hDecoder->sbr[ele], hDecoder->time_out[ch],
1113
5.80k
                hDecoder->time_out[ch+1], hDecoder->postSeekResetFlag,
1114
5.80k
                hDecoder->downSampledSBR);
1115
5.80k
        }
1116
167k
#endif
1117
167k
        if (retval > 0)
1118
31
            return retval;
1119
167k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1120
6
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1121
6
    {
1122
6
        return 23;
1123
6
    }
1124
216k
#endif
1125
1126
    /* copy L to R when no PS is used */
1127
216k
#if (defined(PS_DEC) || defined(DRM_PS))
1128
216k
    if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) &&
1129
210k
        (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 2))
1130
0
    {
1131
0
        int ele = hDecoder->fr_ch_ele;
1132
0
        int ch = sce->channel;
1133
0
        int frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1;
1134
0
        frame_size *= hDecoder->frameLength*sizeof(real_t);
1135
1136
0
        memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size);
1137
0
    }
1138
216k
#endif
1139
1140
216k
    return 0;
1141
216k
}
1142
1143
uint8_t reconstruct_channel_pair(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_stream *ics2,
1144
                                 element *cpe, int16_t *spec_data1, int16_t *spec_data2)
1145
74.9k
{
1146
74.9k
    uint8_t retval;
1147
74.9k
    ALIGN real_t spec_coef1[1024];
1148
74.9k
    ALIGN real_t spec_coef2[1024];
1149
1150
#ifdef PROFILE
1151
    int64_t count = faad_get_ts();
1152
#endif
1153
74.9k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1154
63.1k
    {
1155
63.1k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1156
63.1k
        if (retval > 0)
1157
0
            return retval;
1158
1159
63.1k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1160
63.1k
    }
1161
1162
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1163
74.9k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1164
0
        return 15;
1165
74.9k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1166
0
        return 15;
1167
1168
    /* dequantisation and scaling */
1169
74.9k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1170
74.9k
    if (retval > 0)
1171
137
        return retval;
1172
74.8k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1173
74.8k
    if (retval > 0)
1174
11
        return retval;
1175
1176
#ifdef PROFILE
1177
    count = faad_get_ts() - count;
1178
    hDecoder->requant_cycles += count;
1179
#endif
1180
1181
    /* pns decoding */
1182
74.8k
    if (ics1->ms_mask_present)
1183
20.6k
    {
1184
20.6k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1185
20.6k
            &(hDecoder->__r1), &(hDecoder->__r2));
1186
54.1k
    } else {
1187
54.1k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1188
54.1k
            &(hDecoder->__r1), &(hDecoder->__r2));
1189
54.1k
    }
1190
1191
    /* mid/side decoding */
1192
74.8k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1193
1194
#if 0
1195
    {
1196
        int i;
1197
        for (i = 0; i < 1024; i++)
1198
        {
1199
            //printf("%d\n", spec_coef1[i]);
1200
            printf("0x%.8X\n", spec_coef1[i]);
1201
        }
1202
        for (i = 0; i < 1024; i++)
1203
        {
1204
            //printf("%d\n", spec_coef2[i]);
1205
            printf("0x%.8X\n", spec_coef2[i]);
1206
        }
1207
    }
1208
#endif
1209
1210
    /* intensity stereo decoding */
1211
74.8k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1212
1213
#if 0
1214
    {
1215
        int i;
1216
        for (i = 0; i < 1024; i++)
1217
        {
1218
            printf("%d\n", spec_coef1[i]);
1219
            //printf("0x%.8X\n", spec_coef1[i]);
1220
        }
1221
        for (i = 0; i < 1024; i++)
1222
        {
1223
            printf("%d\n", spec_coef2[i]);
1224
            //printf("0x%.8X\n", spec_coef2[i]);
1225
        }
1226
    }
1227
#endif
1228
1229
#ifdef MAIN_DEC
1230
    /* MAIN object type prediction */
1231
24.2k
    if (hDecoder->object_type == MAIN)
1232
11.8k
    {
1233
        /* intra channel prediction */
1234
11.8k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1235
11.8k
            hDecoder->sf_index);
1236
11.8k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1237
11.8k
            hDecoder->sf_index);
1238
1239
        /* In addition, for scalefactor bands coded by perceptual
1240
           noise substitution the predictors belonging to the
1241
           corresponding spectral coefficients are reset.
1242
        */
1243
11.8k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1244
11.8k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1245
11.8k
    }
1246
#endif
1247
1248
#ifdef LTP_DEC
1249
45.2k
    if (is_ltp_ot(hDecoder->object_type))
1250
18.1k
    {
1251
18.1k
        ltp_info *ltp1 = &(ics1->ltp);
1252
18.1k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1253
18.1k
#ifdef LD_DEC
1254
18.1k
        if (hDecoder->object_type == LD)
1255
1.86k
        {
1256
1.86k
            if (ltp1->data_present)
1257
232
            {
1258
232
                if (ltp1->lag_update)
1259
81
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1260
232
            }
1261
1.86k
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1262
1.86k
            if (ltp2->data_present)
1263
136
            {
1264
136
                if (ltp2->lag_update)
1265
58
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1266
136
            }
1267
1.86k
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1268
1.86k
        }
1269
18.1k
#endif
1270
1271
        /* long term prediction */
1272
18.1k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1273
18.1k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1274
18.1k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1275
18.1k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1276
18.1k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1277
18.1k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1278
18.1k
    }
1279
#endif
1280
1281
    /* tns decoding */
1282
74.8k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1283
74.8k
        spec_coef1, hDecoder->frameLength);
1284
74.8k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1285
74.8k
        spec_coef2, hDecoder->frameLength);
1286
1287
    /* drc decoding */
1288
74.8k
#if APPLY_DRC
1289
74.8k
    if (hDecoder->drc->present)
1290
1.76k
    {
1291
1.76k
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1292
1.51k
            drc_decode(hDecoder->drc, spec_coef1);
1293
1.76k
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1294
1.53k
            drc_decode(hDecoder->drc, spec_coef2);
1295
1.76k
    }
1296
74.8k
#endif
1297
    /* filter bank */
1298
#ifdef SSR_DEC
1299
    if (hDecoder->object_type != SSR)
1300
    {
1301
#endif
1302
74.8k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1303
74.8k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1304
74.8k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1305
74.8k
            hDecoder->object_type, hDecoder->frameLength);
1306
74.8k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1307
74.8k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1308
74.8k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1309
74.8k
            hDecoder->object_type, hDecoder->frameLength);
1310
#ifdef SSR_DEC
1311
    } else {
1312
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1313
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1314
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1315
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1316
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1317
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1318
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1319
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1320
    }
1321
#endif
1322
1323
    /* save window shape for next frame */
1324
74.8k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1325
74.8k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1326
1327
#ifdef LTP_DEC
1328
45.2k
    if (is_ltp_ot(hDecoder->object_type))
1329
18.1k
    {
1330
18.1k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1331
18.1k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1332
18.1k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1333
18.1k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1334
18.1k
    }
1335
#endif
1336
1337
74.8k
#ifdef SBR_DEC
1338
74.8k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1339
62.8k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1340
62.8k
    {
1341
62.8k
        int ele = hDecoder->fr_ch_ele;
1342
62.8k
        int ch0 = cpe->channel;
1343
62.8k
        int ch1 = cpe->paired_channel;
1344
1345
        /* following case can happen when forceUpSampling == 1 */
1346
62.8k
        if (hDecoder->sbr[ele] == NULL)
1347
20.2k
        {
1348
20.2k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1349
20.2k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1350
20.2k
                hDecoder->downSampledSBR
1351
#ifdef DRM
1352
                , 0
1353
#endif
1354
20.2k
                );
1355
20.2k
        }
1356
62.8k
        if (!hDecoder->sbr[ele])
1357
67
            return 19;
1358
1359
62.7k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1360
3.78k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1361
58.9k
        else
1362
58.9k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1363
1364
62.7k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1365
62.7k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1366
62.7k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1367
62.7k
        if (retval > 0)
1368
6
            return retval;
1369
62.7k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1370
3
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1371
3
    {
1372
3
        return 23;
1373
3
    }
1374
74.7k
#endif
1375
1376
74.7k
    return 0;
1377
74.8k
}
reconstruct_channel_pair
Line
Count
Source
1145
29.7k
{
1146
29.7k
    uint8_t retval;
1147
29.7k
    ALIGN real_t spec_coef1[1024];
1148
29.7k
    ALIGN real_t spec_coef2[1024];
1149
1150
#ifdef PROFILE
1151
    int64_t count = faad_get_ts();
1152
#endif
1153
29.7k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1154
25.1k
    {
1155
25.1k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1156
25.1k
        if (retval > 0)
1157
0
            return retval;
1158
1159
25.1k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1160
25.1k
    }
1161
1162
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1163
29.7k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1164
0
        return 15;
1165
29.7k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1166
0
        return 15;
1167
1168
    /* dequantisation and scaling */
1169
29.7k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1170
29.7k
    if (retval > 0)
1171
72
        return retval;
1172
29.6k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1173
29.6k
    if (retval > 0)
1174
5
        return retval;
1175
1176
#ifdef PROFILE
1177
    count = faad_get_ts() - count;
1178
    hDecoder->requant_cycles += count;
1179
#endif
1180
1181
    /* pns decoding */
1182
29.6k
    if (ics1->ms_mask_present)
1183
8.40k
    {
1184
8.40k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1185
8.40k
            &(hDecoder->__r1), &(hDecoder->__r2));
1186
21.2k
    } else {
1187
21.2k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1188
21.2k
            &(hDecoder->__r1), &(hDecoder->__r2));
1189
21.2k
    }
1190
1191
    /* mid/side decoding */
1192
29.6k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1193
1194
#if 0
1195
    {
1196
        int i;
1197
        for (i = 0; i < 1024; i++)
1198
        {
1199
            //printf("%d\n", spec_coef1[i]);
1200
            printf("0x%.8X\n", spec_coef1[i]);
1201
        }
1202
        for (i = 0; i < 1024; i++)
1203
        {
1204
            //printf("%d\n", spec_coef2[i]);
1205
            printf("0x%.8X\n", spec_coef2[i]);
1206
        }
1207
    }
1208
#endif
1209
1210
    /* intensity stereo decoding */
1211
29.6k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1212
1213
#if 0
1214
    {
1215
        int i;
1216
        for (i = 0; i < 1024; i++)
1217
        {
1218
            printf("%d\n", spec_coef1[i]);
1219
            //printf("0x%.8X\n", spec_coef1[i]);
1220
        }
1221
        for (i = 0; i < 1024; i++)
1222
        {
1223
            printf("%d\n", spec_coef2[i]);
1224
            //printf("0x%.8X\n", spec_coef2[i]);
1225
        }
1226
    }
1227
#endif
1228
1229
#ifdef MAIN_DEC
1230
    /* MAIN object type prediction */
1231
    if (hDecoder->object_type == MAIN)
1232
    {
1233
        /* intra channel prediction */
1234
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1235
            hDecoder->sf_index);
1236
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1237
            hDecoder->sf_index);
1238
1239
        /* In addition, for scalefactor bands coded by perceptual
1240
           noise substitution the predictors belonging to the
1241
           corresponding spectral coefficients are reset.
1242
        */
1243
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1244
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1245
    }
1246
#endif
1247
1248
#ifdef LTP_DEC
1249
    if (is_ltp_ot(hDecoder->object_type))
1250
    {
1251
        ltp_info *ltp1 = &(ics1->ltp);
1252
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1253
#ifdef LD_DEC
1254
        if (hDecoder->object_type == LD)
1255
        {
1256
            if (ltp1->data_present)
1257
            {
1258
                if (ltp1->lag_update)
1259
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1260
            }
1261
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1262
            if (ltp2->data_present)
1263
            {
1264
                if (ltp2->lag_update)
1265
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1266
            }
1267
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1268
        }
1269
#endif
1270
1271
        /* long term prediction */
1272
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1273
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1274
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1275
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1276
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1277
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1278
    }
1279
#endif
1280
1281
    /* tns decoding */
1282
29.6k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1283
29.6k
        spec_coef1, hDecoder->frameLength);
1284
29.6k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1285
29.6k
        spec_coef2, hDecoder->frameLength);
1286
1287
    /* drc decoding */
1288
29.6k
#if APPLY_DRC
1289
29.6k
    if (hDecoder->drc->present)
1290
0
    {
1291
0
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1292
0
            drc_decode(hDecoder->drc, spec_coef1);
1293
0
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1294
0
            drc_decode(hDecoder->drc, spec_coef2);
1295
0
    }
1296
29.6k
#endif
1297
    /* filter bank */
1298
#ifdef SSR_DEC
1299
    if (hDecoder->object_type != SSR)
1300
    {
1301
#endif
1302
29.6k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1303
29.6k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1304
29.6k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1305
29.6k
            hDecoder->object_type, hDecoder->frameLength);
1306
29.6k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1307
29.6k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1308
29.6k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1309
29.6k
            hDecoder->object_type, hDecoder->frameLength);
1310
#ifdef SSR_DEC
1311
    } else {
1312
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1313
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1314
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1315
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1316
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1317
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1318
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1319
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1320
    }
1321
#endif
1322
1323
    /* save window shape for next frame */
1324
29.6k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1325
29.6k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1326
1327
#ifdef LTP_DEC
1328
    if (is_ltp_ot(hDecoder->object_type))
1329
    {
1330
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1331
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1332
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1333
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1334
    }
1335
#endif
1336
1337
29.6k
#ifdef SBR_DEC
1338
29.6k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1339
26.3k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1340
26.3k
    {
1341
26.3k
        int ele = hDecoder->fr_ch_ele;
1342
26.3k
        int ch0 = cpe->channel;
1343
26.3k
        int ch1 = cpe->paired_channel;
1344
1345
        /* following case can happen when forceUpSampling == 1 */
1346
26.3k
        if (hDecoder->sbr[ele] == NULL)
1347
7.21k
        {
1348
7.21k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1349
7.21k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1350
7.21k
                hDecoder->downSampledSBR
1351
7.21k
#ifdef DRM
1352
7.21k
                , 0
1353
7.21k
#endif
1354
7.21k
                );
1355
7.21k
        }
1356
26.3k
        if (!hDecoder->sbr[ele])
1357
0
            return 19;
1358
1359
26.3k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1360
1.57k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1361
24.8k
        else
1362
24.8k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1363
1364
26.3k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1365
26.3k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1366
26.3k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1367
26.3k
        if (retval > 0)
1368
6
            return retval;
1369
26.3k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1370
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1371
1
    {
1372
1
        return 23;
1373
1
    }
1374
29.6k
#endif
1375
1376
29.6k
    return 0;
1377
29.6k
}
reconstruct_channel_pair
Line
Count
Source
1145
24.3k
{
1146
24.3k
    uint8_t retval;
1147
24.3k
    ALIGN real_t spec_coef1[1024];
1148
24.3k
    ALIGN real_t spec_coef2[1024];
1149
1150
#ifdef PROFILE
1151
    int64_t count = faad_get_ts();
1152
#endif
1153
24.3k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1154
20.3k
    {
1155
20.3k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1156
20.3k
        if (retval > 0)
1157
0
            return retval;
1158
1159
20.3k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1160
20.3k
    }
1161
1162
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1163
24.3k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1164
0
        return 15;
1165
24.3k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1166
0
        return 15;
1167
1168
    /* dequantisation and scaling */
1169
24.3k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1170
24.3k
    if (retval > 0)
1171
51
        return retval;
1172
24.2k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1173
24.2k
    if (retval > 0)
1174
3
        return retval;
1175
1176
#ifdef PROFILE
1177
    count = faad_get_ts() - count;
1178
    hDecoder->requant_cycles += count;
1179
#endif
1180
1181
    /* pns decoding */
1182
24.2k
    if (ics1->ms_mask_present)
1183
7.07k
    {
1184
7.07k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1185
7.07k
            &(hDecoder->__r1), &(hDecoder->__r2));
1186
17.1k
    } else {
1187
17.1k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1188
17.1k
            &(hDecoder->__r1), &(hDecoder->__r2));
1189
17.1k
    }
1190
1191
    /* mid/side decoding */
1192
24.2k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1193
1194
#if 0
1195
    {
1196
        int i;
1197
        for (i = 0; i < 1024; i++)
1198
        {
1199
            //printf("%d\n", spec_coef1[i]);
1200
            printf("0x%.8X\n", spec_coef1[i]);
1201
        }
1202
        for (i = 0; i < 1024; i++)
1203
        {
1204
            //printf("%d\n", spec_coef2[i]);
1205
            printf("0x%.8X\n", spec_coef2[i]);
1206
        }
1207
    }
1208
#endif
1209
1210
    /* intensity stereo decoding */
1211
24.2k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1212
1213
#if 0
1214
    {
1215
        int i;
1216
        for (i = 0; i < 1024; i++)
1217
        {
1218
            printf("%d\n", spec_coef1[i]);
1219
            //printf("0x%.8X\n", spec_coef1[i]);
1220
        }
1221
        for (i = 0; i < 1024; i++)
1222
        {
1223
            printf("%d\n", spec_coef2[i]);
1224
            //printf("0x%.8X\n", spec_coef2[i]);
1225
        }
1226
    }
1227
#endif
1228
1229
24.2k
#ifdef MAIN_DEC
1230
    /* MAIN object type prediction */
1231
24.2k
    if (hDecoder->object_type == MAIN)
1232
11.8k
    {
1233
        /* intra channel prediction */
1234
11.8k
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1235
11.8k
            hDecoder->sf_index);
1236
11.8k
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1237
11.8k
            hDecoder->sf_index);
1238
1239
        /* In addition, for scalefactor bands coded by perceptual
1240
           noise substitution the predictors belonging to the
1241
           corresponding spectral coefficients are reset.
1242
        */
1243
11.8k
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1244
11.8k
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1245
11.8k
    }
1246
24.2k
#endif
1247
1248
24.2k
#ifdef LTP_DEC
1249
24.2k
    if (is_ltp_ot(hDecoder->object_type))
1250
9.35k
    {
1251
9.35k
        ltp_info *ltp1 = &(ics1->ltp);
1252
9.35k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1253
9.35k
#ifdef LD_DEC
1254
9.35k
        if (hDecoder->object_type == LD)
1255
912
        {
1256
912
            if (ltp1->data_present)
1257
146
            {
1258
146
                if (ltp1->lag_update)
1259
54
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1260
146
            }
1261
912
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1262
912
            if (ltp2->data_present)
1263
72
            {
1264
72
                if (ltp2->lag_update)
1265
23
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1266
72
            }
1267
912
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1268
912
        }
1269
9.35k
#endif
1270
1271
        /* long term prediction */
1272
9.35k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1273
9.35k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1274
9.35k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1275
9.35k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1276
9.35k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1277
9.35k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1278
9.35k
    }
1279
24.2k
#endif
1280
1281
    /* tns decoding */
1282
24.2k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1283
24.2k
        spec_coef1, hDecoder->frameLength);
1284
24.2k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1285
24.2k
        spec_coef2, hDecoder->frameLength);
1286
1287
    /* drc decoding */
1288
24.2k
#if APPLY_DRC
1289
24.2k
    if (hDecoder->drc->present)
1290
855
    {
1291
855
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1292
718
            drc_decode(hDecoder->drc, spec_coef1);
1293
855
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1294
727
            drc_decode(hDecoder->drc, spec_coef2);
1295
855
    }
1296
24.2k
#endif
1297
    /* filter bank */
1298
#ifdef SSR_DEC
1299
    if (hDecoder->object_type != SSR)
1300
    {
1301
#endif
1302
24.2k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1303
24.2k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1304
24.2k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1305
24.2k
            hDecoder->object_type, hDecoder->frameLength);
1306
24.2k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1307
24.2k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1308
24.2k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1309
24.2k
            hDecoder->object_type, hDecoder->frameLength);
1310
#ifdef SSR_DEC
1311
    } else {
1312
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1313
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1314
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1315
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1316
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1317
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1318
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1319
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1320
    }
1321
#endif
1322
1323
    /* save window shape for next frame */
1324
24.2k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1325
24.2k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1326
1327
24.2k
#ifdef LTP_DEC
1328
24.2k
    if (is_ltp_ot(hDecoder->object_type))
1329
9.35k
    {
1330
9.35k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1331
9.35k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1332
9.35k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1333
9.35k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1334
9.35k
    }
1335
24.2k
#endif
1336
1337
24.2k
#ifdef SBR_DEC
1338
24.2k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1339
18.6k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1340
18.6k
    {
1341
18.6k
        int ele = hDecoder->fr_ch_ele;
1342
18.6k
        int ch0 = cpe->channel;
1343
18.6k
        int ch1 = cpe->paired_channel;
1344
1345
        /* following case can happen when forceUpSampling == 1 */
1346
18.6k
        if (hDecoder->sbr[ele] == NULL)
1347
6.74k
        {
1348
6.74k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1349
6.74k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1350
6.74k
                hDecoder->downSampledSBR
1351
#ifdef DRM
1352
                , 0
1353
#endif
1354
6.74k
                );
1355
6.74k
        }
1356
18.6k
        if (!hDecoder->sbr[ele])
1357
40
            return 19;
1358
1359
18.5k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1360
1.40k
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1361
17.1k
        else
1362
17.1k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1363
1364
18.5k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1365
18.5k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1366
18.5k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1367
18.5k
        if (retval > 0)
1368
0
            return retval;
1369
18.5k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1370
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1371
1
    {
1372
1
        return 23;
1373
1
    }
1374
24.2k
#endif
1375
1376
24.2k
    return 0;
1377
24.2k
}
reconstruct_channel_pair
Line
Count
Source
1145
20.9k
{
1146
20.9k
    uint8_t retval;
1147
20.9k
    ALIGN real_t spec_coef1[1024];
1148
20.9k
    ALIGN real_t spec_coef2[1024];
1149
1150
#ifdef PROFILE
1151
    int64_t count = faad_get_ts();
1152
#endif
1153
20.9k
    if (hDecoder->element_alloced[hDecoder->fr_ch_ele] != 2)
1154
17.5k
    {
1155
17.5k
        retval = allocate_channel_pair(hDecoder, cpe->channel, (uint8_t)cpe->paired_channel);
1156
17.5k
        if (retval > 0)
1157
0
            return retval;
1158
1159
17.5k
        hDecoder->element_alloced[hDecoder->fr_ch_ele] = 2;
1160
17.5k
    }
1161
1162
    /* sanity check, CVE-2018-20199, CVE-2018-20360 */
1163
20.9k
    if(!hDecoder->time_out[cpe->channel] || !hDecoder->time_out[cpe->paired_channel])
1164
0
        return 15;
1165
20.9k
    if(!hDecoder->fb_intermed[cpe->channel] || !hDecoder->fb_intermed[cpe->paired_channel])
1166
0
        return 15;
1167
1168
    /* dequantisation and scaling */
1169
20.9k
    retval = quant_to_spec(hDecoder, ics1, spec_data1, spec_coef1, hDecoder->frameLength);
1170
20.9k
    if (retval > 0)
1171
14
        return retval;
1172
20.9k
    retval = quant_to_spec(hDecoder, ics2, spec_data2, spec_coef2, hDecoder->frameLength);
1173
20.9k
    if (retval > 0)
1174
3
        return retval;
1175
1176
#ifdef PROFILE
1177
    count = faad_get_ts() - count;
1178
    hDecoder->requant_cycles += count;
1179
#endif
1180
1181
    /* pns decoding */
1182
20.9k
    if (ics1->ms_mask_present)
1183
5.19k
    {
1184
5.19k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 1, hDecoder->object_type,
1185
5.19k
            &(hDecoder->__r1), &(hDecoder->__r2));
1186
15.7k
    } else {
1187
15.7k
        pns_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength, 0, hDecoder->object_type,
1188
15.7k
            &(hDecoder->__r1), &(hDecoder->__r2));
1189
15.7k
    }
1190
1191
    /* mid/side decoding */
1192
20.9k
    ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1193
1194
#if 0
1195
    {
1196
        int i;
1197
        for (i = 0; i < 1024; i++)
1198
        {
1199
            //printf("%d\n", spec_coef1[i]);
1200
            printf("0x%.8X\n", spec_coef1[i]);
1201
        }
1202
        for (i = 0; i < 1024; i++)
1203
        {
1204
            //printf("%d\n", spec_coef2[i]);
1205
            printf("0x%.8X\n", spec_coef2[i]);
1206
        }
1207
    }
1208
#endif
1209
1210
    /* intensity stereo decoding */
1211
20.9k
    is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength);
1212
1213
#if 0
1214
    {
1215
        int i;
1216
        for (i = 0; i < 1024; i++)
1217
        {
1218
            printf("%d\n", spec_coef1[i]);
1219
            //printf("0x%.8X\n", spec_coef1[i]);
1220
        }
1221
        for (i = 0; i < 1024; i++)
1222
        {
1223
            printf("%d\n", spec_coef2[i]);
1224
            //printf("0x%.8X\n", spec_coef2[i]);
1225
        }
1226
    }
1227
#endif
1228
1229
#ifdef MAIN_DEC
1230
    /* MAIN object type prediction */
1231
    if (hDecoder->object_type == MAIN)
1232
    {
1233
        /* intra channel prediction */
1234
        ic_prediction(ics1, spec_coef1, hDecoder->pred_stat[cpe->channel], hDecoder->frameLength,
1235
            hDecoder->sf_index);
1236
        ic_prediction(ics2, spec_coef2, hDecoder->pred_stat[cpe->paired_channel], hDecoder->frameLength,
1237
            hDecoder->sf_index);
1238
1239
        /* In addition, for scalefactor bands coded by perceptual
1240
           noise substitution the predictors belonging to the
1241
           corresponding spectral coefficients are reset.
1242
        */
1243
        pns_reset_pred_state(ics1, hDecoder->pred_stat[cpe->channel]);
1244
        pns_reset_pred_state(ics2, hDecoder->pred_stat[cpe->paired_channel]);
1245
    }
1246
#endif
1247
1248
20.9k
#ifdef LTP_DEC
1249
20.9k
    if (is_ltp_ot(hDecoder->object_type))
1250
8.79k
    {
1251
8.79k
        ltp_info *ltp1 = &(ics1->ltp);
1252
8.79k
        ltp_info *ltp2 = (cpe->common_window) ? &(ics2->ltp2) : &(ics2->ltp);
1253
8.79k
#ifdef LD_DEC
1254
8.79k
        if (hDecoder->object_type == LD)
1255
957
        {
1256
957
            if (ltp1->data_present)
1257
86
            {
1258
86
                if (ltp1->lag_update)
1259
27
                    hDecoder->ltp_lag[cpe->channel] = ltp1->lag;
1260
86
            }
1261
957
            ltp1->lag = hDecoder->ltp_lag[cpe->channel];
1262
957
            if (ltp2->data_present)
1263
64
            {
1264
64
                if (ltp2->lag_update)
1265
35
                    hDecoder->ltp_lag[cpe->paired_channel] = ltp2->lag;
1266
64
            }
1267
957
            ltp2->lag = hDecoder->ltp_lag[cpe->paired_channel];
1268
957
        }
1269
8.79k
#endif
1270
1271
        /* long term prediction */
1272
8.79k
        lt_prediction(ics1, ltp1, spec_coef1, hDecoder->lt_pred_stat[cpe->channel], hDecoder->fb,
1273
8.79k
            ics1->window_shape, hDecoder->window_shape_prev[cpe->channel],
1274
8.79k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1275
8.79k
        lt_prediction(ics2, ltp2, spec_coef2, hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->fb,
1276
8.79k
            ics2->window_shape, hDecoder->window_shape_prev[cpe->paired_channel],
1277
8.79k
            hDecoder->sf_index, hDecoder->object_type, hDecoder->frameLength);
1278
8.79k
    }
1279
20.9k
#endif
1280
1281
    /* tns decoding */
1282
20.9k
    tns_decode_frame(ics1, &(ics1->tns), hDecoder->sf_index, hDecoder->object_type,
1283
20.9k
        spec_coef1, hDecoder->frameLength);
1284
20.9k
    tns_decode_frame(ics2, &(ics2->tns), hDecoder->sf_index, hDecoder->object_type,
1285
20.9k
        spec_coef2, hDecoder->frameLength);
1286
1287
    /* drc decoding */
1288
20.9k
#if APPLY_DRC
1289
20.9k
    if (hDecoder->drc->present)
1290
907
    {
1291
907
        if (!hDecoder->drc->exclude_mask[cpe->channel] || !hDecoder->drc->excluded_chns_present)
1292
797
            drc_decode(hDecoder->drc, spec_coef1);
1293
907
        if (!hDecoder->drc->exclude_mask[cpe->paired_channel] || !hDecoder->drc->excluded_chns_present)
1294
810
            drc_decode(hDecoder->drc, spec_coef2);
1295
907
    }
1296
20.9k
#endif
1297
    /* filter bank */
1298
#ifdef SSR_DEC
1299
    if (hDecoder->object_type != SSR)
1300
    {
1301
#endif
1302
20.9k
        ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1303
20.9k
            hDecoder->window_shape_prev[cpe->channel], spec_coef1,
1304
20.9k
            hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel],
1305
20.9k
            hDecoder->object_type, hDecoder->frameLength);
1306
20.9k
        ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1307
20.9k
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2,
1308
20.9k
            hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel],
1309
20.9k
            hDecoder->object_type, hDecoder->frameLength);
1310
#ifdef SSR_DEC
1311
    } else {
1312
        ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape,
1313
            hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel],
1314
            hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel],
1315
            hDecoder->prev_fmd[cpe->channel], hDecoder->frameLength);
1316
        ssr_decode(&(ics2->ssr), hDecoder->fb, ics2->window_sequence, ics2->window_shape,
1317
            hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, hDecoder->time_out[cpe->paired_channel],
1318
            hDecoder->ssr_overlap[cpe->paired_channel], hDecoder->ipqf_buffer[cpe->paired_channel],
1319
            hDecoder->prev_fmd[cpe->paired_channel], hDecoder->frameLength);
1320
    }
1321
#endif
1322
1323
    /* save window shape for next frame */
1324
20.9k
    hDecoder->window_shape_prev[cpe->channel] = ics1->window_shape;
1325
20.9k
    hDecoder->window_shape_prev[cpe->paired_channel] = ics2->window_shape;
1326
1327
20.9k
#ifdef LTP_DEC
1328
20.9k
    if (is_ltp_ot(hDecoder->object_type))
1329
8.79k
    {
1330
8.79k
        lt_update_state(hDecoder->lt_pred_stat[cpe->channel], hDecoder->time_out[cpe->channel],
1331
8.79k
            hDecoder->fb_intermed[cpe->channel], hDecoder->frameLength, hDecoder->object_type);
1332
8.79k
        lt_update_state(hDecoder->lt_pred_stat[cpe->paired_channel], hDecoder->time_out[cpe->paired_channel],
1333
8.79k
            hDecoder->fb_intermed[cpe->paired_channel], hDecoder->frameLength, hDecoder->object_type);
1334
8.79k
    }
1335
20.9k
#endif
1336
1337
20.9k
#ifdef SBR_DEC
1338
20.9k
    if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1339
17.8k
        && hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1340
17.8k
    {
1341
17.8k
        int ele = hDecoder->fr_ch_ele;
1342
17.8k
        int ch0 = cpe->channel;
1343
17.8k
        int ch1 = cpe->paired_channel;
1344
1345
        /* following case can happen when forceUpSampling == 1 */
1346
17.8k
        if (hDecoder->sbr[ele] == NULL)
1347
6.28k
        {
1348
6.28k
            hDecoder->sbr[ele] = sbrDecodeInit(hDecoder->frameLength,
1349
6.28k
                hDecoder->element_id[ele], 2*get_sample_rate(hDecoder->sf_index),
1350
6.28k
                hDecoder->downSampledSBR
1351
#ifdef DRM
1352
                , 0
1353
#endif
1354
6.28k
                );
1355
6.28k
        }
1356
17.8k
        if (!hDecoder->sbr[ele])
1357
27
            return 19;
1358
1359
17.8k
        if (cpe->ics1.window_sequence == EIGHT_SHORT_SEQUENCE)
1360
801
            hDecoder->sbr[ele]->maxAACLine = 8*min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1361
17.0k
        else
1362
17.0k
            hDecoder->sbr[ele]->maxAACLine = min(cpe->ics1.swb_offset[max(cpe->ics1.max_sfb-1, 0)], cpe->ics1.swb_offset_max);
1363
1364
17.8k
        retval = sbrDecodeCoupleFrame(hDecoder->sbr[ele],
1365
17.8k
            hDecoder->time_out[ch0], hDecoder->time_out[ch1],
1366
17.8k
            hDecoder->postSeekResetFlag, hDecoder->downSampledSBR);
1367
17.8k
        if (retval > 0)
1368
0
            return retval;
1369
17.8k
    } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1))
1370
1
        && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele])
1371
1
    {
1372
1
        return 23;
1373
1
    }
1374
20.9k
#endif
1375
1376
20.9k
    return 0;
1377
20.9k
}