1 /******************************************************************************
2  *
3  *  Copyright (C) 1999-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This file contains the Windowing coeffs for synthesis filter
22  *
23  ******************************************************************************/
24 #include "common/bt_target.h"
25 #include "sbc_encoder.h"
26 
27 #if (defined(SBC_ENC_INCLUDED) && SBC_ENC_INCLUDED == TRUE)
28 
29 #if (SBC_ARM_ASM_OPT==FALSE && SBC_IPAQ_OPT==FALSE)
30 #if (SBC_IS_64_MULT_IN_WINDOW_ACCU ==  FALSE)
31 /*Window coeff for 4 sub band case*/
32 const SINT16 gas32CoeffFor4SBs[] = {
33     (SINT16)((SINT32)0x00000000 >> 16), (SINT16)0x00000000,
34     (SINT16)((SINT32)0x001194E6 >> 16), (SINT16)0x001194E6,
35     (SINT16)((SINT32)0x0030E2D3 >> 16), (SINT16)0x0030E2D3,
36     (SINT16)((SINT32)0x00599403 >> 16), (SINT16)0x00599403,
37     (SINT16)((SINT32)0x007DBCC8 >> 16), (SINT16)0x007DBCC8,
38     (SINT16)((SINT32)0x007F88E4 >> 16), (SINT16)0x007F88E4,
39     (SINT16)((SINT32)0x003D239B >> 16), (SINT16)0x003D239B,
40     (SINT16)((SINT32)0xFF9BB9D5 >> 16), (SINT16)0xFF9BB9D5,
41 
42     (SINT16)((SINT32)0x01659F45 >> 16), (SINT16)0x01659F45,
43     (SINT16)((SINT32)0x029DBAA3 >> 16), (SINT16)0x029DBAA3,
44     (SINT16)((SINT32)0x03B23341 >> 16), (SINT16)0x03B23341,
45     (SINT16)((SINT32)0x041EEE40 >> 16), (SINT16)0x041EEE40,
46     (SINT16)((SINT32)0x034FEE2C >> 16), (SINT16)0x034FEE2C,
47     (SINT16)((SINT32)0x00C8F2BC >> 16), (SINT16)0x00C8F2BC,
48     (SINT16)((SINT32)0xFC4F91D4 >> 16), (SINT16)0xFC4F91D4,
49     (SINT16)((SINT32)0xF60FAF37 >> 16), (SINT16)0xF60FAF37,
50 
51     (SINT16)((SINT32)0x115B1ED2 >> 16), (SINT16)0x115B1ED2,
52     (SINT16)((SINT32)0x18F55C90 >> 16), (SINT16)0x18F55C90,
53     (SINT16)((SINT32)0x1F91CA46 >> 16), (SINT16)0x1F91CA46,
54     (SINT16)((SINT32)0x2412F251 >> 16), (SINT16)0x2412F251,
55     (SINT16)((SINT32)0x25AC1FF2 >> 16), (SINT16)0x25AC1FF2,
56     (SINT16)((SINT32)0x2412F251 >> 16), (SINT16)0x2412F251,
57     (SINT16)((SINT32)0x1F91CA46 >> 16), (SINT16)0x1F91CA46,
58     (SINT16)((SINT32)0x18F55C90 >> 16), (SINT16)0x18F55C90,
59 
60     (SINT16)((SINT32)0xEEA4E12E >> 16), (SINT16)0xEEA4E12E,
61     (SINT16)((SINT32)0xF60FAF37 >> 16), (SINT16)0xF60FAF37,
62     (SINT16)((SINT32)0xFC4F91D4 >> 16), (SINT16)0xFC4F91D4,
63     (SINT16)((SINT32)0x00C8F2BC >> 16), (SINT16)0x00C8F2BC,
64     (SINT16)((SINT32)0x034FEE2C >> 16), (SINT16)0x034FEE2C,
65     (SINT16)((SINT32)0x041EEE40 >> 16), (SINT16)0x041EEE40,
66     (SINT16)((SINT32)0x03B23341 >> 16), (SINT16)0x03B23341,
67     (SINT16)((SINT32)0x029DBAA3 >> 16), (SINT16)0x029DBAA3,
68 
69     (SINT16)((SINT32)0xFE9A60BB >> 16), (SINT16)0xFE9A60BB,
70     (SINT16)((SINT32)0xFF9BB9D5 >> 16), (SINT16)0xFF9BB9D5,
71     (SINT16)((SINT32)0x003D239B >> 16), (SINT16)0x003D239B,
72     (SINT16)((SINT32)0x007F88E4 >> 16), (SINT16)0x007F88E4,
73     (SINT16)((SINT32)0x007DBCC8 >> 16), (SINT16)0x007DBCC8,
74     (SINT16)((SINT32)0x00599403 >> 16), (SINT16)0x00599403,
75     (SINT16)((SINT32)0x0030E2D3 >> 16), (SINT16)0x0030E2D3,
76     (SINT16)((SINT32)0x001194E6 >> 16), (SINT16)0x001194E6
77 };
78 
79 /*Window coeff for 8 sub band case*/
80 const SINT16 gas32CoeffFor8SBs[] = {
81     (SINT16)((SINT32)0x00000000 >> 16),  (SINT16)0x00000000,
82     (SINT16)((SINT32)0x00052173 >> 16),  (SINT16)0x00052173,
83     (SINT16)((SINT32)0x000B3F71 >> 16),  (SINT16)0x000B3F71,
84     (SINT16)((SINT32)0x00122C7D >> 16),  (SINT16)0x00122C7D,
85     (SINT16)((SINT32)0x001AFF89 >> 16),  (SINT16)0x001AFF89,
86     (SINT16)((SINT32)0x00255A62 >> 16),  (SINT16)0x00255A62,
87     (SINT16)((SINT32)0x003060F4 >> 16),  (SINT16)0x003060F4,
88     (SINT16)((SINT32)0x003A72E7 >> 16),  (SINT16)0x003A72E7,
89 
90     (SINT16)((SINT32)0x0041EC6A >> 16),  (SINT16)0x0041EC6A, /* 8 */
91     (SINT16)((SINT32)0x0044EF48 >> 16),  (SINT16)0x0044EF48,
92     (SINT16)((SINT32)0x00415B75 >> 16),  (SINT16)0x00415B75,
93     (SINT16)((SINT32)0x0034F8B6 >> 16),  (SINT16)0x0034F8B6,
94     (SINT16)((SINT32)0x001D8FD2 >> 16),  (SINT16)0x001D8FD2,
95     (SINT16)((SINT32)0xFFFA2413 >> 16),  (SINT16)0xFFFA2413,
96     (SINT16)((SINT32)0xFFC9F10E >> 16),  (SINT16)0xFFC9F10E,
97     (SINT16)((SINT32)0xFF8D6793 >> 16),  (SINT16)0xFF8D6793,
98 
99     (SINT16)((SINT32)0x00B97348 >> 16),  (SINT16)0x00B97348, /* 16 */
100     (SINT16)((SINT32)0x01071B96 >> 16),  (SINT16)0x01071B96,
101     (SINT16)((SINT32)0x0156B3CA >> 16),  (SINT16)0x0156B3CA,
102     (SINT16)((SINT32)0x01A1B38B >> 16),  (SINT16)0x01A1B38B,
103     (SINT16)((SINT32)0x01E0224C >> 16),  (SINT16)0x01E0224C,
104     (SINT16)((SINT32)0x0209291F >> 16),  (SINT16)0x0209291F,
105     (SINT16)((SINT32)0x02138653 >> 16),  (SINT16)0x02138653,
106     (SINT16)((SINT32)0x01F5F424 >> 16),  (SINT16)0x01F5F424,
107 
108     (SINT16)((SINT32)0x01A7ECEF >> 16),  (SINT16)0x01A7ECEF, /* 24 */
109     (SINT16)((SINT32)0x01223EBA >> 16),  (SINT16)0x01223EBA,
110     (SINT16)((SINT32)0x005FD0FF >> 16),  (SINT16)0x005FD0FF,
111     (SINT16)((SINT32)0xFF5EEB73 >> 16),  (SINT16)0xFF5EEB73,
112     (SINT16)((SINT32)0xFE20435D >> 16),  (SINT16)0xFE20435D,
113     (SINT16)((SINT32)0xFCA86E7E >> 16),  (SINT16)0xFCA86E7E,
114     (SINT16)((SINT32)0xFAFF95FC >> 16),  (SINT16)0xFAFF95FC,
115     (SINT16)((SINT32)0xF9312891 >> 16),  (SINT16)0xF9312891,
116 
117     (SINT16)((SINT32)0x08B4307A >> 16),  (SINT16)0x08B4307A, /* 32 */
118     (SINT16)((SINT32)0x0A9F3E9A >> 16),  (SINT16)0x0A9F3E9A,
119     (SINT16)((SINT32)0x0C7D59B6 >> 16),  (SINT16)0x0C7D59B6,
120     (SINT16)((SINT32)0x0E3BB16F >> 16),  (SINT16)0x0E3BB16F,
121     (SINT16)((SINT32)0x0FC721F9 >> 16),  (SINT16)0x0FC721F9,
122     (SINT16)((SINT32)0x110ECEF0 >> 16),  (SINT16)0x110ECEF0,
123     (SINT16)((SINT32)0x120435FA >> 16),  (SINT16)0x120435FA,
124     (SINT16)((SINT32)0x129C226F >> 16),  (SINT16)0x129C226F,
125 
126     (SINT16)((SINT32)0x12CF6C75 >> 16),  (SINT16)0x12CF6C75, /* 40 */
127     (SINT16)((SINT32)0x129C226F >> 16),  (SINT16)0x129C226F,
128     (SINT16)((SINT32)0x120435FA >> 16),  (SINT16)0x120435FA,
129     (SINT16)((SINT32)0x110ECEF0 >> 16),  (SINT16)0x110ECEF0,
130     (SINT16)((SINT32)0x0FC721F9 >> 16),  (SINT16)0x0FC721F9,
131     (SINT16)((SINT32)0x0E3BB16F >> 16),  (SINT16)0x0E3BB16F,
132     (SINT16)((SINT32)0x0C7D59B6 >> 16),  (SINT16)0x0C7D59B6,
133     (SINT16)((SINT32)0x0A9F3E9A >> 16),  (SINT16)0x0A9F3E9A,
134 
135     (SINT16)((SINT32)0xF74BCF86 >> 16),  (SINT16)0xF74BCF86, /* 48 */
136     (SINT16)((SINT32)0xF9312891 >> 16),  (SINT16)0xF9312891,
137     (SINT16)((SINT32)0xFAFF95FC >> 16),  (SINT16)0xFAFF95FC,
138     (SINT16)((SINT32)0xFCA86E7E >> 16),  (SINT16)0xFCA86E7E,
139     (SINT16)((SINT32)0xFE20435D >> 16),  (SINT16)0xFE20435D,
140     (SINT16)((SINT32)0xFF5EEB73 >> 16),  (SINT16)0xFF5EEB73,
141     (SINT16)((SINT32)0x005FD0FF >> 16),  (SINT16)0x005FD0FF,
142     (SINT16)((SINT32)0x01223EBA >> 16),  (SINT16)0x01223EBA,
143 
144     (SINT16)((SINT32)0x01A7ECEF >> 16),  (SINT16)0x01A7ECEF, /* 56 */
145     (SINT16)((SINT32)0x01F5F424 >> 16),  (SINT16)0x01F5F424,
146     (SINT16)((SINT32)0x02138653 >> 16),  (SINT16)0x02138653,
147     (SINT16)((SINT32)0x0209291F >> 16),  (SINT16)0x0209291F,
148     (SINT16)((SINT32)0x01E0224C >> 16),  (SINT16)0x01E0224C,
149     (SINT16)((SINT32)0x01A1B38B >> 16),  (SINT16)0x01A1B38B,
150     (SINT16)((SINT32)0x0156B3CA >> 16),  (SINT16)0x0156B3CA,
151     (SINT16)((SINT32)0x01071B96 >> 16),  (SINT16)0x01071B96,
152 
153     (SINT16)((SINT32)0xFF468CB8 >> 16),  (SINT16)0xFF468CB8, /* 64 */
154     (SINT16)((SINT32)0xFF8D6793 >> 16),  (SINT16)0xFF8D6793,
155     (SINT16)((SINT32)0xFFC9F10E >> 16),  (SINT16)0xFFC9F10E,
156     (SINT16)((SINT32)0xFFFA2413 >> 16),  (SINT16)0xFFFA2413,
157     (SINT16)((SINT32)0x001D8FD2 >> 16),  (SINT16)0x001D8FD2,
158     (SINT16)((SINT32)0x0034F8B6 >> 16),  (SINT16)0x0034F8B6,
159     (SINT16)((SINT32)0x00415B75 >> 16),  (SINT16)0x00415B75,
160     (SINT16)((SINT32)0x0044EF48 >> 16),  (SINT16)0x0044EF48,
161 
162     (SINT16)((SINT32)0x0041EC6A >> 16),  (SINT16)0x0041EC6A, /* 72 */
163     (SINT16)((SINT32)0x003A72E7 >> 16),  (SINT16)0x003A72E7,
164     (SINT16)((SINT32)0x003060F4 >> 16),  (SINT16)0x003060F4,
165     (SINT16)((SINT32)0x00255A62 >> 16),  (SINT16)0x00255A62,
166     (SINT16)((SINT32)0x001AFF89 >> 16),  (SINT16)0x001AFF89,
167     (SINT16)((SINT32)0x00122C7D >> 16),  (SINT16)0x00122C7D,
168     (SINT16)((SINT32)0x000B3F71 >> 16),  (SINT16)0x000B3F71,
169     (SINT16)((SINT32)0x00052173 >> 16),  (SINT16)0x00052173
170 };
171 
172 #else
173 
174 /*Window coeff for 4 sub band case*/
175 const SINT32 gas32CoeffFor4SBs[] = {
176     (SINT32)0x00000000,
177     (SINT32)0x001194E6,
178     (SINT32)0x0030E2D3,
179     (SINT32)0x00599403,
180     (SINT32)0x007DBCC8,
181     (SINT32)0x007F88E4,
182     (SINT32)0x003D239B,
183     (SINT32)0xFF9BB9D5,
184 
185     (SINT32)0x01659F45,
186     (SINT32)0x029DBAA3,
187     (SINT32)0x03B23341,
188     (SINT32)0x041EEE40,
189     (SINT32)0x034FEE2C,
190     (SINT32)0x00C8F2BC,
191     (SINT32)0xFC4F91D4,
192     (SINT32)0xF60FAF37,
193 
194     (SINT32)0x115B1ED2,
195     (SINT32)0x18F55C90,
196     (SINT32)0x1F91CA46,
197     (SINT32)0x2412F251,
198     (SINT32)0x25AC1FF2,
199     (SINT32)0x2412F251,
200     (SINT32)0x1F91CA46,
201     (SINT32)0x18F55C90,
202 
203     (SINT32)0xEEA4E12E,
204     (SINT32)0xF60FAF37,
205     (SINT32)0xFC4F91D4,
206     (SINT32)0x00C8F2BC,
207     (SINT32)0x034FEE2C,
208     (SINT32)0x041EEE40,
209     (SINT32)0x03B23341,
210     (SINT32)0x029DBAA3,
211 
212     (SINT32)0xFE9A60BB,
213     (SINT32)0xFF9BB9D5,
214     (SINT32)0x003D239B,
215     (SINT32)0x007F88E4,
216     (SINT32)0x007DBCC8,
217     (SINT32)0x00599403,
218     (SINT32)0x0030E2D3,
219     (SINT32)0x001194E6
220 };
221 
222 /*Window coeff for 8 sub band case*/
223 const SINT32 gas32CoeffFor8SBs[] = {
224     (SINT32)0x00000000,
225     (SINT32)0x00052173,
226     (SINT32)0x000B3F71,
227     (SINT32)0x00122C7D,
228     (SINT32)0x001AFF89,
229     (SINT32)0x00255A62,
230     (SINT32)0x003060F4,
231     (SINT32)0x003A72E7,
232 
233     (SINT32)0x0041EC6A,  /* 8 */
234     (SINT32)0x0044EF48,
235     (SINT32)0x00415B75,
236     (SINT32)0x0034F8B6,
237     (SINT32)0x001D8FD2,
238     (SINT32)0xFFFA2413,
239     (SINT32)0xFFC9F10E,
240     (SINT32)0xFF8D6793,
241 
242     (SINT32)0x00B97348,  /* 16 */
243     (SINT32)0x01071B96,
244     (SINT32)0x0156B3CA,
245     (SINT32)0x01A1B38B,
246     (SINT32)0x01E0224C,
247     (SINT32)0x0209291F,
248     (SINT32)0x02138653,
249     (SINT32)0x01F5F424,
250 
251     (SINT32)0x01A7ECEF, /* 24 */
252     (SINT32)0x01223EBA,
253     (SINT32)0x005FD0FF,
254     (SINT32)0xFF5EEB73,
255     (SINT32)0xFE20435D,
256     (SINT32)0xFCA86E7E,
257     (SINT32)0xFAFF95FC,
258     (SINT32)0xF9312891,
259 
260     (SINT32)0x08B4307A, /* 32 */
261     (SINT32)0x0A9F3E9A,
262     (SINT32)0x0C7D59B6,
263     (SINT32)0x0E3BB16F,
264     (SINT32)0x0FC721F9,
265     (SINT32)0x110ECEF0,
266     (SINT32)0x120435FA,
267     (SINT32)0x129C226F,
268 
269     (SINT32)0x12CF6C75, /* 40 */
270     (SINT32)0x129C226F,
271     (SINT32)0x120435FA,
272     (SINT32)0x110ECEF0,
273     (SINT32)0x0FC721F9,
274     (SINT32)0x0E3BB16F,
275     (SINT32)0x0C7D59B6,
276     (SINT32)0x0A9F3E9A,
277 
278     (SINT32)0xF74BCF86, /* 48 */
279     (SINT32)0xF9312891,
280     (SINT32)0xFAFF95FC,
281     (SINT32)0xFCA86E7E,
282     (SINT32)0xFE20435D,
283     (SINT32)0xFF5EEB73,
284     (SINT32)0x005FD0FF,
285     (SINT32)0x01223EBA,
286 
287     (SINT32)0x01A7ECEF, /* 56 */
288     (SINT32)0x01F5F424,
289     (SINT32)0x02138653,
290     (SINT32)0x0209291F,
291     (SINT32)0x01E0224C,
292     (SINT32)0x01A1B38B,
293     (SINT32)0x0156B3CA,
294     (SINT32)0x01071B96,
295 
296     (SINT32)0xFF468CB8, /* 64 */
297     (SINT32)0xFF8D6793,
298     (SINT32)0xFFC9F10E,
299     (SINT32)0xFFFA2413,
300     (SINT32)0x001D8FD2,
301     (SINT32)0x0034F8B6,
302     (SINT32)0x00415B75,
303     (SINT32)0x0044EF48,
304 
305     (SINT32)0x0041EC6A, /* 72 */
306     (SINT32)0x003A72E7,
307     (SINT32)0x003060F4,
308     (SINT32)0x00255A62,
309     (SINT32)0x001AFF89,
310     (SINT32)0x00122C7D,
311     (SINT32)0x000B3F71,
312     (SINT32)0x00052173
313 };
314 
315 #endif
316 #endif
317 
318 #endif /* #if (defined(SBC_ENC_INCLUDED) && SBC_ENC_INCLUDED == TRUE) */
319