blob: 9b112f3fb13051eec74547e35097a4403bed0618
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: ps_dec.h,v 1.13 2009/01/26 22:32:31 menno Exp $ |
29 | **/ |
30 | |
31 | #ifndef __PS_DEC_H__ |
32 | #define __PS_DEC_H__ |
33 | |
34 | #ifdef __cplusplus |
35 | extern "C" { |
36 | #endif |
37 | |
38 | #include "bits.h" |
39 | |
40 | #define EXTENSION_ID_PS 2 |
41 | |
42 | #define MAX_PS_ENVELOPES 5 |
43 | #define NO_ALLPASS_LINKS 3 |
44 | |
45 | typedef struct { |
46 | /* bitstream parameters */ |
47 | uint8_t enable_iid; |
48 | uint8_t enable_icc; |
49 | uint8_t enable_ext; |
50 | |
51 | uint8_t iid_mode; |
52 | uint8_t icc_mode; |
53 | uint8_t nr_iid_par; |
54 | uint8_t nr_ipdopd_par; |
55 | uint8_t nr_icc_par; |
56 | |
57 | uint8_t frame_class; |
58 | uint8_t num_env; |
59 | |
60 | uint8_t border_position[MAX_PS_ENVELOPES + 1]; |
61 | |
62 | uint8_t iid_dt[MAX_PS_ENVELOPES]; |
63 | uint8_t icc_dt[MAX_PS_ENVELOPES]; |
64 | |
65 | uint8_t enable_ipdopd; |
66 | uint8_t ipd_mode; |
67 | uint8_t ipd_dt[MAX_PS_ENVELOPES]; |
68 | uint8_t opd_dt[MAX_PS_ENVELOPES]; |
69 | |
70 | /* indices */ |
71 | int8_t iid_index_prev[34]; |
72 | int8_t icc_index_prev[34]; |
73 | int8_t ipd_index_prev[17]; |
74 | int8_t opd_index_prev[17]; |
75 | int8_t iid_index[MAX_PS_ENVELOPES][34]; |
76 | int8_t icc_index[MAX_PS_ENVELOPES][34]; |
77 | int8_t ipd_index[MAX_PS_ENVELOPES][17]; |
78 | int8_t opd_index[MAX_PS_ENVELOPES][17]; |
79 | |
80 | int8_t ipd_index_1[17]; |
81 | int8_t opd_index_1[17]; |
82 | int8_t ipd_index_2[17]; |
83 | int8_t opd_index_2[17]; |
84 | |
85 | /* ps data was correctly read */ |
86 | uint8_t ps_data_available; |
87 | |
88 | /* a header has been read */ |
89 | uint8_t header_read; |
90 | |
91 | /* hybrid filterbank parameters */ |
92 | void *hyb; |
93 | uint8_t use34hybrid_bands; |
94 | uint8_t numTimeSlotsRate; |
95 | |
96 | /**/ |
97 | uint8_t num_groups; |
98 | uint8_t num_hybrid_groups; |
99 | uint8_t nr_par_bands; |
100 | uint8_t nr_allpass_bands; |
101 | uint8_t decay_cutoff; |
102 | |
103 | uint8_t *group_border; |
104 | uint16_t *map_group2bk; |
105 | |
106 | /* filter delay handling */ |
107 | uint8_t saved_delay; |
108 | uint8_t delay_buf_index_ser[NO_ALLPASS_LINKS]; |
109 | uint8_t num_sample_delay_ser[NO_ALLPASS_LINKS]; |
110 | uint8_t delay_D[64]; |
111 | uint8_t delay_buf_index_delay[64]; |
112 | |
113 | complex_t delay_Qmf[14][64]; /* 14 samples delay max, 64 QMF channels */ |
114 | complex_t delay_SubQmf[2][32]; /* 2 samples delay max (SubQmf is always allpass filtered) */ |
115 | complex_t delay_Qmf_ser[NO_ALLPASS_LINKS][5][64]; /* 5 samples delay max (table 8.34), 64 QMF channels */ |
116 | complex_t delay_SubQmf_ser[NO_ALLPASS_LINKS][5][32]; /* 5 samples delay max (table 8.34) */ |
117 | |
118 | /* transients */ |
119 | real_t alpha_decay; |
120 | real_t alpha_smooth; |
121 | |
122 | real_t P_PeakDecayNrg[34]; |
123 | real_t P_prev[34]; |
124 | real_t P_SmoothPeakDecayDiffNrg_prev[34]; |
125 | |
126 | /* mixing and phase */ |
127 | complex_t h11_prev[50]; |
128 | complex_t h12_prev[50]; |
129 | complex_t h21_prev[50]; |
130 | complex_t h22_prev[50]; |
131 | uint8_t phase_hist; |
132 | complex_t ipd_prev[20][2]; |
133 | complex_t opd_prev[20][2]; |
134 | |
135 | } ps_info; |
136 | |
137 | /* ps_syntax.c */ |
138 | uint16_t ps_data(ps_info *ps, bitfile *ld, uint8_t *header); |
139 | |
140 | /* ps_dec.c */ |
141 | ps_info *ps_init(uint8_t sr_index, uint8_t numTimeSlotsRate); |
142 | void ps_free(ps_info *ps); |
143 | |
144 | uint8_t ps_decode(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64]); |
145 | |
146 | |
147 | #ifdef __cplusplus |
148 | } |
149 | #endif |
150 | #endif |
151 | |
152 |