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