2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
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.
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.
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.
19 ** Any non-GPL usage of this software or parts of this software is strictly
22 ** Initially modified for use with MPlayer on 2006/04/18
23 ** $Id: specrec.c,v 1.56 2004/09/08 09:43:11 gcp Exp $
24 ** detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/
25 ** local_changes.diff contains the exact changes to this file.
29 Spectral reconstruction:
31 - inverse quantization
32 - applying scalefactors
49 #include "lt_predict.h"
50 #include "ic_predict.h"
57 /* static function declarations */
58 static uint8_t quant_to_spec(NeAACDecHandle hDecoder
,
59 ic_stream
*ics
, int16_t *quant_data
,
60 real_t
*spec_data
, uint16_t frame_len
);
64 ALIGN
static const uint8_t num_swb_512_window
[] =
66 0, 0, 0, 36, 36, 37, 31, 31, 0, 0, 0, 0
68 ALIGN
static const uint8_t num_swb_480_window
[] =
70 0, 0, 0, 35, 35, 37, 30, 30, 0, 0, 0, 0
74 ALIGN
static const uint8_t num_swb_960_window
[] =
76 40, 40, 45, 49, 49, 49, 46, 46, 42, 42, 42, 40
79 ALIGN
static const uint8_t num_swb_1024_window
[] =
81 41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40
84 ALIGN
static const uint8_t num_swb_128_window
[] =
86 12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15
89 ALIGN
static const uint16_t swb_offset_1024_96
[] =
91 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56,
92 64, 72, 80, 88, 96, 108, 120, 132, 144, 156, 172, 188, 212, 240,
93 276, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024
96 ALIGN
static const uint16_t swb_offset_128_96
[] =
98 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
101 ALIGN
static const uint16_t swb_offset_1024_64
[] =
103 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56,
104 64, 72, 80, 88, 100, 112, 124, 140, 156, 172, 192, 216, 240, 268,
105 304, 344, 384, 424, 464, 504, 544, 584, 624, 664, 704, 744, 784, 824,
106 864, 904, 944, 984, 1024
109 ALIGN
static const uint16_t swb_offset_128_64
[] =
111 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
114 ALIGN
static const uint16_t swb_offset_1024_48
[] =
116 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72,
117 80, 88, 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292,
118 320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736,
119 768, 800, 832, 864, 896, 928, 1024
123 ALIGN
static const uint16_t swb_offset_512_48
[] =
125 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 68, 76, 84,
126 92, 100, 112, 124, 136, 148, 164, 184, 208, 236, 268, 300, 332, 364, 396,
130 ALIGN
static const uint16_t swb_offset_480_48
[] =
132 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72 ,80 ,88,
133 96, 108, 120, 132, 144, 156, 172, 188, 212, 240, 272, 304, 336, 368, 400,
138 ALIGN
static const uint16_t swb_offset_128_48
[] =
140 0, 4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 128
143 ALIGN
static const uint16_t swb_offset_1024_32
[] =
145 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72,
146 80, 88, 96, 108, 120, 132, 144, 160, 176, 196, 216, 240, 264, 292,
147 320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736,
148 768, 800, 832, 864, 896, 928, 960, 992, 1024
152 ALIGN
static const uint16_t swb_offset_512_32
[] =
154 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72, 80,
155 88, 96, 108, 120, 132, 144, 160, 176, 192, 212, 236, 260, 288, 320, 352,
156 384, 416, 448, 480, 512
159 ALIGN
static const uint16_t swb_offset_480_32
[] =
161 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80,
162 88, 96, 104, 112, 124, 136, 148, 164, 180, 200, 224, 256, 288, 320, 352,
167 ALIGN
static const uint16_t swb_offset_1024_24
[] =
169 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68,
170 76, 84, 92, 100, 108, 116, 124, 136, 148, 160, 172, 188, 204, 220,
171 240, 260, 284, 308, 336, 364, 396, 432, 468, 508, 552, 600, 652, 704,
172 768, 832, 896, 960, 1024
176 ALIGN
static const uint16_t swb_offset_512_24
[] =
178 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68,
179 80, 92, 104, 120, 140, 164, 192, 224, 256, 288, 320, 352, 384, 416,
183 ALIGN
static const uint16_t swb_offset_480_24
[] =
185 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68, 80, 92, 104, 120,
186 140, 164, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480
190 ALIGN
static const uint16_t swb_offset_128_24
[] =
192 0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 128
195 ALIGN
static const uint16_t swb_offset_1024_16
[] =
197 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 100, 112, 124,
198 136, 148, 160, 172, 184, 196, 212, 228, 244, 260, 280, 300, 320, 344,
199 368, 396, 424, 456, 492, 532, 572, 616, 664, 716, 772, 832, 896, 960, 1024
202 ALIGN
static const uint16_t swb_offset_128_16
[] =
204 0, 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 128
207 ALIGN
static const uint16_t swb_offset_1024_8
[] =
209 0, 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 172,
210 188, 204, 220, 236, 252, 268, 288, 308, 328, 348, 372, 396, 420, 448,
211 476, 508, 544, 580, 620, 664, 712, 764, 820, 880, 944, 1024
214 ALIGN
static const uint16_t swb_offset_128_8
[] =
216 0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 128
219 ALIGN
static const uint16_t *swb_offset_1024_window
[] =
221 swb_offset_1024_96
, /* 96000 */
222 swb_offset_1024_96
, /* 88200 */
223 swb_offset_1024_64
, /* 64000 */
224 swb_offset_1024_48
, /* 48000 */
225 swb_offset_1024_48
, /* 44100 */
226 swb_offset_1024_32
, /* 32000 */
227 swb_offset_1024_24
, /* 24000 */
228 swb_offset_1024_24
, /* 22050 */
229 swb_offset_1024_16
, /* 16000 */
230 swb_offset_1024_16
, /* 12000 */
231 swb_offset_1024_16
, /* 11025 */
232 swb_offset_1024_8
/* 8000 */
236 ALIGN
static const uint16_t *swb_offset_512_window
[] =
241 swb_offset_512_48
, /* 48000 */
242 swb_offset_512_48
, /* 44100 */
243 swb_offset_512_32
, /* 32000 */
244 swb_offset_512_24
, /* 24000 */
245 swb_offset_512_24
, /* 22050 */
252 ALIGN
static const uint16_t *swb_offset_480_window
[] =
257 swb_offset_480_48
, /* 48000 */
258 swb_offset_480_48
, /* 44100 */
259 swb_offset_480_32
, /* 32000 */
260 swb_offset_480_24
, /* 24000 */
261 swb_offset_480_24
, /* 22050 */
269 ALIGN
static const uint16_t *swb_offset_128_window
[] =
271 swb_offset_128_96
, /* 96000 */
272 swb_offset_128_96
, /* 88200 */
273 swb_offset_128_64
, /* 64000 */
274 swb_offset_128_48
, /* 48000 */
275 swb_offset_128_48
, /* 44100 */
276 swb_offset_128_48
, /* 32000 */
277 swb_offset_128_24
, /* 24000 */
278 swb_offset_128_24
, /* 22050 */
279 swb_offset_128_16
, /* 16000 */
280 swb_offset_128_16
, /* 12000 */
281 swb_offset_128_16
, /* 11025 */
282 swb_offset_128_8
/* 8000 */
285 #define bit_set(A, B) ((A) & (1<<(B)))
289 - determine the number of windows in a window_sequence named num_windows
290 - determine the number of window_groups named num_window_groups
291 - determine the number of windows in each group named window_group_length[g]
292 - determine the total number of scalefactor window bands named num_swb for
293 the actual window type
294 - determine swb_offset[swb], the offset of the first coefficient in
295 scalefactor window band named swb of the window actually used
296 - determine sect_sfb_offset[g][section],the offset of the first coefficient
297 in section named section. This offset depends on window_sequence and
298 scale_factor_grouping and is needed to decode the spectral_data().
300 uint8_t window_grouping_info(NeAACDecHandle hDecoder
, ic_stream
*ics
)
304 uint8_t sf_index
= hDecoder
->sf_index
;
306 switch (ics
->window_sequence
) {
307 case ONLY_LONG_SEQUENCE
:
308 case LONG_START_SEQUENCE
:
309 case LONG_STOP_SEQUENCE
:
310 ics
->num_windows
= 1;
311 ics
->num_window_groups
= 1;
312 ics
->window_group_length
[ics
->num_window_groups
-1] = 1;
314 if (hDecoder
->object_type
== LD
)
316 if (hDecoder
->frameLength
== 512)
317 ics
->num_swb
= num_swb_512_window
[sf_index
];
318 else /* if (hDecoder->frameLength == 480) */
319 ics
->num_swb
= num_swb_480_window
[sf_index
];
322 if (hDecoder
->frameLength
== 1024)
323 ics
->num_swb
= num_swb_1024_window
[sf_index
];
324 else /* if (hDecoder->frameLength == 960) */
325 ics
->num_swb
= num_swb_960_window
[sf_index
];
330 /* preparation of sect_sfb_offset for long blocks */
331 /* also copy the last value! */
333 if (hDecoder
->object_type
== LD
)
335 if (hDecoder
->frameLength
== 512)
337 for (i
= 0; i
< ics
->num_swb
; i
++)
339 ics
->sect_sfb_offset
[0][i
] = swb_offset_512_window
[sf_index
][i
];
340 ics
->swb_offset
[i
] = swb_offset_512_window
[sf_index
][i
];
342 } else /* if (hDecoder->frameLength == 480) */ {
343 for (i
= 0; i
< ics
->num_swb
; i
++)
345 ics
->sect_sfb_offset
[0][i
] = swb_offset_480_window
[sf_index
][i
];
346 ics
->swb_offset
[i
] = swb_offset_480_window
[sf_index
][i
];
349 ics
->sect_sfb_offset
[0][ics
->num_swb
] = hDecoder
->frameLength
;
350 ics
->swb_offset
[ics
->num_swb
] = hDecoder
->frameLength
;
353 for (i
= 0; i
< ics
->num_swb
; i
++)
355 ics
->sect_sfb_offset
[0][i
] = swb_offset_1024_window
[sf_index
][i
];
356 ics
->swb_offset
[i
] = swb_offset_1024_window
[sf_index
][i
];
358 ics
->sect_sfb_offset
[0][ics
->num_swb
] = hDecoder
->frameLength
;
359 ics
->swb_offset
[ics
->num_swb
] = hDecoder
->frameLength
;
364 case EIGHT_SHORT_SEQUENCE
:
365 ics
->num_windows
= 8;
366 ics
->num_window_groups
= 1;
367 ics
->window_group_length
[ics
->num_window_groups
-1] = 1;
368 ics
->num_swb
= num_swb_128_window
[sf_index
];
370 for (i
= 0; i
< ics
->num_swb
; i
++)
371 ics
->swb_offset
[i
] = swb_offset_128_window
[sf_index
][i
];
372 ics
->swb_offset
[ics
->num_swb
] = hDecoder
->frameLength
/8;
374 for (i
= 0; i
< ics
->num_windows
-1; i
++) {
375 if (bit_set(ics
->scale_factor_grouping
, 6-i
) == 0)
377 ics
->num_window_groups
+= 1;
378 ics
->window_group_length
[ics
->num_window_groups
-1] = 1;
380 ics
->window_group_length
[ics
->num_window_groups
-1] += 1;
384 /* preparation of sect_sfb_offset for short blocks */
385 for (g
= 0; g
< ics
->num_window_groups
; g
++)
388 uint8_t sect_sfb
= 0;
391 for (i
= 0; i
< ics
->num_swb
; i
++)
393 if (i
+1 == ics
->num_swb
)
395 width
= (hDecoder
->frameLength
/8) - swb_offset_128_window
[sf_index
][i
];
397 width
= swb_offset_128_window
[sf_index
][i
+1] -
398 swb_offset_128_window
[sf_index
][i
];
400 width
*= ics
->window_group_length
[g
];
401 ics
->sect_sfb_offset
[g
][sect_sfb
++] = offset
;
404 ics
->sect_sfb_offset
[g
][sect_sfb
] = offset
;
413 /* output = sign(input)*abs(input)^(4/3) */
415 static INLINE real_t
iquant(int16_t q
, const real_t
*tab
, uint8_t *error
)
418 /* For FIXED_POINT the iq_table is prescaled by 3 bits (iq_table[]/8) */
419 /* BIG_IQ_TABLE allows you to use the full 8192 value table, if this is not
420 * defined a 1026 value table and interpolation will be used
423 static const real_t errcorr
[] = {
424 REAL_CONST(0), REAL_CONST(1.0/8.0), REAL_CONST(2.0/8.0), REAL_CONST(3.0/8.0),
425 REAL_CONST(4.0/8.0), REAL_CONST(5.0/8.0), REAL_CONST(6.0/8.0), REAL_CONST(7.0/8.0),
438 if (q
< IQ_TABLE_SIZE
)
440 //#define IQUANT_PRINT
442 //printf("0x%.8X\n", sgn * tab[q]);
443 printf("%d\n", sgn
* tab
[q
]);
455 /* linear interpolation */
457 x2
= tab
[(q
>>3) + 1];
458 return sgn
* 16 * (MUL_R(errcorr
[q
&7],(x2
-x1
)) + x1
);
467 /* tab contains a value for all possible q [0,8192] */
468 if (-q
< IQ_TABLE_SIZE
)
474 /* tab contains a value for all possible q [0,8192] */
475 if (q
< IQ_TABLE_SIZE
)
485 ALIGN
static const real_t pow2sf_tab
[] = {
486 2.9802322387695313E-008, 5.9604644775390625E-008, 1.1920928955078125E-007,
487 2.384185791015625E-007, 4.76837158203125E-007, 9.5367431640625E-007,
488 1.9073486328125E-006, 3.814697265625E-006, 7.62939453125E-006,
489 1.52587890625E-005, 3.0517578125E-005, 6.103515625E-005,
490 0.0001220703125, 0.000244140625, 0.00048828125,
491 0.0009765625, 0.001953125, 0.00390625,
492 0.0078125, 0.015625, 0.03125,
495 4.0, 8.0, 16.0, 32.0,
497 512.0, 1024.0, 2048.0,
498 4096.0, 8192.0, 16384.0,
499 32768.0, 65536.0, 131072.0,
500 262144.0, 524288.0, 1048576.0,
501 2097152.0, 4194304.0, 8388608.0,
502 16777216.0, 33554432.0, 67108864.0,
503 134217728.0, 268435456.0, 536870912.0,
504 1073741824.0, 2147483648.0, 4294967296.0,
505 8589934592.0, 17179869184.0, 34359738368.0,
506 68719476736.0, 137438953472.0, 274877906944.0
510 /* quant_to_spec: perform dequantisation and scaling
511 * and in case of short block it also does the deinterleaving
514 For ONLY_LONG_SEQUENCE windows (num_window_groups = 1,
515 window_group_length[0] = 1) the spectral data is in ascending spectral
517 For the EIGHT_SHORT_SEQUENCE window, the spectral order depends on the
518 grouping in the following manner:
519 - Groups are ordered sequentially
520 - Within a group, a scalefactor band consists of the spectral data of all
521 grouped SHORT_WINDOWs for the associated scalefactor window band. To
522 clarify via example, the length of a group is in the range of one to eight
524 - If there are eight groups each with length one (num_window_groups = 8,
525 window_group_length[0..7] = 1), the result is a sequence of eight spectra,
526 each in ascending spectral order.
527 - If there is only one group with length eight (num_window_groups = 1,
528 window_group_length[0] = 8), the result is that spectral data of all eight
529 SHORT_WINDOWs is interleaved by scalefactor window bands.
530 - Within a scalefactor window band, the coefficients are in ascending
533 static uint8_t quant_to_spec(NeAACDecHandle hDecoder
,
534 ic_stream
*ics
, int16_t *quant_data
,
535 real_t
*spec_data
, uint16_t frame_len
)
537 ALIGN
static const real_t pow2_table
[] =
540 COEF_CONST(1.1892071150027210667174999705605), /* 2^0.25 */
541 COEF_CONST(1.4142135623730950488016887242097), /* 2^0.5 */
542 COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */
544 const real_t
*tab
= iq_table
;
547 uint16_t width
, bin
, k
, gindex
, wa
, wb
;
548 uint8_t error
= 0; /* Init error flag */
556 for (g
= 0; g
< ics
->num_window_groups
; g
++)
559 uint16_t gincrease
= 0;
560 uint16_t win_inc
= ics
->swb_offset
[ics
->num_swb
];
562 for (sfb
= 0; sfb
< ics
->num_swb
; sfb
++)
566 width
= ics
->swb_offset
[sfb
+1] - ics
->swb_offset
[sfb
];
568 /* this could be scalefactor for IS or PNS, those can be negative or bigger then 255 */
569 /* just ignore them */
570 if (ics
->scale_factors
[g
][sfb
] < 0 || ics
->scale_factors
[g
][sfb
] > 255)
575 /* ics->scale_factors[g][sfb] must be between 0 and 255 */
576 exp
= (ics
->scale_factors
[g
][sfb
] /* - 100 */) >> 2;
577 /* frac must always be > 0 */
578 frac
= (ics
->scale_factors
[g
][sfb
] /* - 100 */) & 3;
583 /* IMDCT pre-scaling */
584 if (hDecoder
->object_type
== LD
)
588 if (ics
->window_sequence
== EIGHT_SHORT_SEQUENCE
)
598 scf
= pow2sf_tab
[exp
/*+25*/] * pow2_table
[frac
];
601 for (win
= 0; win
< ics
->window_group_length
[g
]; win
++)
603 for (bin
= 0; bin
< width
; bin
+= 4)
608 spec_data
[wb
+0] = iquant(quant_data
[k
+0], tab
, &error
) * scf
;
609 spec_data
[wb
+1] = iquant(quant_data
[k
+1], tab
, &error
) * scf
;
610 spec_data
[wb
+2] = iquant(quant_data
[k
+2], tab
, &error
) * scf
;
611 spec_data
[wb
+3] = iquant(quant_data
[k
+3], tab
, &error
) * scf
;
614 real_t iq0
= iquant(quant_data
[k
+0], tab
, &error
);
615 real_t iq1
= iquant(quant_data
[k
+1], tab
, &error
);
616 real_t iq2
= iquant(quant_data
[k
+2], tab
, &error
);
617 real_t iq3
= iquant(quant_data
[k
+3], tab
, &error
);
623 spec_data
[wb
+0] = iq0
>>= -exp
;
624 spec_data
[wb
+1] = iq1
>>= -exp
;
625 spec_data
[wb
+2] = iq2
>>= -exp
;
626 spec_data
[wb
+3] = iq3
>>= -exp
;
628 spec_data
[wb
+0] = iq0
<<= exp
;
629 spec_data
[wb
+1] = iq1
<<= exp
;
630 spec_data
[wb
+2] = iq2
<<= exp
;
631 spec_data
[wb
+3] = iq3
<<= exp
;
635 spec_data
[wb
+0] = MUL_C(spec_data
[wb
+0],pow2_table
[frac
]);
636 spec_data
[wb
+1] = MUL_C(spec_data
[wb
+1],pow2_table
[frac
]);
637 spec_data
[wb
+2] = MUL_C(spec_data
[wb
+2],pow2_table
[frac
]);
638 spec_data
[wb
+3] = MUL_C(spec_data
[wb
+3],pow2_table
[frac
]);
643 printf("%d\n", spec_data
[gindex
+(win
*win_inc
)+j
+bin
+0]);
644 printf("%d\n", spec_data
[gindex
+(win
*win_inc
)+j
+bin
+1]);
645 printf("%d\n", spec_data
[gindex
+(win
*win_inc
)+j
+bin
+2]);
646 printf("%d\n", spec_data
[gindex
+(win
*win_inc
)+j
+bin
+3]);
647 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]);
648 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]);
649 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]);
650 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]);
667 static uint8_t allocate_single_channel(NeAACDecHandle hDecoder
, uint8_t channel
,
668 uint8_t output_channels
)
673 /* MAIN object type prediction */
674 if (hDecoder
->object_type
== MAIN
)
676 hDecoder
->pred_stat
[channel
] = (pred_state
*)realloc(hDecoder
->pred_stat
[channel
], hDecoder
->frameLength
* sizeof(pred_state
));
677 reset_all_predictors(hDecoder
->pred_stat
[channel
], hDecoder
->frameLength
);
682 if (is_ltp_ot(hDecoder
->object_type
))
684 hDecoder
->lt_pred_stat
[channel
] = (int16_t*)realloc(hDecoder
->lt_pred_stat
[channel
], hDecoder
->frameLength
*4 * sizeof(int16_t));
685 memset(hDecoder
->lt_pred_stat
[channel
], 0, hDecoder
->frameLength
*4 * sizeof(int16_t));
691 hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
] = 0;
692 if ((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
694 /* SBR requires 2 times as much output data */
696 hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
] = 1;
699 hDecoder
->time_out
[channel
] = (real_t
*)realloc(hDecoder
->time_out
[channel
], mul
*hDecoder
->frameLength
*sizeof(real_t
));
700 memset(hDecoder
->time_out
[channel
], 0, mul
*hDecoder
->frameLength
*sizeof(real_t
));
701 #if (defined(PS_DEC) || defined(DRM_PS))
702 if (output_channels
== 2)
704 hDecoder
->time_out
[channel
+1] = (real_t
*)realloc(hDecoder
->time_out
[channel
+1], mul
*hDecoder
->frameLength
*sizeof(real_t
));
705 memset(hDecoder
->time_out
[channel
+1], 0, mul
*hDecoder
->frameLength
*sizeof(real_t
));
709 hDecoder
->fb_intermed
[channel
] = (real_t
*)realloc(hDecoder
->fb_intermed
[channel
], hDecoder
->frameLength
*sizeof(real_t
));
710 memset(hDecoder
->fb_intermed
[channel
], 0, hDecoder
->frameLength
*sizeof(real_t
));
713 if (hDecoder
->object_type
== SSR
)
716 hDecoder
->ssr_overlap
[channel
] = (real_t
*)realloc(hDecoder
->ssr_overlap
[channel
], 2*hDecoder
->frameLength
*sizeof(real_t
));
717 memset(hDecoder
->ssr_overlap
[channel
], 0, 2*hDecoder
->frameLength
*sizeof(real_t
));
718 hDecoder
->prev_fmd
[channel
] = (real_t
*)realloc(hDecoder
->prev_fmd
[channel
], 2*hDecoder
->frameLength
*sizeof(real_t
));
719 for (k
= 0; k
< 2*hDecoder
->frameLength
; k
++)
720 hDecoder
->prev_fmd
[channel
][k
] = REAL_CONST(-1);
727 static uint8_t allocate_channel_pair(NeAACDecHandle hDecoder
,
728 uint8_t channel
, uint8_t paired_channel
)
733 /* MAIN object type prediction */
734 if (hDecoder
->object_type
== MAIN
)
736 /* allocate the state only when needed */
737 if (hDecoder
->pred_stat
[channel
] == NULL
)
739 hDecoder
->pred_stat
[channel
] = (pred_state
*)faad_malloc(hDecoder
->frameLength
* sizeof(pred_state
));
740 reset_all_predictors(hDecoder
->pred_stat
[channel
], hDecoder
->frameLength
);
742 if (hDecoder
->pred_stat
[paired_channel
] == NULL
)
744 hDecoder
->pred_stat
[paired_channel
] = (pred_state
*)faad_malloc(hDecoder
->frameLength
* sizeof(pred_state
));
745 reset_all_predictors(hDecoder
->pred_stat
[paired_channel
], hDecoder
->frameLength
);
751 if (is_ltp_ot(hDecoder
->object_type
))
753 /* allocate the state only when needed */
754 if (hDecoder
->lt_pred_stat
[channel
] == NULL
)
756 hDecoder
->lt_pred_stat
[channel
] = (int16_t*)faad_malloc(hDecoder
->frameLength
*4 * sizeof(int16_t));
757 memset(hDecoder
->lt_pred_stat
[channel
], 0, hDecoder
->frameLength
*4 * sizeof(int16_t));
759 if (hDecoder
->lt_pred_stat
[paired_channel
] == NULL
)
761 hDecoder
->lt_pred_stat
[paired_channel
] = (int16_t*)faad_malloc(hDecoder
->frameLength
*4 * sizeof(int16_t));
762 memset(hDecoder
->lt_pred_stat
[paired_channel
], 0, hDecoder
->frameLength
*4 * sizeof(int16_t));
767 if (hDecoder
->time_out
[channel
] == NULL
)
771 hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
] = 0;
772 if ((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
774 /* SBR requires 2 times as much output data */
776 hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
] = 1;
779 hDecoder
->time_out
[channel
] = (real_t
*)faad_malloc(mul
*hDecoder
->frameLength
*sizeof(real_t
));
780 memset(hDecoder
->time_out
[channel
], 0, mul
*hDecoder
->frameLength
*sizeof(real_t
));
782 if (hDecoder
->time_out
[paired_channel
] == NULL
)
784 hDecoder
->time_out
[paired_channel
] = (real_t
*)faad_malloc(mul
*hDecoder
->frameLength
*sizeof(real_t
));
785 memset(hDecoder
->time_out
[paired_channel
], 0, mul
*hDecoder
->frameLength
*sizeof(real_t
));
788 if (hDecoder
->fb_intermed
[channel
] == NULL
)
790 hDecoder
->fb_intermed
[channel
] = (real_t
*)faad_malloc(hDecoder
->frameLength
*sizeof(real_t
));
791 memset(hDecoder
->fb_intermed
[channel
], 0, hDecoder
->frameLength
*sizeof(real_t
));
793 if (hDecoder
->fb_intermed
[paired_channel
] == NULL
)
795 hDecoder
->fb_intermed
[paired_channel
] = (real_t
*)faad_malloc(hDecoder
->frameLength
*sizeof(real_t
));
796 memset(hDecoder
->fb_intermed
[paired_channel
], 0, hDecoder
->frameLength
*sizeof(real_t
));
800 if (hDecoder
->object_type
== SSR
)
802 if (hDecoder
->ssr_overlap
[cpe
->channel
] == NULL
)
804 hDecoder
->ssr_overlap
[cpe
->channel
] = (real_t
*)faad_malloc(2*hDecoder
->frameLength
*sizeof(real_t
));
805 memset(hDecoder
->ssr_overlap
[cpe
->channel
], 0, 2*hDecoder
->frameLength
*sizeof(real_t
));
807 if (hDecoder
->ssr_overlap
[cpe
->paired_channel
] == NULL
)
809 hDecoder
->ssr_overlap
[cpe
->paired_channel
] = (real_t
*)faad_malloc(2*hDecoder
->frameLength
*sizeof(real_t
));
810 memset(hDecoder
->ssr_overlap
[cpe
->paired_channel
], 0, 2*hDecoder
->frameLength
*sizeof(real_t
));
812 if (hDecoder
->prev_fmd
[cpe
->channel
] == NULL
)
815 hDecoder
->prev_fmd
[cpe
->channel
] = (real_t
*)faad_malloc(2*hDecoder
->frameLength
*sizeof(real_t
));
816 for (k
= 0; k
< 2*hDecoder
->frameLength
; k
++)
817 hDecoder
->prev_fmd
[cpe
->channel
][k
] = REAL_CONST(-1);
819 if (hDecoder
->prev_fmd
[cpe
->paired_channel
] == NULL
)
822 hDecoder
->prev_fmd
[cpe
->paired_channel
] = (real_t
*)faad_malloc(2*hDecoder
->frameLength
*sizeof(real_t
));
823 for (k
= 0; k
< 2*hDecoder
->frameLength
; k
++)
824 hDecoder
->prev_fmd
[cpe
->paired_channel
][k
] = REAL_CONST(-1);
832 uint8_t reconstruct_single_channel(NeAACDecHandle hDecoder
, ic_stream
*ics
,
833 element
*sce
, int16_t *spec_data
)
835 uint8_t retval
, output_channels
;
836 ALIGN real_t spec_coef
[1024];
839 int64_t count
= faad_get_ts();
843 /* always allocate 2 channels, PS can always "suddenly" turn up */
844 #if (defined(PS_DEC) || defined(DRM_PS))
845 output_channels
= hDecoder
->ps_used
[hDecoder
->fr_ch_ele
] ? 2 : 1;
850 if (hDecoder
->element_alloced
[hDecoder
->fr_ch_ele
] == 0 ||
851 hDecoder
->element_output_channels
[hDecoder
->fr_ch_ele
] < output_channels
) {
852 hDecoder
->element_output_channels
[hDecoder
->fr_ch_ele
] = output_channels
;
853 retval
= allocate_single_channel(hDecoder
, sce
->channel
, output_channels
);
857 hDecoder
->element_alloced
[hDecoder
->fr_ch_ele
] = 1;
861 /* dequantisation and scaling */
862 retval
= quant_to_spec(hDecoder
, ics
, spec_data
, spec_coef
, hDecoder
->frameLength
);
867 count
= faad_get_ts() - count
;
868 hDecoder
->requant_cycles
+= count
;
873 pns_decode(ics
, NULL
, spec_coef
, NULL
, hDecoder
->frameLength
, 0, hDecoder
->object_type
);
876 /* MAIN object type prediction */
877 if (hDecoder
->object_type
== MAIN
)
879 /* intra channel prediction */
880 ic_prediction(ics
, spec_coef
, hDecoder
->pred_stat
[sce
->channel
], hDecoder
->frameLength
,
883 /* In addition, for scalefactor bands coded by perceptual
884 noise substitution the predictors belonging to the
885 corresponding spectral coefficients are reset.
887 pns_reset_pred_state(ics
, hDecoder
->pred_stat
[sce
->channel
]);
892 if (is_ltp_ot(hDecoder
->object_type
))
895 if (hDecoder
->object_type
== LD
)
897 if (ics
->ltp
.data_present
)
899 if (ics
->ltp
.lag_update
)
900 hDecoder
->ltp_lag
[sce
->channel
] = ics
->ltp
.lag
;
902 ics
->ltp
.lag
= hDecoder
->ltp_lag
[sce
->channel
];
906 /* long term prediction */
907 lt_prediction(ics
, &(ics
->ltp
), spec_coef
, hDecoder
->lt_pred_stat
[sce
->channel
], hDecoder
->fb
,
908 ics
->window_shape
, hDecoder
->window_shape_prev
[sce
->channel
],
909 hDecoder
->sf_index
, hDecoder
->object_type
, hDecoder
->frameLength
);
914 tns_decode_frame(ics
, &(ics
->tns
), hDecoder
->sf_index
, hDecoder
->object_type
,
915 spec_coef
, hDecoder
->frameLength
);
918 if (hDecoder
->drc
->present
)
920 if (!hDecoder
->drc
->exclude_mask
[sce
->channel
] || !hDecoder
->drc
->excluded_chns_present
)
921 drc_decode(hDecoder
->drc
, spec_coef
);
926 if (hDecoder
->object_type
!= SSR
)
929 ifilter_bank(hDecoder
->fb
, ics
->window_sequence
, ics
->window_shape
,
930 hDecoder
->window_shape_prev
[sce
->channel
], spec_coef
,
931 hDecoder
->time_out
[sce
->channel
], hDecoder
->fb_intermed
[sce
->channel
],
932 hDecoder
->object_type
, hDecoder
->frameLength
);
935 ssr_decode(&(ics
->ssr
), hDecoder
->fb
, ics
->window_sequence
, ics
->window_shape
,
936 hDecoder
->window_shape_prev
[sce
->channel
], spec_coef
, hDecoder
->time_out
[sce
->channel
],
937 hDecoder
->ssr_overlap
[sce
->channel
], hDecoder
->ipqf_buffer
[sce
->channel
], hDecoder
->prev_fmd
[sce
->channel
],
938 hDecoder
->frameLength
);
942 /* save window shape for next frame */
943 hDecoder
->window_shape_prev
[sce
->channel
] = ics
->window_shape
;
946 if (is_ltp_ot(hDecoder
->object_type
))
948 lt_update_state(hDecoder
->lt_pred_stat
[sce
->channel
], hDecoder
->time_out
[sce
->channel
],
949 hDecoder
->fb_intermed
[sce
->channel
], hDecoder
->frameLength
, hDecoder
->object_type
);
954 if (((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
955 && hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
])
957 uint8_t ele
= hDecoder
->fr_ch_ele
;
958 uint8_t ch
= sce
->channel
;
960 /* following case can happen when forceUpSampling == 1 */
961 if (hDecoder
->sbr
[ele
] == NULL
)
963 hDecoder
->sbr
[ele
] = sbrDecodeInit(hDecoder
->frameLength
,
964 hDecoder
->element_id
[ele
], 2*get_sample_rate(hDecoder
->sf_index
),
965 hDecoder
->downSampledSBR
972 if (sce
->ics1
.window_sequence
== EIGHT_SHORT_SEQUENCE
)
973 hDecoder
->sbr
[ele
]->maxAACLine
= 8*sce
->ics1
.swb_offset
[max(sce
->ics1
.max_sfb
-1, 0)];
975 hDecoder
->sbr
[ele
]->maxAACLine
= sce
->ics1
.swb_offset
[max(sce
->ics1
.max_sfb
-1, 0)];
977 /* check if any of the PS tools is used */
978 #if (defined(PS_DEC) || defined(DRM_PS))
979 if (hDecoder
->ps_used
[ele
] == 0)
982 retval
= sbrDecodeSingleFrame(hDecoder
->sbr
[ele
], hDecoder
->time_out
[ch
],
983 hDecoder
->postSeekResetFlag
, hDecoder
->downSampledSBR
);
984 #if (defined(PS_DEC) || defined(DRM_PS))
986 retval
= sbrDecodeSingleFramePS(hDecoder
->sbr
[ele
], hDecoder
->time_out
[ch
],
987 hDecoder
->time_out
[ch
+1], hDecoder
->postSeekResetFlag
,
988 hDecoder
->downSampledSBR
);
993 } else if (((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
994 && !hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
])
999 /* copy L to R when no PS is used */
1000 #if (defined(PS_DEC) || defined(DRM_PS))
1001 if ((hDecoder
->ps_used
[hDecoder
->fr_ch_ele
] == 0) && (output_channels
== 2))
1003 uint8_t ele
= hDecoder
->fr_ch_ele
;
1004 uint8_t ch
= sce
->channel
;
1005 uint16_t frame_size
= (hDecoder
->sbr_alloced
[ele
]) ? 2 : 1;
1006 frame_size
*= hDecoder
->frameLength
*sizeof(real_t
);
1008 memcpy(hDecoder
->time_out
[ch
+1], hDecoder
->time_out
[ch
], frame_size
);
1016 uint8_t reconstruct_channel_pair(NeAACDecHandle hDecoder
, ic_stream
*ics1
, ic_stream
*ics2
,
1017 element
*cpe
, int16_t *spec_data1
, int16_t *spec_data2
)
1020 ALIGN real_t spec_coef1
[1024];
1021 ALIGN real_t spec_coef2
[1024];
1024 int64_t count
= faad_get_ts();
1026 if (hDecoder
->element_alloced
[hDecoder
->fr_ch_ele
] == 0)
1028 retval
= allocate_channel_pair(hDecoder
, cpe
->channel
, (uint8_t)cpe
->paired_channel
);
1032 hDecoder
->element_alloced
[hDecoder
->fr_ch_ele
] = 1;
1035 /* dequantisation and scaling */
1036 retval
= quant_to_spec(hDecoder
, ics1
, spec_data1
, spec_coef1
, hDecoder
->frameLength
);
1039 retval
= quant_to_spec(hDecoder
, ics2
, spec_data2
, spec_coef2
, hDecoder
->frameLength
);
1044 count
= faad_get_ts() - count
;
1045 hDecoder
->requant_cycles
+= count
;
1050 if (ics1
->ms_mask_present
)
1052 pns_decode(ics1
, ics2
, spec_coef1
, spec_coef2
, hDecoder
->frameLength
, 1, hDecoder
->object_type
);
1054 pns_decode(ics1
, NULL
, spec_coef1
, NULL
, hDecoder
->frameLength
, 0, hDecoder
->object_type
);
1055 pns_decode(ics2
, NULL
, spec_coef2
, NULL
, hDecoder
->frameLength
, 0, hDecoder
->object_type
);
1058 /* mid/side decoding */
1059 ms_decode(ics1
, ics2
, spec_coef1
, spec_coef2
, hDecoder
->frameLength
);
1064 for (i
= 0; i
< 1024; i
++)
1066 //printf("%d\n", spec_coef1[i]);
1067 printf("0x%.8X\n", spec_coef1
[i
]);
1069 for (i
= 0; i
< 1024; i
++)
1071 //printf("%d\n", spec_coef2[i]);
1072 printf("0x%.8X\n", spec_coef2
[i
]);
1077 /* intensity stereo decoding */
1078 is_decode(ics1
, ics2
, spec_coef1
, spec_coef2
, hDecoder
->frameLength
);
1083 for (i
= 0; i
< 1024; i
++)
1085 printf("%d\n", spec_coef1
[i
]);
1086 //printf("0x%.8X\n", spec_coef1[i]);
1088 for (i
= 0; i
< 1024; i
++)
1090 printf("%d\n", spec_coef2
[i
]);
1091 //printf("0x%.8X\n", spec_coef2[i]);
1097 /* MAIN object type prediction */
1098 if (hDecoder
->object_type
== MAIN
)
1100 /* intra channel prediction */
1101 ic_prediction(ics1
, spec_coef1
, hDecoder
->pred_stat
[cpe
->channel
], hDecoder
->frameLength
,
1102 hDecoder
->sf_index
);
1103 ic_prediction(ics2
, spec_coef2
, hDecoder
->pred_stat
[cpe
->paired_channel
], hDecoder
->frameLength
,
1104 hDecoder
->sf_index
);
1106 /* In addition, for scalefactor bands coded by perceptual
1107 noise substitution the predictors belonging to the
1108 corresponding spectral coefficients are reset.
1110 pns_reset_pred_state(ics1
, hDecoder
->pred_stat
[cpe
->channel
]);
1111 pns_reset_pred_state(ics2
, hDecoder
->pred_stat
[cpe
->paired_channel
]);
1116 if (is_ltp_ot(hDecoder
->object_type
))
1118 ltp_info
*ltp1
= &(ics1
->ltp
);
1119 ltp_info
*ltp2
= (cpe
->common_window
) ? &(ics2
->ltp2
) : &(ics2
->ltp
);
1121 if (hDecoder
->object_type
== LD
)
1123 if (ltp1
->data_present
)
1125 if (ltp1
->lag_update
)
1126 hDecoder
->ltp_lag
[cpe
->channel
] = ltp1
->lag
;
1128 ltp1
->lag
= hDecoder
->ltp_lag
[cpe
->channel
];
1129 if (ltp2
->data_present
)
1131 if (ltp2
->lag_update
)
1132 hDecoder
->ltp_lag
[cpe
->paired_channel
] = ltp2
->lag
;
1134 ltp2
->lag
= hDecoder
->ltp_lag
[cpe
->paired_channel
];
1138 /* long term prediction */
1139 lt_prediction(ics1
, ltp1
, spec_coef1
, hDecoder
->lt_pred_stat
[cpe
->channel
], hDecoder
->fb
,
1140 ics1
->window_shape
, hDecoder
->window_shape_prev
[cpe
->channel
],
1141 hDecoder
->sf_index
, hDecoder
->object_type
, hDecoder
->frameLength
);
1142 lt_prediction(ics2
, ltp2
, spec_coef2
, hDecoder
->lt_pred_stat
[cpe
->paired_channel
], hDecoder
->fb
,
1143 ics2
->window_shape
, hDecoder
->window_shape_prev
[cpe
->paired_channel
],
1144 hDecoder
->sf_index
, hDecoder
->object_type
, hDecoder
->frameLength
);
1149 tns_decode_frame(ics1
, &(ics1
->tns
), hDecoder
->sf_index
, hDecoder
->object_type
,
1150 spec_coef1
, hDecoder
->frameLength
);
1151 tns_decode_frame(ics2
, &(ics2
->tns
), hDecoder
->sf_index
, hDecoder
->object_type
,
1152 spec_coef2
, hDecoder
->frameLength
);
1155 if (hDecoder
->drc
->present
)
1157 if (!hDecoder
->drc
->exclude_mask
[cpe
->channel
] || !hDecoder
->drc
->excluded_chns_present
)
1158 drc_decode(hDecoder
->drc
, spec_coef1
);
1159 if (!hDecoder
->drc
->exclude_mask
[cpe
->paired_channel
] || !hDecoder
->drc
->excluded_chns_present
)
1160 drc_decode(hDecoder
->drc
, spec_coef2
);
1165 if (hDecoder
->object_type
!= SSR
)
1168 ifilter_bank(hDecoder
->fb
, ics1
->window_sequence
, ics1
->window_shape
,
1169 hDecoder
->window_shape_prev
[cpe
->channel
], spec_coef1
,
1170 hDecoder
->time_out
[cpe
->channel
], hDecoder
->fb_intermed
[cpe
->channel
],
1171 hDecoder
->object_type
, hDecoder
->frameLength
);
1172 ifilter_bank(hDecoder
->fb
, ics2
->window_sequence
, ics2
->window_shape
,
1173 hDecoder
->window_shape_prev
[cpe
->paired_channel
], spec_coef2
,
1174 hDecoder
->time_out
[cpe
->paired_channel
], hDecoder
->fb_intermed
[cpe
->paired_channel
],
1175 hDecoder
->object_type
, hDecoder
->frameLength
);
1178 ssr_decode(&(ics1
->ssr
), hDecoder
->fb
, ics1
->window_sequence
, ics1
->window_shape
,
1179 hDecoder
->window_shape_prev
[cpe
->channel
], spec_coef1
, hDecoder
->time_out
[cpe
->channel
],
1180 hDecoder
->ssr_overlap
[cpe
->channel
], hDecoder
->ipqf_buffer
[cpe
->channel
],
1181 hDecoder
->prev_fmd
[cpe
->channel
], hDecoder
->frameLength
);
1182 ssr_decode(&(ics2
->ssr
), hDecoder
->fb
, ics2
->window_sequence
, ics2
->window_shape
,
1183 hDecoder
->window_shape_prev
[cpe
->paired_channel
], spec_coef2
, hDecoder
->time_out
[cpe
->paired_channel
],
1184 hDecoder
->ssr_overlap
[cpe
->paired_channel
], hDecoder
->ipqf_buffer
[cpe
->paired_channel
],
1185 hDecoder
->prev_fmd
[cpe
->paired_channel
], hDecoder
->frameLength
);
1189 /* save window shape for next frame */
1190 hDecoder
->window_shape_prev
[cpe
->channel
] = ics1
->window_shape
;
1191 hDecoder
->window_shape_prev
[cpe
->paired_channel
] = ics2
->window_shape
;
1194 if (is_ltp_ot(hDecoder
->object_type
))
1196 lt_update_state(hDecoder
->lt_pred_stat
[cpe
->channel
], hDecoder
->time_out
[cpe
->channel
],
1197 hDecoder
->fb_intermed
[cpe
->channel
], hDecoder
->frameLength
, hDecoder
->object_type
);
1198 lt_update_state(hDecoder
->lt_pred_stat
[cpe
->paired_channel
], hDecoder
->time_out
[cpe
->paired_channel
],
1199 hDecoder
->fb_intermed
[cpe
->paired_channel
], hDecoder
->frameLength
, hDecoder
->object_type
);
1204 if (((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
1205 && hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
])
1207 uint8_t ele
= hDecoder
->fr_ch_ele
;
1208 uint8_t ch0
= cpe
->channel
;
1209 uint8_t ch1
= cpe
->paired_channel
;
1211 /* following case can happen when forceUpSampling == 1 */
1212 if (hDecoder
->sbr
[ele
] == NULL
)
1214 hDecoder
->sbr
[ele
] = sbrDecodeInit(hDecoder
->frameLength
,
1215 hDecoder
->element_id
[ele
], 2*get_sample_rate(hDecoder
->sf_index
),
1216 hDecoder
->downSampledSBR
1223 if (cpe
->ics1
.window_sequence
== EIGHT_SHORT_SEQUENCE
)
1224 hDecoder
->sbr
[ele
]->maxAACLine
= 8*cpe
->ics1
.swb_offset
[max(cpe
->ics1
.max_sfb
-1, 0)];
1226 hDecoder
->sbr
[ele
]->maxAACLine
= cpe
->ics1
.swb_offset
[max(cpe
->ics1
.max_sfb
-1, 0)];
1228 retval
= sbrDecodeCoupleFrame(hDecoder
->sbr
[ele
],
1229 hDecoder
->time_out
[ch0
], hDecoder
->time_out
[ch1
],
1230 hDecoder
->postSeekResetFlag
, hDecoder
->downSampledSBR
);
1233 } else if (((hDecoder
->sbr_present_flag
== 1) || (hDecoder
->forceUpSampling
== 1))
1234 && !hDecoder
->sbr_alloced
[hDecoder
->fr_ch_ele
])