Coverage Report

Created: 2026-10-17 06:34

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