Coverage Report

Created: 2025-10-10 06:50

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