put deserialized values from sfd.ser
[IRC.git] / Robust / src / Tests / ssJava / mp3decoder / SynthesisFilter.java
1 /*\r
2  * 11/19/04 1.0 moved to LGPL.\r
3  * \r
4  * 04/01/00 Fixes for running under build 23xx Microsoft JVM. mdm.\r
5  * \r
6  * 19/12/99 Performance improvements to compute_pcm_samples().  \r
7  *                      Mat McGowan. mdm@techie.com. \r
8  *\r
9  * 16/02/99 Java Conversion by E.B , javalayer@javazoom.net\r
10  *\r
11  *  @(#) synthesis_filter.h 1.8, last edit: 6/15/94 16:52:00\r
12  *  @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de)\r
13  *  @(#) Berlin University of Technology\r
14  *\r
15  *-----------------------------------------------------------------------\r
16  *   This program is free software; you can redistribute it and/or modify\r
17  *   it under the terms of the GNU Library General Public License as published\r
18  *   by the Free Software Foundation; either version 2 of the License, or\r
19  *   (at your option) any later version.\r
20  *\r
21  *   This program is distributed in the hope that it will be useful,\r
22  *   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
23  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
24  *   GNU Library General Public License for more details.\r
25  *\r
26  *   You should have received a copy of the GNU Library General Public\r
27  *   License along with this program; if not, write to the Free Software\r
28  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
29  *----------------------------------------------------------------------\r
30  */\r
31 \r
32 //import java.io.IOException; //Compiler does not support imports\r
33 \r
34 /**\r
35  * A class for the synthesis filter bank.\r
36  * This class does a fast downsampling from 32, 44.1 or 48 kHz to 8 kHz, if ULAW is defined.\r
37  * Frequencies above 4 kHz are removed by ignoring higher subbands.\r
38  */\r
39 @LATTICE("TMP<PCM,PCM<AV,AV<V2,V2<V1,V1<L1,L1<L2,L2<L3,L3<L4,L4<LSH,LSH<S,S<SA,SA<EQ,EQ<SH,SH*,LSH*,V1*")\r
40 @METHODDEFAULT("OUT<V,V<SH,SH<IN,IN<GLOBAL,SH*,THISLOC=IN,GLOBALLOC=GLOBAL")\r
41 final class SynthesisFilter\r
42 {\r
43   @LOC("V1") private float[]                     v1;\r
44   @LOC("V2") private float[]                     v2;\r
45   @LOC("AV") private float[]                     actual_v;                      // v1 or v2\r
46   @LOC("SH") private int                         actual_write_pos;      // 0-15\r
47   @LOC("SA") private float[]                     samples;                       // 32 new subband samples\r
48   @LOC("V2") private int                                 channel;\r
49   @LOC("V2") private float                       scalefactor;\r
50   @LOC("EQ") private float[]                     eq;\r
51         \r
52         /**\r
53          * Quality value for controlling CPU usage/quality tradeoff. \r
54          */\r
55         /*\r
56         private int                             quality;\r
57         \r
58         private int                             v_inc;\r
59         \r
60         \r
61         \r
62         public static final int HIGH_QUALITY = 1;\r
63         public static final int MEDIUM_QUALITY = 2;\r
64         public static final int LOW_QUALITY = 4;\r
65         */\r
66         \r
67   /**\r
68    * Contructor.\r
69    * The scalefactor scales the calculated float pcm samples to short values\r
70    * (raw pcm samples are in [-1.0, 1.0], if no violations occur).\r
71    */\r
72   public SynthesisFilter(int channelnumber, float factor, float[] eq0)\r
73   {      \r
74           if (d==null)\r
75           {\r
76                         d = load_d();\r
77                         d16 = splitArray(d, 16);\r
78           }\r
79           \r
80           v1 = new float[512];\r
81          v2 = new float[512];\r
82          samples = new float[32];\r
83      channel = channelnumber;\r
84          scalefactor = factor;\r
85          setEQ(eq);      \r
86          //setQuality(HIGH_QUALITY);\r
87          \r
88      reset();\r
89   }\r
90   \r
91   public void setEQ(float[] eq0)\r
92   {\r
93          this.eq = eq0;  \r
94          if (eq==null)\r
95          {\r
96                  eq = new float[32];\r
97                  for (int i=0; i<32; i++)\r
98                          eq[i] = 1.0f;\r
99          }\r
100          if (eq.length<32)\r
101          {\r
102                 throw new IllegalArgumentException("eq0");       \r
103          }\r
104           \r
105   }\r
106   \r
107         /*\r
108         private void setQuality(int quality0)\r
109         {\r
110                 switch (quality0)\r
111                 {               \r
112                 case HIGH_QUALITY:\r
113                 case MEDIUM_QUALITY:\r
114                 case LOW_QUALITY:                                                 \r
115                         v_inc = 16 * quality0;                  \r
116                         quality = quality0;\r
117                         break;  \r
118                 default :\r
119                         throw new IllegalArgumentException("Unknown quality value");\r
120                 }                               \r
121         }\r
122         \r
123         public int getQuality()\r
124         {\r
125                 return quality; \r
126         }\r
127         */\r
128   \r
129   /**\r
130    * Reset the synthesis filter.\r
131    */\r
132   public void reset()\r
133   {\r
134      //float[] floatp;\r
135          // float[] floatp2;\r
136 \r
137      // initialize v1[] and v2[]:\r
138      //for (floatp = v1 + 512, floatp2 = v2 + 512; floatp > v1; )\r
139          //   *--floatp = *--floatp2 = 0.0;\r
140          for (int p=0;p<512;p++) \r
141                  v1[p] = v2[p] = 0.0f;\r
142 \r
143      // initialize samples[]:\r
144      //for (floatp = samples + 32; floatp > samples; )\r
145          //  *--floatp = 0.0;\r
146          for (int p2=0;p2<32;p2++) \r
147                  samples[p2] = 0.0f;\r
148 \r
149      actual_v = v1;\r
150      actual_write_pos = 15;\r
151   }\r
152 \r
153 \r
154   /**\r
155    * Inject Sample.\r
156    */\r
157     public void input_sample(@LOC("V") float sample, @LOC("V") int subbandnumber)\r
158   {                               \r
159           samples[subbandnumber] = eq[subbandnumber]*sample;\r
160   }\r
161 \r
162   public void input_samples(float[] s)\r
163   {\r
164           for (int i=31; i>=0; i--)\r
165           {             \r
166                  samples[i] = s[i]*eq[i];\r
167           }\r
168   }\r
169   \r
170   /**\r
171    * Compute new values via a fast cosine transform.\r
172    */\r
173   private void compute_new_v()\r
174   {\r
175         // p is fully initialized from x1\r
176          //float[] p = _p;\r
177          // pp is fully initialized from p\r
178          //float[] pp = _pp; \r
179           \r
180          //float[] new_v = _new_v;\r
181           \r
182         //float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3\r
183         //float[] p = new float[16];\r
184         //float[] pp = new float[16];\r
185           \r
186          /*\r
187          for (int i=31; i>=0; i--)\r
188          {\r
189                  new_v[i] = 0.0f;\r
190          }\r
191           */\r
192           \r
193       @LOC("IN,SynthesisFilter.L4") float new_v0;\r
194       @LOC("IN,SynthesisFilter.L2") float new_v1;\r
195       @LOC("IN,SynthesisFilter.L4") float new_v2;\r
196       @LOC("IN,SynthesisFilter.L2") float new_v3;\r
197       @LOC("IN,SynthesisFilter.L3") float new_v4;\r
198       @LOC("IN,SynthesisFilter.L4") float new_v5;\r
199       @LOC("IN,SynthesisFilter.L2") float new_v6;\r
200       @LOC("IN,SynthesisFilter.L3") float new_v7;\r
201       @LOC("IN,SynthesisFilter.L4") float new_v8;\r
202       @LOC("IN,SynthesisFilter.L4") float new_v9;\r
203       @LOC("IN,SynthesisFilter.L3") float new_v10;\r
204       @LOC("IN,SynthesisFilter.L2") float new_v11;\r
205       @LOC("IN,SynthesisFilter.L4") float new_v12;\r
206       @LOC("IN,SynthesisFilter.L3") float new_v13;\r
207       @LOC("IN,SynthesisFilter.L4") float new_v14;\r
208       @LOC("IN,SynthesisFilter.L4") float new_v15;\r
209       @LOC("IN,SynthesisFilter.L1") float new_v16;\r
210       @LOC("IN,SynthesisFilter.L3") float new_v17;\r
211       @LOC("IN,SynthesisFilter.L1") float new_v18;\r
212       @LOC("IN,SynthesisFilter.L2") float new_v19;\r
213       @LOC("IN,SynthesisFilter.L2") float new_v20;\r
214       @LOC("IN,SynthesisFilter.L2") float new_v21;\r
215       @LOC("IN,SynthesisFilter.L2") float new_v22;\r
216       @LOC("IN,SynthesisFilter.L3") float new_v23;\r
217       @LOC("IN,SynthesisFilter.L2") float new_v24;\r
218       @LOC("IN,SynthesisFilter.L2") float new_v25;\r
219       @LOC("IN,SynthesisFilter.L2") float new_v26;\r
220       @LOC("IN,SynthesisFilter.L4") float new_v27;\r
221       @LOC("IN,SynthesisFilter.L2") float new_v28;\r
222       @LOC("IN,SynthesisFilter.L4") float new_v29;\r
223       @LOC("IN,SynthesisFilter.L2") float new_v30;\r
224       @LOC("IN,SynthesisFilter.L4") float new_v31;\r
225           \r
226         new_v0 = new_v1 = new_v2 = new_v3 = new_v4 = new_v5 = new_v6 = new_v7 = new_v8 = new_v9 = \r
227         new_v10 = new_v11 = new_v12 = new_v13 = new_v14 = new_v15 = new_v16 = new_v17 = new_v18 = new_v19 = \r
228         new_v20 = new_v21 = new_v22 = new_v23 = new_v24 = new_v25 = new_v26 = new_v27 = new_v28 = new_v29 = \r
229         new_v30 = new_v31 = 0.0f;\r
230         \r
231         \r
232 //      float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3\r
233 //      float[] p = new float[16];\r
234 //      float[] pp = new float[16];\r
235 \r
236         //float[] s = samples; // subbed in samples directly below to reduce uneccesary areas\r
237         \r
238         @LOC("IN,SynthesisFilter.S") float s0 = samples[0];\r
239         @LOC("IN,SynthesisFilter.S") float s1 = samples[1];\r
240         @LOC("IN,SynthesisFilter.S") float s2 = samples[2];\r
241         @LOC("IN,SynthesisFilter.S") float s3 = samples[3];\r
242         @LOC("IN,SynthesisFilter.S") float s4 = samples[4];\r
243         @LOC("IN,SynthesisFilter.S") float s5 = samples[5];\r
244         @LOC("IN,SynthesisFilter.S") float s6 = samples[6];\r
245         @LOC("IN,SynthesisFilter.S") float s7 = samples[7];\r
246         @LOC("IN,SynthesisFilter.S") float s8 = samples[8];\r
247         @LOC("IN,SynthesisFilter.S") float s9 = samples[9];\r
248         @LOC("IN,SynthesisFilter.S") float s10 = samples[10];   \r
249         @LOC("IN,SynthesisFilter.S") float s11 = samples[11];\r
250         @LOC("IN,SynthesisFilter.S") float s12 = samples[12];\r
251         @LOC("IN,SynthesisFilter.S") float s13 = samples[13];\r
252         @LOC("IN,SynthesisFilter.S") float s14 = samples[14];\r
253         @LOC("IN,SynthesisFilter.S") float s15 = samples[15];\r
254         @LOC("IN,SynthesisFilter.S") float s16 = samples[16];\r
255         @LOC("IN,SynthesisFilter.S") float s17 = samples[17];\r
256         @LOC("IN,SynthesisFilter.S") float s18 = samples[18];\r
257         @LOC("IN,SynthesisFilter.S") float s19 = samples[19];\r
258         @LOC("IN,SynthesisFilter.S") float s20 = samples[20];   \r
259         @LOC("IN,SynthesisFilter.S") float s21 = samples[21];\r
260         @LOC("IN,SynthesisFilter.S") float s22 = samples[22];\r
261         @LOC("IN,SynthesisFilter.S") float s23 = samples[23];\r
262         @LOC("IN,SynthesisFilter.S") float s24 = samples[24];\r
263         @LOC("IN,SynthesisFilter.S") float s25 = samples[25];\r
264         @LOC("IN,SynthesisFilter.S") float s26 = samples[26];\r
265         @LOC("IN,SynthesisFilter.S") float s27 = samples[27];\r
266         @LOC("IN,SynthesisFilter.S") float s28 = samples[28];\r
267         @LOC("IN,SynthesisFilter.S") float s29 = samples[29];\r
268         @LOC("IN,SynthesisFilter.S") float s30 = samples[30];   \r
269         @LOC("IN,SynthesisFilter.S") float s31 = samples[31];\r
270                 \r
271         @LOC("IN,SynthesisFilter.LSH") float p0 = s0 + s31;\r
272         @LOC("IN,SynthesisFilter.LSH") float p1 = s1 + s30;\r
273         @LOC("IN,SynthesisFilter.LSH") float p2 = s2 + s29;\r
274         @LOC("IN,SynthesisFilter.LSH") float p3 = s3 + s28;\r
275         @LOC("IN,SynthesisFilter.LSH") float p4 = s4 + s27;\r
276         @LOC("IN,SynthesisFilter.LSH") float p5 = s5 + s26;\r
277         @LOC("IN,SynthesisFilter.LSH") float p6 = s6 + s25;\r
278         @LOC("IN,SynthesisFilter.LSH") float p7 = s7 + s24;\r
279         @LOC("IN,SynthesisFilter.LSH") float p8 = s8 + s23;\r
280         @LOC("IN,SynthesisFilter.LSH") float p9 = s9 + s22;\r
281         @LOC("IN,SynthesisFilter.LSH") float p10 = s10 + s21;\r
282         @LOC("IN,SynthesisFilter.LSH") float p11 = s11 + s20;\r
283         @LOC("IN,SynthesisFilter.LSH") float p12 = s12 + s19;\r
284         @LOC("IN,SynthesisFilter.LSH") float p13 = s13 + s18;\r
285         @LOC("IN,SynthesisFilter.LSH") float p14 = s14 + s17;\r
286         @LOC("IN,SynthesisFilter.LSH") float p15 = s15 + s16;\r
287         \r
288         @LOC("IN,SynthesisFilter.LSH") float pp0 = p0 + p15;\r
289         @LOC("IN,SynthesisFilter.LSH") float pp1 = p1 + p14;\r
290         @LOC("IN,SynthesisFilter.LSH") float pp2 = p2 + p13;\r
291         @LOC("IN,SynthesisFilter.LSH") float pp3 = p3 + p12;\r
292         @LOC("IN,SynthesisFilter.LSH") float pp4 = p4 + p11;\r
293         @LOC("IN,SynthesisFilter.LSH") float pp5 = p5 + p10;\r
294         @LOC("IN,SynthesisFilter.LSH") float pp6 = p6 + p9;\r
295         @LOC("IN,SynthesisFilter.LSH") float pp7 = p7 + p8;\r
296         @LOC("IN,SynthesisFilter.LSH") float pp8 = (p0 - p15) * cos1_32;\r
297         @LOC("IN,SynthesisFilter.LSH") float pp9 = (p1 - p14) * cos3_32;\r
298         @LOC("IN,SynthesisFilter.LSH") float pp10 = (p2 - p13) * cos5_32;\r
299         @LOC("IN,SynthesisFilter.LSH") float pp11 = (p3 - p12) * cos7_32;\r
300         @LOC("IN,SynthesisFilter.LSH") float pp12 = (p4 - p11) * cos9_32;\r
301         @LOC("IN,SynthesisFilter.LSH") float pp13 = (p5 - p10) * cos11_32;\r
302         @LOC("IN,SynthesisFilter.LSH") float pp14 = (p6 - p9) * cos13_32;\r
303         @LOC("IN,SynthesisFilter.LSH") float pp15 = (p7 - p8) * cos15_32;\r
304 \r
305         p0 = pp0 + pp7;\r
306         p1 = pp1 + pp6;\r
307         p2 = pp2 + pp5;\r
308         p3 = pp3 + pp4;\r
309         p4 = (pp0 - pp7) * cos1_16;\r
310         p5 = (pp1 - pp6) * cos3_16;\r
311         p6 = (pp2 - pp5) * cos5_16;\r
312         p7 = (pp3 - pp4) * cos7_16;\r
313         p8 = pp8 + pp15;\r
314         p9 = pp9 + pp14;\r
315         p10 = pp10 + pp13;\r
316         p11 = pp11 + pp12;\r
317         p12 = (pp8 - pp15) * cos1_16;\r
318         p13 = (pp9 - pp14) * cos3_16;\r
319         p14 = (pp10 - pp13) * cos5_16;\r
320         p15 = (pp11 - pp12) * cos7_16;\r
321         \r
322 \r
323         pp0 = p0 + p3;\r
324         pp1 = p1 + p2;\r
325         pp2 = (p0 - p3) * cos1_8;\r
326         pp3 = (p1 - p2) * cos3_8;\r
327         pp4 = p4 + p7;\r
328         pp5 = p5 + p6;\r
329         pp6 = (p4 - p7) * cos1_8;\r
330         pp7 = (p5 - p6) * cos3_8;\r
331         pp8 = p8 + p11;\r
332         pp9 = p9 + p10;\r
333         pp10 = (p8 - p11) * cos1_8;\r
334         pp11 = (p9 - p10) * cos3_8;\r
335         pp12 = p12 + p15;\r
336         pp13 = p13 + p14;\r
337         pp14 = (p12 - p15) * cos1_8;\r
338         pp15 = (p13 - p14) * cos3_8;\r
339 \r
340         p0 = pp0 + pp1;\r
341         p1 = (pp0 - pp1) * cos1_4;\r
342         p2 = pp2 + pp3;\r
343         p3 = (pp2 - pp3) * cos1_4;\r
344         p4 = pp4 + pp5;\r
345         p5 = (pp4 - pp5) * cos1_4;\r
346         p6 = pp6 + pp7;\r
347         p7 = (pp6 - pp7) * cos1_4;\r
348         p8 = pp8 + pp9;\r
349         p9 = (pp8 - pp9) * cos1_4;\r
350 \r
351         p10 = pp10 + pp11;\r
352         p11 = (pp10 - pp11) * cos1_4;\r
353         p12 = pp12 + pp13;\r
354         p13 = (pp12 - pp13) * cos1_4;\r
355         p14 = pp14 + pp15;\r
356         p15 = (pp14 - pp15) * cos1_4;\r
357 \r
358         // this is pretty insane coding\r
359         @LOC("IN,SynthesisFilter.L3") float tmp1;\r
360         new_v19/*36-17*/ = -(new_v4 = (new_v12 = p7) + p5) - p6;\r
361         new_v27/*44-17*/ = -p6 - p7 - p4;\r
362         new_v6 = (new_v10 = (new_v14 = p15) + p11) + p13;\r
363         new_v17/*34-17*/ = -(new_v2 = p15 + p13 + p9) - p14;\r
364         new_v21/*38-17*/ = (tmp1 = -p14 - p15 - p10 - p11) - p13;\r
365         new_v29/*46-17*/ = -p14 - p15 - p12 - p8;\r
366         new_v25/*42-17*/ = tmp1 - p12;\r
367         new_v31/*48-17*/ = -p0;\r
368         new_v0 = p1;\r
369         new_v23/*40-17*/ = -(new_v8 = p3) - p2;\r
370         \r
371         p0 = (s0 - s31) * cos1_64;\r
372         p1 = (s1 - s30) * cos3_64;\r
373         p2 = (s2 - s29) * cos5_64;\r
374         p3 = (s3 - s28) * cos7_64;\r
375         p4 = (s4 - s27) * cos9_64;\r
376         p5 = (s5 - s26) * cos11_64;\r
377         p6 = (s6 - s25) * cos13_64;\r
378         p7 = (s7 - s24) * cos15_64;\r
379         p8 = (s8 - s23) * cos17_64;\r
380         p9 = (s9 - s22) * cos19_64;\r
381         p10 = (s10 - s21) * cos21_64;\r
382         p11 = (s11 - s20) * cos23_64;\r
383         p12 = (s12 - s19) * cos25_64;\r
384         p13 = (s13 - s18) * cos27_64;\r
385         p14 = (s14 - s17) * cos29_64;\r
386         p15 = (s15 - s16) * cos31_64;\r
387 \r
388         \r
389         pp0 = p0 + p15;\r
390         pp1 = p1 + p14;\r
391         pp2 = p2 + p13;\r
392         pp3 = p3 + p12;\r
393         pp4 = p4 + p11;\r
394         pp5 = p5 + p10;\r
395         pp6 = p6 + p9;\r
396         pp7 = p7 + p8;\r
397         pp8 = (p0 - p15) * cos1_32;\r
398         pp9 = (p1 - p14) * cos3_32;\r
399         pp10 = (p2 - p13) * cos5_32;\r
400         pp11 = (p3 - p12) * cos7_32;\r
401         pp12 = (p4 - p11) * cos9_32;\r
402         pp13 = (p5 - p10) * cos11_32;\r
403         pp14 = (p6 - p9) * cos13_32;\r
404         pp15 = (p7 - p8) * cos15_32;\r
405         \r
406 \r
407         p0 = pp0 + pp7;\r
408         p1 = pp1 + pp6;\r
409         p2 = pp2 + pp5;\r
410         p3 = pp3 + pp4;\r
411         p4 = (pp0 - pp7) * cos1_16;\r
412         p5 = (pp1 - pp6) * cos3_16;\r
413         p6 = (pp2 - pp5) * cos5_16;\r
414         p7 = (pp3 - pp4) * cos7_16;\r
415         p8 = pp8 + pp15;\r
416         p9 = pp9 + pp14;\r
417         p10 = pp10 + pp13;\r
418         p11 = pp11 + pp12;\r
419         p12 = (pp8 - pp15) * cos1_16;\r
420         p13 = (pp9 - pp14) * cos3_16;\r
421         p14 = (pp10 - pp13) * cos5_16;\r
422         p15 = (pp11 - pp12) * cos7_16;\r
423 \r
424 \r
425         pp0 = p0 + p3;\r
426         pp1 = p1 + p2;\r
427         pp2 = (p0 - p3) * cos1_8;\r
428         pp3 = (p1 - p2) * cos3_8;\r
429         pp4 = p4 + p7;\r
430         pp5 = p5 + p6;\r
431         pp6 = (p4 - p7) * cos1_8;\r
432         pp7 = (p5 - p6) * cos3_8;\r
433         pp8 = p8 + p11;\r
434         pp9 = p9 + p10;\r
435         pp10 = (p8 - p11) * cos1_8;\r
436         pp11 = (p9 - p10) * cos3_8;\r
437         pp12 = p12 + p15;\r
438         pp13 = p13 + p14;\r
439         pp14 = (p12 - p15) * cos1_8;\r
440         pp15 = (p13 - p14) * cos3_8;\r
441 \r
442         \r
443         p0 = pp0 + pp1;\r
444         p1 = (pp0 - pp1) * cos1_4;\r
445         p2 = pp2 + pp3;\r
446         p3 = (pp2 - pp3) * cos1_4;\r
447         p4 = pp4 + pp5;\r
448         p5 = (pp4 - pp5) * cos1_4;\r
449         p6 = pp6 + pp7;\r
450         p7 = (pp6 - pp7) * cos1_4;\r
451         p8 = pp8 + pp9;\r
452         p9 = (pp8 - pp9) * cos1_4;\r
453         p10 = pp10 + pp11;\r
454         p11 = (pp10 - pp11) * cos1_4;\r
455         p12 = pp12 + pp13;\r
456         p13 = (pp12 - pp13) * cos1_4;\r
457         p14 = pp14 + pp15;\r
458         p15 = (pp14 - pp15) * cos1_4;\r
459         \r
460 \r
461         // manually doing something that a compiler should handle sucks\r
462         // coding like this is hard to read\r
463         @LOC("IN,SynthesisFilter.L4") float tmp2;\r
464         new_v5 = (new_v11 = (new_v13 = (new_v15 = p15) + p7) + p11)\r
465                                                         + p5 + p13;\r
466         new_v7 = (new_v9 = p15 + p11 + p3) + p13;\r
467         new_v16/*33-17*/ = -(new_v1 = (tmp1 = p13 + p15 + p9) + p1) - p14;\r
468         new_v18/*35-17*/ = -(new_v3 = tmp1 + p5 + p7) - p6 - p14;\r
469 \r
470         new_v22/*39-17*/ = (tmp1 = -p10 - p11 - p14 - p15)\r
471                                                                         - p13 - p2 - p3;\r
472         new_v20/*37-17*/ = tmp1 - p13 - p5 - p6 - p7;\r
473         new_v24/*41-17*/ = tmp1 - p12 - p2 - p3;\r
474         new_v26/*43-17*/ = tmp1 - p12 - (tmp2 = p4 + p6 + p7);\r
475         new_v30/*47-17*/ = (tmp1 = -p8 - p12 - p14 - p15) - p0;\r
476         new_v28/*45-17*/ = tmp1 - tmp2;\r
477 \r
478         // insert V[0-15] (== new_v[0-15]) into actual v:       \r
479         // float[] x2 = actual_v + actual_write_pos;\r
480         //float dest[] = actual_v; //actual_v subbed in so as not to create a new area\r
481         \r
482         //int pos = actual_write_pos; //substituted to simplify location relations\r
483         \r
484         actual_v[0 + actual_write_pos] = new_v0;\r
485         actual_v[16 + actual_write_pos] = new_v1;\r
486         actual_v[32 + actual_write_pos] = new_v2;\r
487         actual_v[48 + actual_write_pos] = new_v3;\r
488         actual_v[64 + actual_write_pos] = new_v4;\r
489         actual_v[80 + actual_write_pos] = new_v5;\r
490         actual_v[96 + actual_write_pos] = new_v6;\r
491         actual_v[112 + actual_write_pos] = new_v7;\r
492         actual_v[128 + actual_write_pos] = new_v8;\r
493         actual_v[144 + actual_write_pos] = new_v9;\r
494         actual_v[160 + actual_write_pos] = new_v10;\r
495         actual_v[176 + actual_write_pos] = new_v11;\r
496         actual_v[192 + actual_write_pos] = new_v12;\r
497         actual_v[208 + actual_write_pos] = new_v13;\r
498         actual_v[224 + actual_write_pos] = new_v14;\r
499         actual_v[240 + actual_write_pos] = new_v15;\r
500 \r
501         // V[16] is always 0.0:\r
502         actual_v[256 + actual_write_pos] = 0.0f;\r
503 \r
504         // insert V[17-31] (== -new_v[15-1]) into actual v:\r
505         actual_v[272 + actual_write_pos] = -new_v15;\r
506         actual_v[288 + actual_write_pos] = -new_v14;\r
507         actual_v[304 + actual_write_pos] = -new_v13;\r
508         actual_v[320 + actual_write_pos] = -new_v12;\r
509         actual_v[336 + actual_write_pos] = -new_v11;\r
510         actual_v[352 + actual_write_pos] = -new_v10;\r
511         actual_v[368 + actual_write_pos] = -new_v9;\r
512         actual_v[384 + actual_write_pos] = -new_v8;\r
513         actual_v[400 + actual_write_pos] = -new_v7;\r
514         actual_v[416 + actual_write_pos] = -new_v6;\r
515         actual_v[432 + actual_write_pos] = -new_v5;\r
516         actual_v[448 + actual_write_pos] = -new_v4;\r
517         actual_v[464 + actual_write_pos] = -new_v3;\r
518         actual_v[480 + actual_write_pos] = -new_v2;\r
519         actual_v[496 + actual_write_pos] = -new_v1;\r
520 \r
521         // insert V[32] (== -new_v[0]) into other v:\r
522         //dest = (actual_v==v1) ? v2 : v1;  //assignment replaced with if statement so that new areas are not created\r
523         if(actual_v == v1){\r
524             v2[0 + actual_write_pos] = -new_v0;\r
525         // insert V[33-48] (== new_v[16-31]) into other v:\r
526             v2[16 + actual_write_pos] = new_v16;\r
527             v2[32 + actual_write_pos] = new_v17;\r
528             v2[48 + actual_write_pos] = new_v18;\r
529             v2[64 + actual_write_pos] = new_v19;\r
530             v2[80 + actual_write_pos] = new_v20;\r
531             v2[96 + actual_write_pos] = new_v21;\r
532             v2[112 + actual_write_pos] = new_v22;\r
533             v2[128 + actual_write_pos] = new_v23;\r
534             v2[144 + actual_write_pos] = new_v24;\r
535             v2[160 + actual_write_pos] = new_v25;\r
536             v2[176 + actual_write_pos] = new_v26;\r
537             v2[192 + actual_write_pos] = new_v27;\r
538             v2[208 + actual_write_pos] = new_v28;\r
539             v2[224 + actual_write_pos] = new_v29;\r
540             v2[240 + actual_write_pos] = new_v30;\r
541             v2[256 + actual_write_pos] = new_v31;\r
542         \r
543         // insert V[49-63] (== new_v[30-16]) into other v:\r
544             v2[272 + actual_write_pos] = new_v30;\r
545             v2[288 + actual_write_pos] = new_v29;\r
546             v2[304 + actual_write_pos] = new_v28;\r
547             v2[320 + actual_write_pos] = new_v27;\r
548             v2[336 + actual_write_pos] = new_v26;\r
549             v2[352 + actual_write_pos] = new_v25;\r
550             v2[368 + actual_write_pos] = new_v24;\r
551             v2[384 + actual_write_pos] = new_v23;\r
552             v2[400 + actual_write_pos] = new_v22;\r
553             v2[416 + actual_write_pos] = new_v21;\r
554             v2[432 + actual_write_pos] = new_v20;\r
555             v2[448 + actual_write_pos] = new_v19;\r
556             v2[464 + actual_write_pos] = new_v18;\r
557             v2[480 + actual_write_pos] = new_v17;\r
558             v2[496 + actual_write_pos] = new_v16;\r
559         } \r
560         else{\r
561             v1[0 + actual_write_pos] = -new_v0;\r
562             v1[16 + actual_write_pos] = new_v16;\r
563             v1[32 + actual_write_pos] = new_v17;\r
564             v1[48 + actual_write_pos] = new_v18;\r
565             v1[64 + actual_write_pos] = new_v19;\r
566             v1[80 + actual_write_pos] = new_v20;\r
567             v1[96 + actual_write_pos] = new_v21;\r
568             v1[112 + actual_write_pos] = new_v22;\r
569             v1[128 + actual_write_pos] = new_v23;\r
570             v1[144 + actual_write_pos] = new_v24;\r
571             v1[160 + actual_write_pos] = new_v25;\r
572             v1[176 + actual_write_pos] = new_v26;\r
573             v1[192 + actual_write_pos] = new_v27;\r
574             v1[208 + actual_write_pos] = new_v28;\r
575             v1[224 + actual_write_pos] = new_v29;\r
576             v1[240 + actual_write_pos] = new_v30;\r
577             v1[256 + actual_write_pos] = new_v31;\r
578         \r
579         // insert V[49-63] (== new_v[30-16]) into other v:\r
580             v1[272 + actual_write_pos] = new_v30;\r
581             v1[288 + actual_write_pos] = new_v29;\r
582             v1[304 + actual_write_pos] = new_v28;\r
583             v1[320 + actual_write_pos] = new_v27;\r
584             v1[336 + actual_write_pos] = new_v26;\r
585             v1[352 + actual_write_pos] = new_v25;\r
586             v1[368 + actual_write_pos] = new_v24;\r
587             v1[384 + actual_write_pos] = new_v23;\r
588             v1[400 + actual_write_pos] = new_v22;\r
589             v1[416 + actual_write_pos] = new_v21;\r
590             v1[432 + actual_write_pos] = new_v20;\r
591             v1[448 + actual_write_pos] = new_v19;\r
592             v1[464 + actual_write_pos] = new_v18;\r
593             v1[480 + actual_write_pos] = new_v17;\r
594             v1[496 + actual_write_pos] = new_v16;\r
595         }\r
596 /*\r
597         }\r
598         else\r
599         {\r
600                 v1[0 + actual_write_pos] = -new_v0;\r
601                 // insert V[33-48] (== new_v[16-31]) into other v:\r
602                 v1[16 + actual_write_pos] = new_v16;\r
603                 v1[32 + actual_write_pos] = new_v17;\r
604                 v1[48 + actual_write_pos] = new_v18;\r
605                 v1[64 + actual_write_pos] = new_v19;\r
606                 v1[80 + actual_write_pos] = new_v20;\r
607                 v1[96 + actual_write_pos] = new_v21;\r
608                 v1[112 + actual_write_pos] = new_v22;\r
609                 v1[128 + actual_write_pos] = new_v23;\r
610                 v1[144 + actual_write_pos] = new_v24;\r
611                 v1[160 + actual_write_pos] = new_v25;\r
612                 v1[176 + actual_write_pos] = new_v26;\r
613                 v1[192 + actual_write_pos] = new_v27;\r
614                 v1[208 + actual_write_pos] = new_v28;\r
615                 v1[224 + actual_write_pos] = new_v29;\r
616                 v1[240 + actual_write_pos] = new_v30;\r
617                 v1[256 + actual_write_pos] = new_v31;\r
618 \r
619                 // insert V[49-63] (== new_v[30-16]) into other v:\r
620                 v1[272 + actual_write_pos] = new_v30;\r
621                 v1[288 + actual_write_pos] = new_v29;\r
622                 v1[304 + actual_write_pos] = new_v28;\r
623                 v1[320 + actual_write_pos] = new_v27;\r
624                 v1[336 + actual_write_pos] = new_v26;\r
625                 v1[352 + actual_write_pos] = new_v25;\r
626                 v1[368 + actual_write_pos] = new_v24;\r
627                 v1[384 + actual_write_pos] = new_v23;\r
628                 v1[400 + actual_write_pos] = new_v22;\r
629                 v1[416 + actual_write_pos] = new_v21;\r
630                 v1[432 + actual_write_pos] = new_v20;\r
631                 v1[448 + actual_write_pos] = new_v19;\r
632                 v1[464 + actual_write_pos] = new_v18;\r
633                 v1[480 + actual_write_pos] = new_v17;\r
634                 v1[496 + actual_write_pos] = new_v16;   \r
635         }\r
636 */      \r
637   }\r
638         \r
639   /**\r
640    * Compute new values via a fast cosine transform.\r
641    */\r
642   private void compute_new_v_old()\r
643   {\r
644         // p is fully initialized from x1\r
645          //float[] p = _p;\r
646          // pp is fully initialized from p\r
647          //float[] pp = _pp; \r
648           \r
649          //float[] new_v = _new_v;\r
650           \r
651         float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3\r
652         float[] p = new float[16];\r
653         float[] pp = new float[16];\r
654           \r
655           \r
656          for (int i=31; i>=0; i--)\r
657          {\r
658                  new_v[i] = 0.0f;\r
659          }\r
660          \r
661 //      float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2 in ISO DIS 11172-3\r
662 //      float[] p = new float[16];\r
663 //      float[] pp = new float[16];\r
664 \r
665     float[] x1 = samples;\r
666         \r
667         p[0] = x1[0] + x1[31];\r
668         p[1] = x1[1] + x1[30];\r
669         p[2] = x1[2] + x1[29];\r
670         p[3] = x1[3] + x1[28];\r
671         p[4] = x1[4] + x1[27];\r
672         p[5] = x1[5] + x1[26];\r
673         p[6] = x1[6] + x1[25];\r
674         p[7] = x1[7] + x1[24];\r
675         p[8] = x1[8] + x1[23];\r
676         p[9] = x1[9] + x1[22];\r
677         p[10] = x1[10] + x1[21];\r
678         p[11] = x1[11] + x1[20];\r
679         p[12] = x1[12] + x1[19];\r
680         p[13] = x1[13] + x1[18];\r
681         p[14] = x1[14] + x1[17];\r
682         p[15] = x1[15] + x1[16];\r
683         \r
684         pp[0] = p[0] + p[15];\r
685         pp[1] = p[1] + p[14];\r
686         pp[2] = p[2] + p[13];\r
687         pp[3] = p[3] + p[12];\r
688         pp[4] = p[4] + p[11];\r
689         pp[5] = p[5] + p[10];\r
690         pp[6] = p[6] + p[9];\r
691         pp[7] = p[7] + p[8];\r
692         pp[8] = (p[0] - p[15]) * cos1_32;\r
693         pp[9] = (p[1] - p[14]) * cos3_32;\r
694         pp[10] = (p[2] - p[13]) * cos5_32;\r
695         pp[11] = (p[3] - p[12]) * cos7_32;\r
696         pp[12] = (p[4] - p[11]) * cos9_32;\r
697         pp[13] = (p[5] - p[10]) * cos11_32;\r
698         pp[14] = (p[6] - p[9]) * cos13_32;\r
699         pp[15] = (p[7] - p[8]) * cos15_32;\r
700 \r
701         p[0] = pp[0] + pp[7];\r
702         p[1] = pp[1] + pp[6];\r
703         p[2] = pp[2] + pp[5];\r
704         p[3] = pp[3] + pp[4];\r
705         p[4] = (pp[0] - pp[7]) * cos1_16;\r
706         p[5] = (pp[1] - pp[6]) * cos3_16;\r
707         p[6] = (pp[2] - pp[5]) * cos5_16;\r
708         p[7] = (pp[3] - pp[4]) * cos7_16;\r
709         p[8] = pp[8] + pp[15];\r
710         p[9] = pp[9] + pp[14];\r
711         p[10] = pp[10] + pp[13];\r
712         p[11] = pp[11] + pp[12];\r
713         p[12] = (pp[8] - pp[15]) * cos1_16;\r
714         p[13] = (pp[9] - pp[14]) * cos3_16;\r
715         p[14] = (pp[10] - pp[13]) * cos5_16;\r
716         p[15] = (pp[11] - pp[12]) * cos7_16;\r
717         \r
718 \r
719         pp[0] = p[0] + p[3];\r
720         pp[1] = p[1] + p[2];\r
721         pp[2] = (p[0] - p[3]) * cos1_8;\r
722         pp[3] = (p[1] - p[2]) * cos3_8;\r
723         pp[4] = p[4] + p[7];\r
724         pp[5] = p[5] + p[6];\r
725         pp[6] = (p[4] - p[7]) * cos1_8;\r
726         pp[7] = (p[5] - p[6]) * cos3_8;\r
727         pp[8] = p[8] + p[11];\r
728         pp[9] = p[9] + p[10];\r
729         pp[10] = (p[8] - p[11]) * cos1_8;\r
730         pp[11] = (p[9] - p[10]) * cos3_8;\r
731         pp[12] = p[12] + p[15];\r
732         pp[13] = p[13] + p[14];\r
733         pp[14] = (p[12] - p[15]) * cos1_8;\r
734         pp[15] = (p[13] - p[14]) * cos3_8;\r
735 \r
736         p[0] = pp[0] + pp[1];\r
737         p[1] = (pp[0] - pp[1]) * cos1_4;\r
738         p[2] = pp[2] + pp[3];\r
739         p[3] = (pp[2] - pp[3]) * cos1_4;\r
740         p[4] = pp[4] + pp[5];\r
741         p[5] = (pp[4] - pp[5]) * cos1_4;\r
742         p[6] = pp[6] + pp[7];\r
743         p[7] = (pp[6] - pp[7]) * cos1_4;\r
744         p[8] = pp[8] + pp[9];\r
745         p[9] = (pp[8] - pp[9]) * cos1_4;\r
746         p[10] = pp[10] + pp[11];\r
747         p[11] = (pp[10] - pp[11]) * cos1_4;\r
748         p[12] = pp[12] + pp[13];\r
749         p[13] = (pp[12] - pp[13]) * cos1_4;\r
750         p[14] = pp[14] + pp[15];\r
751         p[15] = (pp[14] - pp[15]) * cos1_4;\r
752 \r
753         // this is pretty insane coding\r
754         float tmp1;\r
755         new_v[36-17] = -(new_v[4] = (new_v[12] = p[7]) + p[5]) - p[6];\r
756         new_v[44-17] = -p[6] - p[7] - p[4];\r
757         new_v[6] = (new_v[10] = (new_v[14] = p[15]) + p[11]) + p[13];\r
758         new_v[34-17] = -(new_v[2] = p[15] + p[13] + p[9]) - p[14];\r
759         new_v[38-17] = (tmp1 = -p[14] - p[15] - p[10] - p[11]) - p[13];\r
760         new_v[46-17] = -p[14] - p[15] - p[12] - p[8];\r
761         new_v[42-17] = tmp1 - p[12];\r
762         new_v[48-17] = -p[0];\r
763         new_v[0] = p[1];\r
764         new_v[40-17] = -(new_v[8] = p[3]) - p[2];\r
765         \r
766         p[0] = (x1[0] - x1[31]) * cos1_64;\r
767         p[1] = (x1[1] - x1[30]) * cos3_64;\r
768         p[2] = (x1[2] - x1[29]) * cos5_64;\r
769         p[3] = (x1[3] - x1[28]) * cos7_64;\r
770         p[4] = (x1[4] - x1[27]) * cos9_64;\r
771         p[5] = (x1[5] - x1[26]) * cos11_64;\r
772         p[6] = (x1[6] - x1[25]) * cos13_64;\r
773         p[7] = (x1[7] - x1[24]) * cos15_64;\r
774         p[8] = (x1[8] - x1[23]) * cos17_64;\r
775         p[9] = (x1[9] - x1[22]) * cos19_64;\r
776         p[10] = (x1[10] - x1[21]) * cos21_64;\r
777         p[11] = (x1[11] - x1[20]) * cos23_64;\r
778         p[12] = (x1[12] - x1[19]) * cos25_64;\r
779         p[13] = (x1[13] - x1[18]) * cos27_64;\r
780         p[14] = (x1[14] - x1[17]) * cos29_64;\r
781         p[15] = (x1[15] - x1[16]) * cos31_64;\r
782 \r
783         \r
784         pp[0] = p[0] + p[15];\r
785         pp[1] = p[1] + p[14];\r
786         pp[2] = p[2] + p[13];\r
787         pp[3] = p[3] + p[12];\r
788         pp[4] = p[4] + p[11];\r
789         pp[5] = p[5] + p[10];\r
790         pp[6] = p[6] + p[9];\r
791         pp[7] = p[7] + p[8];\r
792         pp[8] = (p[0] - p[15]) * cos1_32;\r
793         pp[9] = (p[1] - p[14]) * cos3_32;\r
794         pp[10] = (p[2] - p[13]) * cos5_32;\r
795         pp[11] = (p[3] - p[12]) * cos7_32;\r
796         pp[12] = (p[4] - p[11]) * cos9_32;\r
797         pp[13] = (p[5] - p[10]) * cos11_32;\r
798         pp[14] = (p[6] - p[9]) * cos13_32;\r
799         pp[15] = (p[7] - p[8]) * cos15_32;\r
800         \r
801 \r
802         p[0] = pp[0] + pp[7];\r
803         p[1] = pp[1] + pp[6];\r
804         p[2] = pp[2] + pp[5];\r
805         p[3] = pp[3] + pp[4];\r
806         p[4] = (pp[0] - pp[7]) * cos1_16;\r
807         p[5] = (pp[1] - pp[6]) * cos3_16;\r
808         p[6] = (pp[2] - pp[5]) * cos5_16;\r
809         p[7] = (pp[3] - pp[4]) * cos7_16;\r
810         p[8] = pp[8] + pp[15];\r
811         p[9] = pp[9] + pp[14];\r
812         p[10] = pp[10] + pp[13];\r
813         p[11] = pp[11] + pp[12];\r
814         p[12] = (pp[8] - pp[15]) * cos1_16;\r
815         p[13] = (pp[9] - pp[14]) * cos3_16;\r
816         p[14] = (pp[10] - pp[13]) * cos5_16;\r
817         p[15] = (pp[11] - pp[12]) * cos7_16;\r
818 \r
819 \r
820         pp[0] = p[0] + p[3];\r
821         pp[1] = p[1] + p[2];\r
822         pp[2] = (p[0] - p[3]) * cos1_8;\r
823         pp[3] = (p[1] - p[2]) * cos3_8;\r
824         pp[4] = p[4] + p[7];\r
825         pp[5] = p[5] + p[6];\r
826         pp[6] = (p[4] - p[7]) * cos1_8;\r
827         pp[7] = (p[5] - p[6]) * cos3_8;\r
828         pp[8] = p[8] + p[11];\r
829         pp[9] = p[9] + p[10];\r
830         pp[10] = (p[8] - p[11]) * cos1_8;\r
831         pp[11] = (p[9] - p[10]) * cos3_8;\r
832         pp[12] = p[12] + p[15];\r
833         pp[13] = p[13] + p[14];\r
834         pp[14] = (p[12] - p[15]) * cos1_8;\r
835         pp[15] = (p[13] - p[14]) * cos3_8;\r
836 \r
837         \r
838         p[0] = pp[0] + pp[1];\r
839         p[1] = (pp[0] - pp[1]) * cos1_4;\r
840         p[2] = pp[2] + pp[3];\r
841         p[3] = (pp[2] - pp[3]) * cos1_4;\r
842         p[4] = pp[4] + pp[5];\r
843         p[5] = (pp[4] - pp[5]) * cos1_4;\r
844         p[6] = pp[6] + pp[7];\r
845         p[7] = (pp[6] - pp[7]) * cos1_4;\r
846         p[8] = pp[8] + pp[9];\r
847         p[9] = (pp[8] - pp[9]) * cos1_4;\r
848         p[10] = pp[10] + pp[11];\r
849         p[11] = (pp[10] - pp[11]) * cos1_4;\r
850         p[12] = pp[12] + pp[13];\r
851         p[13] = (pp[12] - pp[13]) * cos1_4;\r
852         p[14] = pp[14] + pp[15];\r
853         p[15] = (pp[14] - pp[15]) * cos1_4;\r
854         \r
855 \r
856         // manually doing something that a compiler should handle sucks\r
857         // coding like this is hard to read\r
858         float tmp2;\r
859         new_v[5] = (new_v[11] = (new_v[13] = (new_v[15] = p[15]) + p[7]) + p[11])\r
860                                                         + p[5] + p[13];\r
861         new_v[7] = (new_v[9] = p[15] + p[11] + p[3]) + p[13];\r
862         new_v[33-17] = -(new_v[1] = (tmp1 = p[13] + p[15] + p[9]) + p[1]) - p[14];\r
863         new_v[35-17] = -(new_v[3] = tmp1 + p[5] + p[7]) - p[6] - p[14];\r
864 \r
865         new_v[39-17] = (tmp1 = -p[10] - p[11] - p[14] - p[15])\r
866                                                                         - p[13] - p[2] - p[3];\r
867         new_v[37-17] = tmp1 - p[13] - p[5] - p[6] - p[7];\r
868         new_v[41-17] = tmp1 - p[12] - p[2] - p[3];\r
869         new_v[43-17] = tmp1 - p[12] - (tmp2 = p[4] + p[6] + p[7]);\r
870         new_v[47-17] = (tmp1 = -p[8] - p[12] - p[14] - p[15]) - p[0];\r
871         new_v[45-17] = tmp1 - tmp2;\r
872 \r
873         // insert V[0-15] (== new_v[0-15]) into actual v:\r
874         x1 = new_v;\r
875         // float[] x2 = actual_v + actual_write_pos;\r
876         float[] dest = actual_v;\r
877         \r
878         dest[0 + actual_write_pos] = x1[0];\r
879         dest[16 + actual_write_pos] = x1[1];\r
880         dest[32 + actual_write_pos] = x1[2];\r
881         dest[48 + actual_write_pos] = x1[3];\r
882         dest[64 + actual_write_pos] = x1[4];\r
883         dest[80 + actual_write_pos] = x1[5];\r
884         dest[96 + actual_write_pos] = x1[6];\r
885         dest[112 + actual_write_pos] = x1[7];\r
886         dest[128 + actual_write_pos] = x1[8];\r
887         dest[144 + actual_write_pos] = x1[9];\r
888         dest[160 + actual_write_pos] = x1[10];\r
889         dest[176 + actual_write_pos] = x1[11];\r
890         dest[192 + actual_write_pos] = x1[12];\r
891         dest[208 + actual_write_pos] = x1[13];\r
892         dest[224 + actual_write_pos] = x1[14];\r
893         dest[240 + actual_write_pos] = x1[15];\r
894 \r
895         // V[16] is always 0.0:\r
896         dest[256 + actual_write_pos] = 0.0f;\r
897 \r
898         // insert V[17-31] (== -new_v[15-1]) into actual v:\r
899         dest[272 + actual_write_pos] = -x1[15];\r
900         dest[288 + actual_write_pos] = -x1[14];\r
901         dest[304 + actual_write_pos] = -x1[13];\r
902         dest[320 + actual_write_pos] = -x1[12];\r
903         dest[336 + actual_write_pos] = -x1[11];\r
904         dest[352 + actual_write_pos] = -x1[10];\r
905         dest[368 + actual_write_pos] = -x1[9];\r
906         dest[384 + actual_write_pos] = -x1[8];\r
907         dest[400 + actual_write_pos] = -x1[7];\r
908         dest[416 + actual_write_pos] = -x1[6];\r
909         dest[432 + actual_write_pos] = -x1[5];\r
910         dest[448 + actual_write_pos] = -x1[4];\r
911         dest[464 + actual_write_pos] = -x1[3];\r
912         dest[480 + actual_write_pos] = -x1[2];\r
913         dest[496 + actual_write_pos] = -x1[1];\r
914 \r
915         // insert V[32] (== -new_v[0]) into other v:\r
916         \r
917   }\r
918 \r
919   /**\r
920    * Compute PCM Samples.\r
921    */\r
922   \r
923   @LOC("TMP") private float[] _tmpOut = new float[32];\r
924   \r
925   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
926   private void compute_pcm_samples0(@LOC("THIS") Obuffer buffer)\r
927   {\r
928       //final float[] vp = actual_v;  //subbed in variable name instead to reduce areas \r
929         //int inc = v_inc;\r
930         //final float[] tmpOut = _tmpOut; //subbed in variable name instread to reduce areas\r
931          @LOC("DVP") int dvp =0;\r
932         \r
933                         // fat chance of having this loop unroll\r
934                 for(@LOC("I") int i=0; i<32; i++)\r
935                 {\r
936                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
937                 //final float[] dp = d16[i]; //subbed in variable name instead to reduce areas\r
938                 pcm_sample = (float)(((actual_v[0 + dvp] * d16[i][0]) +\r
939                         (actual_v[15 + dvp] * d16[i][1]) +\r
940                         (actual_v[14 + dvp] * d16[i][2]) +\r
941                         (actual_v[13 + dvp] * d16[i][3]) +\r
942                         (actual_v[12 + dvp] * d16[i][4]) +\r
943                         (actual_v[11 + dvp] * d16[i][5]) +\r
944                         (actual_v[10 + dvp] * d16[i][6]) +\r
945                         (actual_v[9 + dvp] * d16[i][7]) +\r
946                         (actual_v[8 + dvp] * d16[i][8]) +\r
947                         (actual_v[7 + dvp] * d16[i][9]) +\r
948                         (actual_v[6 + dvp] * d16[i][10]) +\r
949                         (actual_v[5 + dvp] * d16[i][11]) +\r
950                         (actual_v[4 + dvp] * d16[i][12]) +\r
951                         (actual_v[3 + dvp] * d16[i][13]) +\r
952                         (actual_v[2 + dvp] * d16[i][14]) +\r
953                         (actual_v[1 + dvp] * d16[i][15])\r
954                         ) * scalefactor);\r
955 \r
956             _tmpOut[i] = pcm_sample;\r
957                         \r
958                         dvp += 16;\r
959         } // for\r
960   }\r
961   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
962   private void compute_pcm_samples1(@LOC("THIS") Obuffer buffer)\r
963   {\r
964       //final float[] vp = actual_v;    \r
965         //int inc = v_inc;\r
966         //final float[] tmpOut = _tmpOut;\r
967          @LOC("DVP") int dvp =0;\r
968         \r
969                         // fat chance of having this loop unroll\r
970                         for(@LOC("I") int i=0; i<32; i++)\r
971                         {\r
972                             //final float[] dp = d16[i];\r
973                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
974 \r
975                                 pcm_sample = (float)(((actual_v[1 + dvp] * d16[i][0]) +\r
976                                                       (actual_v[0 + dvp] * d16[i][1]) +\r
977                                         (actual_v[15 + dvp] * d16[i][2]) +\r
978                                         (actual_v[14 + dvp] * d16[i][3]) +\r
979                                         (actual_v[13 + dvp] * d16[i][4]) +\r
980                                         (actual_v[12 + dvp] * d16[i][5]) +\r
981                                         (actual_v[11 + dvp] * d16[i][6]) +\r
982                                         (actual_v[10 + dvp] * d16[i][7]) +\r
983                                         (actual_v[9 + dvp] * d16[i][8]) +\r
984                                         (actual_v[8 + dvp] * d16[i][9]) +\r
985                                         (actual_v[7 + dvp] * d16[i][10]) +\r
986                                         (actual_v[6 + dvp] * d16[i][11]) +\r
987                                         (actual_v[5 + dvp] * d16[i][12]) +\r
988                                         (actual_v[4 + dvp] * d16[i][13]) +\r
989                                         (actual_v[3 + dvp] * d16[i][14]) +\r
990                                         (actual_v[2 + dvp] * d16[i][15])\r
991                                         ) * scalefactor);\r
992 \r
993             _tmpOut[i] = pcm_sample;\r
994 //                      actual_v\r
995                         dvp += 16;\r
996          } // for\r
997   }\r
998   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
999   private void compute_pcm_samples2(@LOC("THIS") Obuffer buffer)\r
1000   {\r
1001       //final float[] vp = actual_v;\r
1002         \r
1003         //int inc = v_inc;\r
1004         //final float[] tmpOut = _tmpOut;\r
1005          @LOC("DVP") int dvp =0;\r
1006         \r
1007                         // fat chance of having this loop unroll\r
1008                         for(@LOC("I") int i=0; i<32; i++)\r
1009                         {\r
1010                             //final float[] dp = d16[i];\r
1011                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1012 \r
1013                                 pcm_sample = (float)(((actual_v[2 + dvp] * d16[i][0]) +\r
1014                                         (actual_v[1 + dvp] * d16[i][1]) +\r
1015                                         (actual_v[0 + dvp] * d16[i][2]) +\r
1016                                         (actual_v[15 + dvp] * d16[i][3]) +\r
1017                                         (actual_v[14 + dvp] * d16[i][4]) +\r
1018                                         (actual_v[13 + dvp] * d16[i][5]) +\r
1019                                         (actual_v[12 + dvp] * d16[i][6]) +\r
1020                                         (actual_v[11 + dvp] * d16[i][7]) +\r
1021                                         (actual_v[10 + dvp] * d16[i][8]) +\r
1022                                         (actual_v[9 + dvp] * d16[i][9]) +\r
1023                                         (actual_v[8 + dvp] * d16[i][10]) +\r
1024                                         (actual_v[7 + dvp] * d16[i][11]) +\r
1025                                         (actual_v[6 + dvp] * d16[i][12]) +\r
1026                                         (actual_v[5 + dvp] * d16[i][13]) +\r
1027                                         (actual_v[4 + dvp] * d16[i][14]) +\r
1028                                         (actual_v[3 + dvp] * d16[i][15])\r
1029                                         ) * scalefactor);\r
1030 \r
1031             _tmpOut[i] = pcm_sample;\r
1032                         \r
1033                         dvp += 16;\r
1034                         } // for\r
1035   }\r
1036   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")       \r
1037   private void compute_pcm_samples3(@LOC("THIS") Obuffer buffer)\r
1038   {\r
1039       //final float[] vp = actual_v;\r
1040         \r
1041         int idx = 0;\r
1042         //int inc = v_inc;\r
1043         //final float[] tmpOut = _tmpOut;\r
1044          @LOC("DVP") int dvp =0;\r
1045         \r
1046                         // fat chance of having this loop unroll\r
1047                         for(@LOC("I") int i=0; i<32; i++)\r
1048                         {\r
1049                             //final float[] dp = d16[i];\r
1050                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1051 \r
1052                                 pcm_sample = (float) ( ( (actual_v[3 + dvp] * d16[i][0]) +\r
1053                                         (actual_v[2 + dvp] * d16[i][1]) +\r
1054                                         (actual_v[1 + dvp] * d16[i][2]) +\r
1055                                         (actual_v[0 + dvp] * d16[i][3]) +\r
1056                                         (actual_v[15 + dvp] * d16[i][4]) +\r
1057                                         (actual_v[14 + dvp] * d16[i][5]) +\r
1058                                         (actual_v[13 + dvp] * d16[i][6]) +\r
1059                                         (actual_v[12 + dvp] * d16[i][7]) +\r
1060                                         (actual_v[11 + dvp] * d16[i][8]) +\r
1061                                         (actual_v[10 + dvp] * d16[i][9]) +\r
1062                                         (actual_v[9 + dvp] * d16[i][10]) +\r
1063                                         (actual_v[8 + dvp] * d16[i][11]) +\r
1064                                         (actual_v[7 + dvp] * d16[i][12]) +\r
1065                                         (actual_v[6 + dvp] * d16[i][13]) +\r
1066                                         (actual_v[5 + dvp] * d16[i][14]) +\r
1067                                         (actual_v[4 + dvp] * d16[i][15])\r
1068                                         ) * scalefactor);\r
1069 \r
1070             _tmpOut[i] = pcm_sample;\r
1071                         \r
1072                         dvp += 16;\r
1073                         } // for\r
1074   }\r
1075   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")                       \r
1076   private void compute_pcm_samples4(@LOC("THIS") Obuffer buffer)\r
1077   {\r
1078       //final float[] vp = actual_v;\r
1079         \r
1080         //int inc = v_inc;\r
1081         //final float[] tmpOut = _tmpOut;\r
1082          @LOC("DVP") int dvp =0;\r
1083         \r
1084                         // fat chance of having this loop unroll\r
1085                         for(@LOC("I") int i=0; i<32; i++)\r
1086                         {\r
1087                             //final float[] dp = d16[i];\r
1088                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1089 \r
1090                                 pcm_sample = (float)(((actual_v[4 + dvp] * d16[i][0]) +\r
1091                                         (actual_v[3 + dvp] * d16[i][1]) +\r
1092                                         (actual_v[2 + dvp] * d16[i][2]) +\r
1093                                         (actual_v[1 + dvp] * d16[i][3]) +\r
1094                                         (actual_v[0 + dvp] * d16[i][4]) +\r
1095                                         (actual_v[15 + dvp] * d16[i][5]) +\r
1096                                         (actual_v[14 + dvp] * d16[i][6]) +\r
1097                                         (actual_v[13 + dvp] * d16[i][7]) +\r
1098                                         (actual_v[12 + dvp] * d16[i][8]) +\r
1099                                         (actual_v[11 + dvp] * d16[i][9]) +\r
1100                                         (actual_v[10 + dvp] * d16[i][10]) +\r
1101                                         (actual_v[9 + dvp] * d16[i][11]) +\r
1102                                         (actual_v[8 + dvp] * d16[i][12]) +\r
1103                                         (actual_v[7 + dvp] * d16[i][13]) +\r
1104                                         (actual_v[6 + dvp] * d16[i][14]) +\r
1105                                         (actual_v[5 + dvp] * d16[i][15])\r
1106                                         ) * scalefactor);\r
1107 \r
1108             _tmpOut[i] = pcm_sample;\r
1109                         \r
1110                         dvp += 16;\r
1111                         } // for\r
1112   }\r
1113   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1114   private void compute_pcm_samples5(@LOC("THIS") Obuffer buffer)\r
1115   {\r
1116       //final float[] vp = actual_v;\r
1117         \r
1118         //int inc = v_inc;\r
1119         //final float[] tmpOut = _tmpOut;\r
1120          @LOC("DVP") int dvp =0;\r
1121         \r
1122                         // fat chance of having this loop unroll\r
1123                         for(@LOC("I") int i=0; i<32; i++)\r
1124                         {\r
1125                             //  final float[] dp = d16[i];\r
1126                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1127 \r
1128                                 pcm_sample = (float)(((actual_v[5 + dvp] * d16[i][0]) +\r
1129                                         (actual_v[4 + dvp] * d16[i][1]) +\r
1130                                         (actual_v[3 + dvp] * d16[i][2]) +\r
1131                                         (actual_v[2 + dvp] * d16[i][3]) +\r
1132                                         (actual_v[1 + dvp] * d16[i][4]) +\r
1133                                         (actual_v[0 + dvp] * d16[i][5]) +\r
1134                                         (actual_v[15 + dvp] * d16[i][6]) +\r
1135                                         (actual_v[14 + dvp] * d16[i][7]) +\r
1136                                         (actual_v[13 + dvp] * d16[i][8]) +\r
1137                                         (actual_v[12 + dvp] * d16[i][9]) +\r
1138                                         (actual_v[11 + dvp] * d16[i][10]) +\r
1139                                         (actual_v[10 + dvp] * d16[i][11]) +\r
1140                                         (actual_v[9 + dvp] * d16[i][12]) +\r
1141                                         (actual_v[8 + dvp] * d16[i][13]) +\r
1142                                         (actual_v[7 + dvp] * d16[i][14]) +\r
1143                                         (actual_v[6 + dvp] * d16[i][15])\r
1144                                         ) * scalefactor);\r
1145 \r
1146             _tmpOut[i] = pcm_sample;\r
1147                         \r
1148                         dvp += 16;\r
1149                         } // for\r
1150   }\r
1151   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1152   private void compute_pcm_samples6(@LOC("THIS") Obuffer buffer)\r
1153   {\r
1154       //final float[] vp = actual_v;    \r
1155         //int inc = v_inc;\r
1156         //final float[] tmpOut = _tmpOut;\r
1157          @LOC("DVP") int dvp =0;\r
1158         \r
1159                         // fat chance of having this loop unroll\r
1160                         for(@LOC("I") int i=0; i<32; i++)\r
1161                         {\r
1162                             //final float[] dp = d16[i];\r
1163                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1164 \r
1165                                 pcm_sample = (float)(((actual_v[6 + dvp] * d16[i][0]) +\r
1166                                         (actual_v[5 + dvp] * d16[i][1]) +\r
1167                                         (actual_v[4 + dvp] * d16[i][2]) +\r
1168                                         (actual_v[3 + dvp] * d16[i][3]) +\r
1169                                         (actual_v[2 + dvp] * d16[i][4]) +\r
1170                                         (actual_v[1 + dvp] * d16[i][5]) +\r
1171                                         (actual_v[0 + dvp] * d16[i][6]) +\r
1172                                         (actual_v[15 + dvp] * d16[i][7]) +\r
1173                                         (actual_v[14 + dvp] * d16[i][8]) +\r
1174                                         (actual_v[13 + dvp] * d16[i][9]) +\r
1175                                         (actual_v[12 + dvp] * d16[i][10]) +\r
1176                                         (actual_v[11 + dvp] * d16[i][11]) +\r
1177                                         (actual_v[10 + dvp] * d16[i][12]) +\r
1178                                         (actual_v[9 + dvp] * d16[i][13]) +\r
1179                                         (actual_v[8 + dvp] * d16[i][14]) +\r
1180                                         (actual_v[7 + dvp] * d16[i][15])\r
1181                                         ) * scalefactor);\r
1182 \r
1183             _tmpOut[i] = pcm_sample;\r
1184                         \r
1185                         dvp += 16;\r
1186                         } // for\r
1187   }\r
1188   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1189   private void compute_pcm_samples7(@LOC("THIS") Obuffer buffer)\r
1190   {\r
1191       //final float[] vp = actual_v;\r
1192         \r
1193         //int inc = v_inc;\r
1194         //final float[] tmpOut = _tmpOut;\r
1195          @LOC("DVP") int dvp =0;\r
1196         \r
1197                         // fat chance of having this loop unroll\r
1198                         for(@LOC("I") int i=0; i<32; i++)\r
1199                         {\r
1200                             //final float[] dp = d16[i];\r
1201                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1202 \r
1203                                 pcm_sample = (float)(((actual_v[7 + dvp] * d16[i][0]) +\r
1204                                         (actual_v[6 + dvp] * d16[i][1]) +\r
1205                                         (actual_v[5 + dvp] * d16[i][2]) +\r
1206                                         (actual_v[4 + dvp] * d16[i][3]) +\r
1207                                         (actual_v[3 + dvp] * d16[i][4]) +\r
1208                                         (actual_v[2 + dvp] * d16[i][5]) +\r
1209                                         (actual_v[1 + dvp] * d16[i][6]) +\r
1210                                         (actual_v[0 + dvp] * d16[i][7]) +\r
1211                                         (actual_v[15 + dvp] * d16[i][8]) +\r
1212                                         (actual_v[14 + dvp] * d16[i][9]) +\r
1213                                         (actual_v[13 + dvp] * d16[i][10]) +\r
1214                                         (actual_v[12 + dvp] * d16[i][11]) +\r
1215                                         (actual_v[11 + dvp] * d16[i][12]) +\r
1216                                         (actual_v[10 + dvp] * d16[i][13]) +\r
1217                                         (actual_v[9 + dvp] * d16[i][14]) +\r
1218                                         (actual_v[8 + dvp] * d16[i][15])\r
1219                                         ) * scalefactor);\r
1220 \r
1221             _tmpOut[i] = pcm_sample;\r
1222                         \r
1223                         dvp += 16;\r
1224                         } // for\r
1225   }\r
1226   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1227   private void compute_pcm_samples8(@LOC("THIS") Obuffer buffer)\r
1228   {\r
1229       //final float[] vp = actual_v;\r
1230         \r
1231         //int inc = v_inc;\r
1232         //final float[] tmpOut = _tmpOut;\r
1233          @LOC("DVP") int dvp =0;\r
1234         \r
1235                         // fat chance of having this loop unroll\r
1236                         for(@LOC("I") int i=0; i<32; i++)\r
1237                         {\r
1238                             //final float[] dp = d16[i];\r
1239                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1240 \r
1241                                 pcm_sample = (float)(((actual_v[8 + dvp] * d16[i][0]) +\r
1242                                         (actual_v[7 + dvp] * d16[i][1]) +\r
1243                                         (actual_v[6 + dvp] * d16[i][2]) +\r
1244                                         (actual_v[5 + dvp] * d16[i][3]) +\r
1245                                         (actual_v[4 + dvp] * d16[i][4]) +\r
1246                                         (actual_v[3 + dvp] * d16[i][5]) +\r
1247                                         (actual_v[2 + dvp] * d16[i][6]) +\r
1248                                         (actual_v[1 + dvp] * d16[i][7]) +\r
1249                                         (actual_v[0 + dvp] * d16[i][8]) +\r
1250                                         (actual_v[15 + dvp] * d16[i][9]) +\r
1251                                         (actual_v[14 + dvp] * d16[i][10]) +\r
1252                                         (actual_v[13 + dvp] * d16[i][11]) +\r
1253                                         (actual_v[12 + dvp] * d16[i][12]) +\r
1254                                         (actual_v[11 + dvp] * d16[i][13]) +\r
1255                                         (actual_v[10 + dvp] * d16[i][14]) +\r
1256                                         (actual_v[9 + dvp] * d16[i][15])\r
1257                                         ) * scalefactor);\r
1258 \r
1259             _tmpOut[i] = pcm_sample;\r
1260                         \r
1261                         dvp += 16;\r
1262                         } // for\r
1263   }\r
1264   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1265   private void compute_pcm_samples9(@LOC("THIS") Obuffer buffer)\r
1266   {\r
1267       //final float[] vp = actual_v;\r
1268         \r
1269         //int inc = v_inc;\r
1270         //final float[] tmpOut = _tmpOut;\r
1271          @LOC("DVP") int dvp =0;\r
1272         \r
1273                         // fat chance of having this loop unroll\r
1274                         for(@LOC("I") int i=0; i<32; i++)\r
1275                         {\r
1276                             //final float[] dp = d16[i];\r
1277                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1278 \r
1279                                 pcm_sample = (float)(((actual_v[9 + dvp] * d16[i][0]) +\r
1280                                         (actual_v[8 + dvp] * d16[i][1]) +\r
1281                                         (actual_v[7 + dvp] * d16[i][2]) +\r
1282                                         (actual_v[6 + dvp] * d16[i][3]) +\r
1283                                         (actual_v[5 + dvp] * d16[i][4]) +\r
1284                                         (actual_v[4 + dvp] * d16[i][5]) +\r
1285                                         (actual_v[3 + dvp] * d16[i][6]) +\r
1286                                         (actual_v[2 + dvp] * d16[i][7]) +\r
1287                                         (actual_v[1 + dvp] * d16[i][8]) +\r
1288                                         (actual_v[0 + dvp] * d16[i][9]) +\r
1289                                         (actual_v[15 + dvp] * d16[i][10]) +\r
1290                                         (actual_v[14 + dvp] * d16[i][11]) +\r
1291                                         (actual_v[13 + dvp] * d16[i][12]) +\r
1292                                         (actual_v[12 + dvp] * d16[i][13]) +\r
1293                                         (actual_v[11 + dvp] * d16[i][14]) +\r
1294                                         (actual_v[10 + dvp] * d16[i][15])\r
1295                                         ) * scalefactor);\r
1296 \r
1297             _tmpOut[i] = pcm_sample;\r
1298                         \r
1299                         dvp += 16;\r
1300                         } // for\r
1301   }\r
1302   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1303   private void compute_pcm_samples10(@LOC("THIS") Obuffer buffer)\r
1304   {\r
1305       //final float[] vp = actual_v;    \r
1306         //int inc = v_inc;\r
1307         //final float[] tmpOut = _tmpOut;\r
1308          @LOC("DVP") int dvp =0;\r
1309         \r
1310                         // fat chance of having this loop unroll\r
1311                         for(@LOC("I") int i=0; i<32; i++)\r
1312                         {\r
1313                             //final float[] dp = d16[i];\r
1314                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1315 \r
1316                                 pcm_sample = (float)(((actual_v[10 + dvp] * d16[i][0]) +\r
1317                                         (actual_v[9 + dvp] * d16[i][1]) +\r
1318                                         (actual_v[8 + dvp] * d16[i][2]) +\r
1319                                         (actual_v[7 + dvp] * d16[i][3]) +\r
1320                                         (actual_v[6 + dvp] * d16[i][4]) +\r
1321                                         (actual_v[5 + dvp] * d16[i][5]) +\r
1322                                         (actual_v[4 + dvp] * d16[i][6]) +\r
1323                                         (actual_v[3 + dvp] * d16[i][7]) +\r
1324                                         (actual_v[2 + dvp] * d16[i][8]) +\r
1325                                         (actual_v[1 + dvp] * d16[i][9]) +\r
1326                                         (actual_v[0 + dvp] * d16[i][10]) +\r
1327                                         (actual_v[15 + dvp] * d16[i][11]) +\r
1328                                         (actual_v[14 + dvp] * d16[i][12]) +\r
1329                                         (actual_v[13 + dvp] * d16[i][13]) +\r
1330                                         (actual_v[12 + dvp] * d16[i][14]) +\r
1331                                         (actual_v[11 + dvp] * d16[i][15])\r
1332                                         ) * scalefactor);\r
1333 \r
1334             _tmpOut[i] = pcm_sample;\r
1335                         \r
1336                         dvp += 16;\r
1337                         } // for\r
1338   }\r
1339   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1340   private void compute_pcm_samples11(@LOC("THIS") Obuffer buffer)\r
1341   {\r
1342       //final float[] vp = actual_v;\r
1343         \r
1344         //int inc = v_inc;\r
1345         //final float[] tmpOut = _tmpOut;\r
1346          @LOC("DVP") int dvp =0;\r
1347         \r
1348                         // fat chance of having this loop unroll\r
1349                         for(@LOC("I") int i=0; i<32; i++)\r
1350                         {\r
1351                             //final float[] dp = d16[i];\r
1352                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1353 \r
1354                                 pcm_sample = (float)(((actual_v[11 + dvp] * d16[i][0]) +\r
1355                                         (actual_v[10 + dvp] * d16[i][1]) +\r
1356                                         (actual_v[9 + dvp] * d16[i][2]) +\r
1357                                         (actual_v[8 + dvp] * d16[i][3]) +\r
1358                                         (actual_v[7 + dvp] * d16[i][4]) +\r
1359                                         (actual_v[6 + dvp] * d16[i][5]) +\r
1360                                         (actual_v[5 + dvp] * d16[i][6]) +\r
1361                                         (actual_v[4 + dvp] * d16[i][7]) +\r
1362                                         (actual_v[3 + dvp] * d16[i][8]) +\r
1363                                         (actual_v[2 + dvp] * d16[i][9]) +\r
1364                                         (actual_v[1 + dvp] * d16[i][10]) +\r
1365                                         (actual_v[0 + dvp] * d16[i][11]) +\r
1366                                         (actual_v[15 + dvp] * d16[i][12]) +\r
1367                                         (actual_v[14 + dvp] * d16[i][13]) +\r
1368                                         (actual_v[13 + dvp] * d16[i][14]) +\r
1369                                         (actual_v[12 + dvp] * d16[i][15])\r
1370                                         ) * scalefactor);\r
1371 \r
1372             _tmpOut[i] = pcm_sample;\r
1373                         \r
1374                         dvp += 16;\r
1375                         } // for\r
1376   }\r
1377   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1378   private void compute_pcm_samples12(@LOC("THIS") Obuffer buffer)\r
1379   {\r
1380       //final float[] vp = actual_v;    \r
1381         //int inc = v_inc;\r
1382         //final float[] tmpOut = _tmpOut;\r
1383          @LOC("DVP") int dvp =0;\r
1384         \r
1385                         // fat chance of having this loop unroll\r
1386                         for(@LOC("I") int i=0; i<32; i++)\r
1387                         {\r
1388                             //final float[] dp = d16[i];\r
1389                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1390 \r
1391                                 pcm_sample = (float)(((actual_v[12 + dvp] * d16[i][0]) +\r
1392                                         (actual_v[11 + dvp] * d16[i][1]) +\r
1393                                         (actual_v[10 + dvp] * d16[i][2]) +\r
1394                                         (actual_v[9 + dvp] * d16[i][3]) +\r
1395                                         (actual_v[8 + dvp] * d16[i][4]) +\r
1396                                         (actual_v[7 + dvp] * d16[i][5]) +\r
1397                                         (actual_v[6 + dvp] * d16[i][6]) +\r
1398                                         (actual_v[5 + dvp] * d16[i][7]) +\r
1399                                         (actual_v[4 + dvp] * d16[i][8]) +\r
1400                                         (actual_v[3 + dvp] * d16[i][9]) +\r
1401                                         (actual_v[2 + dvp] * d16[i][10]) +\r
1402                                         (actual_v[1 + dvp] * d16[i][11]) +\r
1403                                         (actual_v[0 + dvp] * d16[i][12]) +\r
1404                                         (actual_v[15 + dvp] * d16[i][13]) +\r
1405                                         (actual_v[14 + dvp] * d16[i][14]) +\r
1406                                         (actual_v[13 + dvp] * d16[i][15])\r
1407                                         ) * scalefactor);\r
1408 \r
1409             _tmpOut[i] = pcm_sample;\r
1410                         \r
1411                         dvp += 16;\r
1412                         } // for\r
1413   }\r
1414   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1415   private void compute_pcm_samples13(@LOC("THIS") Obuffer buffer)\r
1416   {\r
1417       //final float[] vp = actual_v;\r
1418         \r
1419         //int inc = v_inc;\r
1420         //final float[] tmpOut = _tmpOut;\r
1421          @LOC("DVP") int dvp =0;\r
1422         \r
1423                         // fat chance of having this loop unroll\r
1424                         for(@LOC("I") int i=0; i<32; i++)\r
1425                         {\r
1426                             //final float[] dp = d16[i];\r
1427                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1428 \r
1429                                 pcm_sample = (float)(((actual_v[13 + dvp] * d16[i][0]) +\r
1430                                         (actual_v[12 + dvp] * d16[i][1]) +\r
1431                                         (actual_v[11 + dvp] * d16[i][2]) +\r
1432                                         (actual_v[10 + dvp] * d16[i][3]) +\r
1433                                         (actual_v[9 + dvp] * d16[i][4]) +\r
1434                                         (actual_v[8 + dvp] * d16[i][5]) +\r
1435                                         (actual_v[7 + dvp] * d16[i][6]) +\r
1436                                         (actual_v[6 + dvp] * d16[i][7]) +\r
1437                                         (actual_v[5 + dvp] * d16[i][8]) +\r
1438                                         (actual_v[4 + dvp] * d16[i][9]) +\r
1439                                         (actual_v[3 + dvp] * d16[i][10]) +\r
1440                                         (actual_v[2 + dvp] * d16[i][11]) +\r
1441                                         (actual_v[1 + dvp] * d16[i][12]) +\r
1442                                         (actual_v[0 + dvp] * d16[i][13]) +\r
1443                                         (actual_v[15 + dvp] * d16[i][14]) +\r
1444                                         (actual_v[14 + dvp] * d16[i][15])\r
1445                                         ) * scalefactor);\r
1446 \r
1447             _tmpOut[i] = pcm_sample;\r
1448                         \r
1449                         dvp += 16;\r
1450                         } // for\r
1451   }\r
1452   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1453   private void compute_pcm_samples14(@LOC("THIS") Obuffer buffer)\r
1454   {\r
1455       //final float[] vp = actual_v;\r
1456         \r
1457         //int inc = v_inc;\r
1458         //final float[] tmpOut = _tmpOut;\r
1459          @LOC("DVP") int dvp =0;\r
1460         \r
1461                         // fat chance of having this loop unroll\r
1462                         for(@LOC("I") int i=0; i<32; i++)\r
1463                         {\r
1464                             //final float[] dp = d16[i];\r
1465                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1466 \r
1467                                 pcm_sample = (float)(((actual_v[14 + dvp] * d16[i][0]) +\r
1468                                         (actual_v[13 + dvp] * d16[i][1]) +\r
1469                                         (actual_v[12 + dvp] * d16[i][2]) +\r
1470                                         (actual_v[11 + dvp] * d16[i][3]) +\r
1471                                         (actual_v[10 + dvp] * d16[i][4]) +\r
1472                                         (actual_v[9 + dvp] * d16[i][5]) +\r
1473                                         (actual_v[8 + dvp] * d16[i][6]) +\r
1474                                         (actual_v[7 + dvp] * d16[i][7]) +\r
1475                                         (actual_v[6 + dvp] * d16[i][8]) +\r
1476                                         (actual_v[5 + dvp] * d16[i][9]) +\r
1477                                         (actual_v[4 + dvp] * d16[i][10]) +\r
1478                                         (actual_v[3 + dvp] * d16[i][11]) +\r
1479                                         (actual_v[2 + dvp] * d16[i][12]) +\r
1480                                         (actual_v[1 + dvp] * d16[i][13]) +\r
1481                                         (actual_v[0 + dvp] * d16[i][14]) +\r
1482                                         (actual_v[15 + dvp] * d16[i][15])\r
1483                                         ) * scalefactor);\r
1484 \r
1485             _tmpOut[i] = pcm_sample;\r
1486                         \r
1487                         dvp += 16;\r
1488                         } // for\r
1489   }\r
1490   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1491   private void compute_pcm_samples15(@LOC("THIS") Obuffer buffer)\r
1492   {\r
1493       //final float[] vp = actual_v;\r
1494                 \r
1495         //int inc = v_inc;\r
1496         //final float[] tmpOut = _tmpOut;\r
1497       @LOC("DVP") int dvp =0;\r
1498         \r
1499                         // fat chance of having this loop unroll\r
1500                         for(@LOC("I") int i=0; i<32; i++)\r
1501                         {\r
1502                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1503                                 //final float dp[] = d16[i];\r
1504                                 pcm_sample = (float)(((actual_v[15 + dvp] * d16[i][0]) +\r
1505                                         (actual_v[14 + dvp] * d16[i][1]) +\r
1506                                         (actual_v[13 + dvp] * d16[i][2]) +\r
1507                                         (actual_v[12 + dvp] * d16[i][3]) +\r
1508                                         (actual_v[11 + dvp] * d16[i][4]) +\r
1509                                         (actual_v[10 + dvp] * d16[i][5]) +\r
1510                                         (actual_v[9 + dvp] * d16[i][6]) +\r
1511                                         (actual_v[8 + dvp] * d16[i][7]) +\r
1512                                         (actual_v[7 + dvp] * d16[i][8]) +\r
1513                                         (actual_v[6 + dvp] * d16[i][9]) +\r
1514                                         (actual_v[5 + dvp] * d16[i][10]) +\r
1515                                         (actual_v[4 + dvp] * d16[i][11]) +\r
1516                                         (actual_v[3 + dvp] * d16[i][12]) +\r
1517                                         (actual_v[2 + dvp] * d16[i][13]) +\r
1518                                         (actual_v[1 + dvp] * d16[i][14]) +\r
1519                                         (actual_v[0 + dvp] * d16[i][15])\r
1520                                         ) * scalefactor);\r
1521 \r
1522             _tmpOut[i] = pcm_sample;                    \r
1523                         dvp += 16;\r
1524                         } // for\r
1525                 }\r
1526                                  \r
1527 private void compute_pcm_samples(@LOC("GLOBAL") Obuffer buffer)\r
1528 {\r
1529         \r
1530         switch (actual_write_pos)\r
1531         {\r
1532         case 0: \r
1533                 compute_pcm_samples0(buffer);\r
1534                 break;\r
1535         case 1: \r
1536                 compute_pcm_samples1(buffer);\r
1537                 break;\r
1538         case 2: \r
1539                 compute_pcm_samples2(buffer);\r
1540                 break;\r
1541         case 3: \r
1542                 compute_pcm_samples3(buffer);\r
1543                 break;\r
1544         case 4: \r
1545                 compute_pcm_samples4(buffer);\r
1546                 break;\r
1547         case 5: \r
1548                 compute_pcm_samples5(buffer);\r
1549                 break;\r
1550         case 6: \r
1551                 compute_pcm_samples6(buffer);\r
1552                 break;\r
1553         case 7: \r
1554                 compute_pcm_samples7(buffer);\r
1555                 break;\r
1556         case 8: \r
1557                 compute_pcm_samples8(buffer);\r
1558                 break;\r
1559         case 9: \r
1560                 compute_pcm_samples9(buffer);\r
1561                 break;\r
1562         case 10: \r
1563                 compute_pcm_samples10(buffer);\r
1564                 break;\r
1565         case 11: \r
1566                 compute_pcm_samples11(buffer);\r
1567                 break;\r
1568         case 12: \r
1569                 compute_pcm_samples12(buffer);\r
1570                 break;\r
1571         case 13: \r
1572                 compute_pcm_samples13(buffer);\r
1573                 break;\r
1574         case 14: \r
1575                 compute_pcm_samples14(buffer);\r
1576                 break;\r
1577         case 15: \r
1578                 compute_pcm_samples15(buffer);\r
1579                 break;\r
1580         }\r
1581                 \r
1582         if (buffer!=null)\r
1583         {               \r
1584                 buffer.appendSamples(channel, _tmpOut);\r
1585         }\r
1586          \r
1587 /*\r
1588          // MDM: I was considering putting in quality control for\r
1589          // low-spec CPUs, but the performance gain (about 10-15%) \r
1590          // did not justify the considerable drop in audio quality.\r
1591                 switch (inc)\r
1592                 {\r
1593                 case 16:                 \r
1594                     buffer.appendSamples(channel, tmpOut);\r
1595                     break;\r
1596                 case 32:\r
1597                         for (int i=0; i<16; i++)\r
1598                         {\r
1599                                 buffer.append(channel, (short)tmpOut[i]);\r
1600                                 buffer.append(channel, (short)tmpOut[i]); \r
1601                         }\r
1602                         break;                  \r
1603                 case 64:\r
1604                         for (int i=0; i<8; i++)\r
1605                         {\r
1606                                 buffer.append(channel, (short)tmpOut[i]);\r
1607                                 buffer.append(channel, (short)tmpOut[i]);\r
1608                                 buffer.append(channel, (short)tmpOut[i]);\r
1609                                 buffer.append(channel, (short)tmpOut[i]); \r
1610                         }\r
1611                         break;                  \r
1612         \r
1613                 }\r
1614 */       \r
1615   }\r
1616 \r
1617   /**\r
1618    * Calculate 32 PCM samples and put the into the Obuffer-object.\r
1619    */\r
1620   \r
1621   @LATTICE("V<THIS,THIS<SH,SH*,THISLOC=THIS")   \r
1622   public void calculate_pcm_samples(@LOC("V") Obuffer buffer)\r
1623   {\r
1624         compute_new_v();        \r
1625         compute_pcm_samples(buffer);\r
1626     \r
1627         actual_write_pos = (actual_write_pos + 1) & 0xf;\r
1628         actual_v = (actual_v == v1) ? v2 : v1;\r
1629 \r
1630         // initialize samples[]:        \r
1631     //for (register float *floatp = samples + 32; floatp > samples; )\r
1632         // *--floatp = 0.0f;  \r
1633         \r
1634         // MDM: this may not be necessary. The Layer III decoder always\r
1635         // outputs 32 subband samples, but I haven't checked layer I & II.\r
1636         for (@LOC("SH") int p=0;p<32;p++) \r
1637                 samples[p] = 0.0f;\r
1638   }\r
1639   \r
1640   \r
1641   @LOC("EQ") private static final double MY_PI = 3.14159265358979323846;\r
1642   @LOC("SA") private static final float cos1_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 64.0)));\r
1643   @LOC("SA") private static final float cos3_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 64.0)));\r
1644   @LOC("SA") private static final float cos5_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 64.0)));\r
1645   @LOC("SA") private static final float cos7_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 64.0)));\r
1646   @LOC("SA") private static final float cos9_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0  / 64.0)));\r
1647   @LOC("SA") private static final float cos11_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 64.0)));\r
1648   @LOC("SA") private static final float cos13_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 64.0)));\r
1649   @LOC("SA") private static final float cos15_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 64.0)));\r
1650   @LOC("SA") private static final float cos17_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 17.0 / 64.0)));\r
1651   @LOC("SA") private static final float cos19_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 19.0 / 64.0)));\r
1652   @LOC("SA") private static final float cos21_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 21.0 / 64.0)));\r
1653   @LOC("SA") private static final float cos23_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 23.0 / 64.0)));\r
1654   @LOC("SA") private static final float cos25_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 25.0 / 64.0)));\r
1655   @LOC("SA") private static final float cos27_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 27.0 / 64.0)));\r
1656   @LOC("SA") private static final float cos29_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 29.0 / 64.0)));\r
1657   @LOC("SA") private static final float cos31_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 31.0 / 64.0)));\r
1658   @LOC("SA") private static final float cos1_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 32.0)));\r
1659   @LOC("SA") private static final float cos3_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 32.0)));\r
1660   @LOC("SA") private static final float cos5_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 32.0)));\r
1661   @LOC("SA") private static final float cos7_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 32.0)));\r
1662   @LOC("SA") private static final float cos9_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0  / 32.0)));\r
1663   @LOC("SA") private static final float cos11_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 32.0)));\r
1664   @LOC("SA") private static final float cos13_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 32.0)));\r
1665   @LOC("SA") private static final float cos15_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 32.0)));\r
1666   @LOC("SA") private static final float cos1_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 16.0)));\r
1667   @LOC("SA") private static final float cos3_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 16.0)));\r
1668   @LOC("SA") private static final float cos5_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 16.0)));\r
1669   @LOC("SA") private static final float cos7_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 16.0)));\r
1670   @LOC("SA") private static final float cos1_8   =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 8.0)));\r
1671   @LOC("SA") private static final float cos3_8   =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 8.0)));\r
1672   @LOC("SA") private static final float cos1_4   =(float) (1.0 / (2.0 * Math.cos(MY_PI / 4.0)));\r
1673   \r
1674   // Note: These values are not in the same order\r
1675   // as in Annex 3-B.3 of the ISO/IEC DIS 11172-3 \r
1676   // private float d[] = {0.000000000, -4.000442505};\r
1677   \r
1678   @LOC("V2") private static float d[] = null;\r
1679   \r
1680   /** \r
1681    * d[] split into subarrays of length 16. This provides for\r
1682    * more faster access by allowing a block of 16 to be addressed\r
1683    * with constant offset. \r
1684    **/\r
1685   @LOC("V2") private static float d16[][] = null;       \r
1686   \r
1687   /**\r
1688    * Loads the data for the d[] from the resource SFd.ser. \r
1689    * @return the loaded values for d[].\r
1690    */\r
1691         static private float[] load_d()\r
1692         {\r
1693                 try\r
1694                 {\r
1695 //                      Class elemType = Float.TYPE;\r
1696 //                      Object o = JavaLayerUtils.deserializeArrayResource("sfd.ser", elemType, 512);\r
1697 //                   Object o = JavaLayerUtils.deserializeArrayResource("sfd.ser",  512);\r
1698                   \r
1699       float[] sfd =\r
1700           { 0.0f, -4.42505E-4f, 0.003250122f, -0.007003784f, 0.031082153f, -0.07862854f,\r
1701               0.10031128f, -0.57203674f, 1.144989f, 0.57203674f, 0.10031128f, 0.07862854f,\r
1702               0.031082153f, 0.007003784f, 0.003250122f, 4.42505E-4f, -1.5259E-5f, -4.73022E-4f,\r
1703               0.003326416f, -0.007919312f, 0.030517578f, -0.08418274f, 0.090927124f, -0.6002197f,\r
1704               1.1442871f, 0.54382324f, 0.1088562f, 0.07305908f, 0.03147888f, 0.006118774f,\r
1705               0.003173828f, 3.96729E-4f, -1.5259E-5f, -5.34058E-4f, 0.003387451f, -0.008865356f,\r
1706               0.029785156f, -0.08970642f, 0.08068848f, -0.6282959f, 1.1422119f, 0.51560974f,\r
1707               0.11657715f, 0.06752014f, 0.03173828f, 0.0052948f, 0.003082275f, 3.66211E-4f,\r
1708               -1.5259E-5f, -5.79834E-4f, 0.003433228f, -0.009841919f, 0.028884888f, -0.09516907f,\r
1709               0.06959534f, -0.6562195f, 1.1387634f, 0.48747253f, 0.12347412f, 0.06199646f,\r
1710               0.031845093f, 0.004486084f, 0.002990723f, 3.20435E-4f, -1.5259E-5f, -6.2561E-4f,\r
1711               0.003463745f, -0.010848999f, 0.027801514f, -0.10054016f, 0.057617188f, -0.6839142f,\r
1712               1.1339264f, 0.45947266f, 0.12957764f, 0.056533813f, 0.031814575f, 0.003723145f,\r
1713               0.00289917f, 2.89917E-4f, -1.5259E-5f, -6.86646E-4f, 0.003479004f, -0.011886597f,\r
1714               0.026535034f, -0.1058197f, 0.044784546f, -0.71131897f, 1.1277466f, 0.43165588f,\r
1715               0.1348877f, 0.051132202f, 0.031661987f, 0.003005981f, 0.002792358f, 2.59399E-4f,\r
1716               -1.5259E-5f, -7.47681E-4f, 0.003479004f, -0.012939453f, 0.02508545f, -0.110946655f,\r
1717               0.031082153f, -0.7383728f, 1.120224f, 0.40408325f, 0.13945007f, 0.045837402f,\r
1718               0.03138733f, 0.002334595f, 0.002685547f, 2.44141E-4f, -3.0518E-5f, -8.08716E-4f,\r
1719               0.003463745f, -0.014022827f, 0.023422241f, -0.11592102f, 0.01651001f, -0.7650299f,\r
1720               1.1113739f, 0.37680054f, 0.14326477f, 0.040634155f, 0.03100586f, 0.001693726f,\r
1721               0.002578735f, 2.13623E-4f, -3.0518E-5f, -8.8501E-4f, 0.003417969f, -0.01512146f,\r
1722               0.021575928f, -0.12069702f, 0.001068115f, -0.791214f, 1.1012115f, 0.34986877f,\r
1723               0.1463623f, 0.03555298f, 0.030532837f, 0.001098633f, 0.002456665f, 1.98364E-4f,\r
1724               -3.0518E-5f, -9.61304E-4f, 0.003372192f, -0.016235352f, 0.01953125f, -0.1252594f,\r
1725               -0.015228271f, -0.816864f, 1.0897827f, 0.32331848f, 0.1487732f, 0.03060913f,\r
1726               0.029937744f, 5.49316E-4f, 0.002349854f, 1.67847E-4f, -3.0518E-5f, -0.001037598f,\r
1727               0.00328064f, -0.017349243f, 0.01725769f, -0.12956238f, -0.03237915f, -0.84194946f,\r
1728               1.0771179f, 0.2972107f, 0.15049744f, 0.025817871f, 0.029281616f, 3.0518E-5f,\r
1729               0.002243042f, 1.52588E-4f, -4.5776E-5f, -0.001113892f, 0.003173828f, -0.018463135f,\r
1730               0.014801025f, -0.1335907f, -0.050354004f, -0.8663635f, 1.0632172f, 0.2715912f,\r
1731               0.15159607f, 0.0211792f, 0.028533936f, -4.42505E-4f, 0.002120972f, 1.37329E-4f,\r
1732               -4.5776E-5f, -0.001205444f, 0.003051758f, -0.019577026f, 0.012115479f, -0.13729858f,\r
1733               -0.06916809f, -0.89009094f, 1.0481567f, 0.24650574f, 0.15206909f, 0.016708374f,\r
1734               0.02772522f, -8.69751E-4f, 0.00201416f, 1.2207E-4f, -6.1035E-5f, -0.001296997f,\r
1735               0.002883911f, -0.020690918f, 0.009231567f, -0.14067078f, -0.088775635f, -0.9130554f,\r
1736               1.0319366f, 0.22198486f, 0.15196228f, 0.012420654f, 0.02684021f, -0.001266479f,\r
1737               0.001907349f, 1.06812E-4f, -6.1035E-5f, -0.00138855f, 0.002700806f, -0.02178955f,\r
1738               0.006134033f, -0.14367676f, -0.10916138f, -0.9351959f, 1.0146179f, 0.19805908f,\r
1739               0.15130615f, 0.00831604f, 0.025909424f, -0.001617432f, 0.001785278f, 1.06812E-4f,\r
1740               -7.6294E-5f, -0.001480103f, 0.002487183f, -0.022857666f, 0.002822876f, -0.1462555f,\r
1741               -0.13031006f, -0.95648193f, 0.99624634f, 0.17478943f, 0.15011597f, 0.004394531f,\r
1742               0.024932861f, -0.001937866f, 0.001693726f, 9.1553E-5f, -7.6294E-5f, -0.001586914f,\r
1743               0.002227783f, -0.023910522f, -6.86646E-4f, -0.14842224f, -0.15220642f, -0.9768524f,\r
1744               0.9768524f, 0.15220642f, 0.14842224f, 6.86646E-4f, 0.023910522f, -0.002227783f,\r
1745               0.001586914f, 7.6294E-5f, -9.1553E-5f, -0.001693726f, 0.001937866f, -0.024932861f,\r
1746               -0.004394531f, -0.15011597f, -0.17478943f, -0.99624634f, 0.95648193f, 0.13031006f,\r
1747               0.1462555f, -0.002822876f, 0.022857666f, -0.002487183f, 0.001480103f, 7.6294E-5f,\r
1748               -1.06812E-4f, -0.001785278f, 0.001617432f, -0.025909424f, -0.00831604f, -0.15130615f,\r
1749               -0.19805908f, -1.0146179f, 0.9351959f, 0.10916138f, 0.14367676f, -0.006134033f,\r
1750               0.02178955f, -0.002700806f, 0.00138855f, 6.1035E-5f, -1.06812E-4f, -0.001907349f,\r
1751               0.001266479f, -0.02684021f, -0.012420654f, -0.15196228f, -0.22198486f, -1.0319366f,\r
1752               0.9130554f, 0.088775635f, 0.14067078f, -0.009231567f, 0.020690918f, -0.002883911f,\r
1753               0.001296997f, 6.1035E-5f, -1.2207E-4f, -0.00201416f, 8.69751E-4f, -0.02772522f,\r
1754               -0.016708374f, -0.15206909f, -0.24650574f, -1.0481567f, 0.89009094f, 0.06916809f,\r
1755               0.13729858f, -0.012115479f, 0.019577026f, -0.003051758f, 0.001205444f, 4.5776E-5f,\r
1756               -1.37329E-4f, -0.002120972f, 4.42505E-4f, -0.028533936f, -0.0211792f, -0.15159607f,\r
1757               -0.2715912f, -1.0632172f, 0.8663635f, 0.050354004f, 0.1335907f, -0.014801025f,\r
1758               0.018463135f, -0.003173828f, 0.001113892f, 4.5776E-5f, -1.52588E-4f, -0.002243042f,\r
1759               -3.0518E-5f, -0.029281616f, -0.025817871f, -0.15049744f, -0.2972107f, -1.0771179f,\r
1760               0.84194946f, 0.03237915f, 0.12956238f, -0.01725769f, 0.017349243f, -0.00328064f,\r
1761               0.001037598f, 3.0518E-5f, -1.67847E-4f, -0.002349854f, -5.49316E-4f, -0.029937744f,\r
1762               -0.03060913f, -0.1487732f, -0.32331848f, -1.0897827f, 0.816864f, 0.015228271f,\r
1763               0.1252594f, -0.01953125f, 0.016235352f, -0.003372192f, 9.61304E-4f, 3.0518E-5f,\r
1764               -1.98364E-4f, -0.002456665f, -0.001098633f, -0.030532837f, -0.03555298f, -0.1463623f,\r
1765               -0.34986877f, -1.1012115f, 0.791214f, -0.001068115f, 0.12069702f, -0.021575928f,\r
1766               0.01512146f, -0.003417969f, 8.8501E-4f, 3.0518E-5f, -2.13623E-4f, -0.002578735f,\r
1767               -0.001693726f, -0.03100586f, -0.040634155f, -0.14326477f, -0.37680054f, -1.1113739f,\r
1768               0.7650299f, -0.01651001f, 0.11592102f, -0.023422241f, 0.014022827f, -0.003463745f,\r
1769               8.08716E-4f, 3.0518E-5f, -2.44141E-4f, -0.002685547f, -0.002334595f, -0.03138733f,\r
1770               -0.045837402f, -0.13945007f, -0.40408325f, -1.120224f, 0.7383728f, -0.031082153f,\r
1771               0.110946655f, -0.02508545f, 0.012939453f, -0.003479004f, 7.47681E-4f, 1.5259E-5f,\r
1772               -2.59399E-4f, -0.002792358f, -0.003005981f, -0.031661987f, -0.051132202f,\r
1773               -0.1348877f, -0.43165588f, -1.1277466f, 0.71131897f, -0.044784546f, 0.1058197f,\r
1774               -0.026535034f, 0.011886597f, -0.003479004f, 6.86646E-4f, 1.5259E-5f, -2.89917E-4f,\r
1775               -0.00289917f, -0.003723145f, -0.031814575f, -0.056533813f, -0.12957764f,\r
1776               -0.45947266f, -1.1339264f, 0.6839142f, -0.057617188f, 0.10054016f, -0.027801514f,\r
1777               0.010848999f, -0.003463745f, 6.2561E-4f, 1.5259E-5f, -3.20435E-4f, -0.002990723f,\r
1778               -0.004486084f, -0.031845093f, -0.06199646f, -0.12347412f, -0.48747253f, -1.1387634f,\r
1779               0.6562195f, -0.06959534f, 0.09516907f, -0.028884888f, 0.009841919f, -0.003433228f,\r
1780               5.79834E-4f, 1.5259E-5f, -3.66211E-4f, -0.003082275f, -0.0052948f, -0.03173828f,\r
1781               -0.06752014f, -0.11657715f, -0.51560974f, -1.1422119f, 0.6282959f, -0.08068848f,\r
1782               0.08970642f, -0.029785156f, 0.008865356f, -0.003387451f, 5.34058E-4f, 1.5259E-5f,\r
1783               -3.96729E-4f, -0.003173828f, -0.006118774f, -0.03147888f, -0.07305908f, -0.1088562f,\r
1784               -0.54382324f, -1.1442871f, 0.6002197f, -0.090927124f, 0.08418274f, -0.030517578f,\r
1785               0.007919312f, -0.003326416f, 4.73022E-4f, 1.5259E-5f };\r
1786       \r
1787       return sfd;\r
1788                 }\r
1789 //              catch (IOException ex)\r
1790                 catch (Exception ex)\r
1791                 {\r
1792                         throw new ExceptionInInitializerError(ex);\r
1793                 }               \r
1794         }\r
1795         \r
1796         /**\r
1797          * Converts a 1D array into a number of smaller arrays. This is used\r
1798          * to achieve offset + constant indexing into an array. Each sub-array\r
1799          * represents a block of values of the original array. \r
1800          * @param array                 The array to split up into blocks.\r
1801          * @param blockSize             The size of the blocks to split the array\r
1802          *                                              into. This must be an exact divisor of\r
1803          *                                              the length of the array, or some data\r
1804          *                                              will be lost from the main array.\r
1805          * \r
1806          * @return      An array of arrays in which each element in the returned\r
1807          *                      array will be of length <code>blockSize</code>.\r
1808          */\r
1809         static private float[][] splitArray(final float[] array, final int blockSize)\r
1810         {\r
1811                 int size = array.length / blockSize;\r
1812                 float[][] split = new float[size][];\r
1813                 for (int i=0; i<size; i++)\r
1814                 {\r
1815                         split[i] = subArray(array, i*blockSize, blockSize);\r
1816                 }\r
1817                 return split;\r
1818         }\r
1819         \r
1820         /**\r
1821          * Returns a subarray of an existing array.\r
1822          * \r
1823          * @param array The array to retrieve a subarra from.\r
1824          * @param offs  The offset in the array that corresponds to\r
1825          *                              the first index of the subarray.\r
1826          * @param len   The number of indeces in the subarray.\r
1827          * @return The subarray, which may be of length 0.\r
1828          */\r
1829         static private float[] subArray(final float[] array, final int offs, int len)\r
1830         {\r
1831                 if (offs+len > array.length)\r
1832                 {\r
1833                         len = array.length-offs;\r
1834                 }\r
1835                 \r
1836                 if (len < 0)\r
1837                         len = 0;\r
1838                 \r
1839                 float[] subarray = new float[len];\r
1840                 for (int i=0; i<len; i++)\r
1841                 {\r
1842                         subarray[i] = array[offs+i];\r
1843                 }\r
1844                 \r
1845                 return subarray;\r
1846         }\r
1847         \r
1848         // The original data for d[]. This data is loaded from a file\r
1849         // to reduce the overall package size and to improve performance. \r
1850 /*  \r
1851   static final float d_data[] = {\r
1852         0.000000000f, -0.000442505f,  0.003250122f, -0.007003784f,\r
1853         0.031082153f, -0.078628540f,  0.100311279f, -0.572036743f,\r
1854         1.144989014f,  0.572036743f,  0.100311279f,  0.078628540f,\r
1855         0.031082153f,  0.007003784f,  0.003250122f,  0.000442505f,\r
1856    -0.000015259f, -0.000473022f,  0.003326416f, -0.007919312f,\r
1857         0.030517578f, -0.084182739f,  0.090927124f, -0.600219727f,\r
1858         1.144287109f,  0.543823242f,  0.108856201f,  0.073059082f,\r
1859         0.031478882f,  0.006118774f,  0.003173828f,  0.000396729f,\r
1860    -0.000015259f, -0.000534058f,  0.003387451f, -0.008865356f,\r
1861         0.029785156f, -0.089706421f,  0.080688477f, -0.628295898f,\r
1862         1.142211914f,  0.515609741f,  0.116577148f,  0.067520142f,\r
1863     0.031738281f,  0.005294800f,  0.003082275f,  0.000366211f,\r
1864    -0.000015259f, -0.000579834f,  0.003433228f, -0.009841919f,\r
1865     0.028884888f, -0.095169067f,  0.069595337f, -0.656219482f,\r
1866         1.138763428f,  0.487472534f,  0.123474121f,  0.061996460f,\r
1867     0.031845093f,  0.004486084f,  0.002990723f,  0.000320435f,\r
1868    -0.000015259f, -0.000625610f,  0.003463745f, -0.010848999f,\r
1869     0.027801514f, -0.100540161f,  0.057617188f, -0.683914185f,\r
1870         1.133926392f,  0.459472656f,  0.129577637f,  0.056533813f,\r
1871         0.031814575f,  0.003723145f,  0.002899170f,  0.000289917f,\r
1872    -0.000015259f, -0.000686646f,  0.003479004f, -0.011886597f,\r
1873         0.026535034f, -0.105819702f,  0.044784546f, -0.711318970f,\r
1874         1.127746582f,  0.431655884f,  0.134887695f,  0.051132202f,\r
1875         0.031661987f,  0.003005981f,  0.002792358f,  0.000259399f,\r
1876    -0.000015259f, -0.000747681f,  0.003479004f, -0.012939453f,\r
1877         0.025085449f, -0.110946655f,  0.031082153f, -0.738372803f,\r
1878     1.120223999f,  0.404083252f,  0.139450073f,  0.045837402f,\r
1879     0.031387329f,  0.002334595f,  0.002685547f,  0.000244141f,\r
1880    -0.000030518f, -0.000808716f,  0.003463745f, -0.014022827f,\r
1881     0.023422241f, -0.115921021f,  0.016510010f, -0.765029907f,\r
1882         1.111373901f,  0.376800537f,  0.143264771f,  0.040634155f,\r
1883     0.031005859f,  0.001693726f,  0.002578735f,  0.000213623f,\r
1884    -0.000030518f, -0.000885010f,  0.003417969f, -0.015121460f,\r
1885         0.021575928f, -0.120697021f,  0.001068115f, -0.791213989f,\r
1886     1.101211548f,  0.349868774f,  0.146362305f,  0.035552979f,\r
1887         0.030532837f,  0.001098633f,  0.002456665f,  0.000198364f,\r
1888    -0.000030518f, -0.000961304f,  0.003372192f, -0.016235352f,\r
1889     0.019531250f, -0.125259399f, -0.015228271f, -0.816864014f,\r
1890         1.089782715f,  0.323318481f,  0.148773193f,  0.030609131f,\r
1891         0.029937744f,  0.000549316f,  0.002349854f,  0.000167847f,\r
1892    -0.000030518f, -0.001037598f,  0.003280640f, -0.017349243f,\r
1893         0.017257690f, -0.129562378f, -0.032379150f, -0.841949463f,\r
1894     1.077117920f,  0.297210693f,  0.150497437f,  0.025817871f,\r
1895     0.029281616f,  0.000030518f,  0.002243042f,  0.000152588f,\r
1896    -0.000045776f, -0.001113892f,  0.003173828f, -0.018463135f,\r
1897         0.014801025f, -0.133590698f, -0.050354004f, -0.866363525f,\r
1898         1.063217163f,  0.271591187f,  0.151596069f,  0.021179199f,\r
1899         0.028533936f, -0.000442505f,  0.002120972f,  0.000137329f,\r
1900    -0.000045776f, -0.001205444f,  0.003051758f, -0.019577026f,\r
1901         0.012115479f, -0.137298584f, -0.069168091f, -0.890090942f,\r
1902         1.048156738f,  0.246505737f,  0.152069092f,  0.016708374f,\r
1903         0.027725220f, -0.000869751f,  0.002014160f,  0.000122070f,\r
1904    -0.000061035f, -0.001296997f,  0.002883911f, -0.020690918f,\r
1905     0.009231567f, -0.140670776f, -0.088775635f, -0.913055420f,\r
1906         1.031936646f,  0.221984863f,  0.151962280f,  0.012420654f,\r
1907     0.026840210f, -0.001266479f,  0.001907349f,  0.000106812f,\r
1908    -0.000061035f, -0.001388550f,  0.002700806f, -0.021789551f,\r
1909         0.006134033f, -0.143676758f, -0.109161377f, -0.935195923f,\r
1910     1.014617920f,  0.198059082f,  0.151306152f,  0.008316040f,\r
1911         0.025909424f, -0.001617432f,  0.001785278f,  0.000106812f,\r
1912    -0.000076294f, -0.001480103f,  0.002487183f, -0.022857666f,\r
1913         0.002822876f, -0.146255493f, -0.130310059f, -0.956481934f,\r
1914         0.996246338f,  0.174789429f,  0.150115967f,  0.004394531f,\r
1915     0.024932861f, -0.001937866f,  0.001693726f,  0.000091553f,\r
1916    -0.000076294f, -0.001586914f,  0.002227783f, -0.023910522f,\r
1917    -0.000686646f, -0.148422241f, -0.152206421f, -0.976852417f,\r
1918     0.976852417f,  0.152206421f,  0.148422241f,  0.000686646f,\r
1919         0.023910522f, -0.002227783f,  0.001586914f,  0.000076294f,\r
1920    -0.000091553f, -0.001693726f,  0.001937866f, -0.024932861f,\r
1921    -0.004394531f, -0.150115967f, -0.174789429f, -0.996246338f,\r
1922     0.956481934f,  0.130310059f,  0.146255493f, -0.002822876f,\r
1923     0.022857666f, -0.002487183f,  0.001480103f,  0.000076294f,\r
1924    -0.000106812f, -0.001785278f,  0.001617432f, -0.025909424f,\r
1925    -0.008316040f, -0.151306152f, -0.198059082f, -1.014617920f,\r
1926     0.935195923f,  0.109161377f,  0.143676758f, -0.006134033f,\r
1927     0.021789551f, -0.002700806f,  0.001388550f,  0.000061035f,\r
1928    -0.000106812f, -0.001907349f,  0.001266479f, -0.026840210f,\r
1929    -0.012420654f, -0.151962280f, -0.221984863f, -1.031936646f,\r
1930         0.913055420f,  0.088775635f,  0.140670776f, -0.009231567f,\r
1931         0.020690918f, -0.002883911f,  0.001296997f,  0.000061035f,\r
1932    -0.000122070f, -0.002014160f,  0.000869751f, -0.027725220f,\r
1933    -0.016708374f, -0.152069092f, -0.246505737f, -1.048156738f,\r
1934     0.890090942f,  0.069168091f,  0.137298584f, -0.012115479f,\r
1935         0.019577026f, -0.003051758f,  0.001205444f,  0.000045776f,\r
1936    -0.000137329f, -0.002120972f,  0.000442505f, -0.028533936f,\r
1937    -0.021179199f, -0.151596069f, -0.271591187f, -1.063217163f,\r
1938     0.866363525f,  0.050354004f,  0.133590698f, -0.014801025f,\r
1939     0.018463135f, -0.003173828f,  0.001113892f,  0.000045776f,\r
1940    -0.000152588f, -0.002243042f, -0.000030518f, -0.029281616f,\r
1941    -0.025817871f, -0.150497437f, -0.297210693f, -1.077117920f,\r
1942         0.841949463f,  0.032379150f,  0.129562378f, -0.017257690f,\r
1943         0.017349243f, -0.003280640f,  0.001037598f,  0.000030518f,\r
1944    -0.000167847f, -0.002349854f, -0.000549316f, -0.029937744f,\r
1945    -0.030609131f, -0.148773193f, -0.323318481f, -1.089782715f,\r
1946         0.816864014f,  0.015228271f,  0.125259399f, -0.019531250f,\r
1947     0.016235352f, -0.003372192f,  0.000961304f,  0.000030518f,\r
1948    -0.000198364f, -0.002456665f, -0.001098633f, -0.030532837f,\r
1949    -0.035552979f, -0.146362305f, -0.349868774f, -1.101211548f,\r
1950         0.791213989f, -0.001068115f,  0.120697021f, -0.021575928f,\r
1951         0.015121460f, -0.003417969f,  0.000885010f,  0.000030518f,\r
1952    -0.000213623f, -0.002578735f, -0.001693726f, -0.031005859f,\r
1953    -0.040634155f, -0.143264771f, -0.376800537f, -1.111373901f,\r
1954     0.765029907f, -0.016510010f,  0.115921021f, -0.023422241f,\r
1955     0.014022827f, -0.003463745f,  0.000808716f,  0.000030518f,\r
1956    -0.000244141f, -0.002685547f, -0.002334595f, -0.031387329f,\r
1957    -0.045837402f, -0.139450073f, -0.404083252f, -1.120223999f,\r
1958     0.738372803f, -0.031082153f,  0.110946655f, -0.025085449f,\r
1959         0.012939453f, -0.003479004f,  0.000747681f,  0.000015259f,\r
1960    -0.000259399f, -0.002792358f, -0.003005981f, -0.031661987f,\r
1961    -0.051132202f, -0.134887695f, -0.431655884f, -1.127746582f,\r
1962         0.711318970f, -0.044784546f,  0.105819702f, -0.026535034f,\r
1963     0.011886597f, -0.003479004f,  0.000686646f,  0.000015259f,\r
1964    -0.000289917f, -0.002899170f, -0.003723145f, -0.031814575f,\r
1965    -0.056533813f, -0.129577637f, -0.459472656f, -1.133926392f,\r
1966     0.683914185f, -0.057617188f,  0.100540161f, -0.027801514f,\r
1967         0.010848999f, -0.003463745f,  0.000625610f,  0.000015259f,\r
1968    -0.000320435f, -0.002990723f, -0.004486084f, -0.031845093f,\r
1969    -0.061996460f, -0.123474121f, -0.487472534f, -1.138763428f,\r
1970         0.656219482f, -0.069595337f,  0.095169067f, -0.028884888f,\r
1971         0.009841919f, -0.003433228f,  0.000579834f,  0.000015259f,\r
1972    -0.000366211f, -0.003082275f, -0.005294800f, -0.031738281f,\r
1973    -0.067520142f, -0.116577148f, -0.515609741f, -1.142211914f,\r
1974         0.628295898f, -0.080688477f,  0.089706421f, -0.029785156f,\r
1975         0.008865356f, -0.003387451f,  0.000534058f,  0.000015259f,\r
1976    -0.000396729f, -0.003173828f, -0.006118774f, -0.031478882f,\r
1977    -0.073059082f, -0.108856201f, -0.543823242f, -1.144287109f,\r
1978         0.600219727f, -0.090927124f,  0.084182739f, -0.030517578f,\r
1979         0.007919312f, -0.003326416f,  0.000473022f,  0.000015259f\r
1980         };\r
1981   */\r
1982   \r
1983 }\r