changes: major revision on SynthesisFilter of mp3decoder since we do not allow aliases.
[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       d16 = splitArray(d, 16);\r
75           \r
76           v1 = new float[512];\r
77          v2 = new float[512];\r
78          samples = new float[32];\r
79      channel = channelnumber;\r
80          scalefactor = factor;\r
81          setEQ(eq);      \r
82          //setQuality(HIGH_QUALITY);\r
83          \r
84      reset();\r
85   }\r
86   \r
87   public void setEQ(float[] eq0)\r
88   {\r
89          this.eq = eq0;  \r
90          if (eq==null)\r
91          {\r
92                  eq = new float[32];\r
93                  for (int i=0; i<32; i++)\r
94                          eq[i] = 1.0f;\r
95          }\r
96          if (eq.length<32)\r
97          {\r
98                 throw new IllegalArgumentException("eq0");       \r
99          }\r
100           \r
101   }\r
102   \r
103         /*\r
104         private void setQuality(int quality0)\r
105         {\r
106                 switch (quality0)\r
107                 {               \r
108                 case HIGH_QUALITY:\r
109                 case MEDIUM_QUALITY:\r
110                 case LOW_QUALITY:                                                 \r
111                         v_inc = 16 * quality0;                  \r
112                         quality = quality0;\r
113                         break;  \r
114                 default :\r
115                         throw new IllegalArgumentException("Unknown quality value");\r
116                 }                               \r
117         }\r
118         \r
119         public int getQuality()\r
120         {\r
121                 return quality; \r
122         }\r
123         */\r
124   \r
125   /**\r
126    * Reset the synthesis filter.\r
127    */\r
128   public void reset()\r
129   {\r
130      //float[] floatp;\r
131          // float[] floatp2;\r
132 \r
133      // initialize v1[] and v2[]:\r
134      //for (floatp = v1 + 512, floatp2 = v2 + 512; floatp > v1; )\r
135          //   *--floatp = *--floatp2 = 0.0;\r
136          for (int p=0;p<512;p++) \r
137                  v1[p] = v2[p] = 0.0f;\r
138 \r
139      // initialize samples[]:\r
140      //for (floatp = samples + 32; floatp > samples; )\r
141          //  *--floatp = 0.0;\r
142          for (int p2=0;p2<32;p2++) \r
143                  samples[p2] = 0.0f;\r
144 \r
145 //     actual_v = v1;\r
146      actual_write_pos = 15;\r
147   }\r
148 \r
149 \r
150   /**\r
151    * Inject Sample.\r
152    */\r
153     public void input_sample(@LOC("V") float sample, @LOC("V") int subbandnumber)\r
154   {                               \r
155           samples[subbandnumber] = eq[subbandnumber]*sample;\r
156   }\r
157 \r
158   @LATTICE("TH<IN,IN<C,C*,THISLOC=TH")\r
159   public void input_samples(@LOC("IN") float[] s)\r
160   {\r
161           for (@LOC("C") int i=31; i>=0; i--)\r
162           {             \r
163                  samples[i] = s[i]*eq[i];\r
164           }\r
165   }\r
166   \r
167   /**\r
168    * Compute new values via a fast cosine transform.\r
169    */\r
170   private void compute_new_v()\r
171   {\r
172     // p is fully initialized from x1\r
173     //float[] p = _p;\r
174     // pp is fully initialized from p\r
175     //float[] pp = _pp; \r
176 \r
177     //float[] new_v = _new_v;\r
178 \r
179     //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
180     //float[] p = new float[16];\r
181     //float[] pp = new float[16];\r
182 \r
183     /*\r
184          for (int i=31; i>=0; i--)\r
185          {\r
186                  new_v[i] = 0.0f;\r
187          }\r
188      */\r
189 \r
190     @LOC("IN,SynthesisFilter.L4") float new_v0;\r
191     @LOC("IN,SynthesisFilter.L2") float new_v1;\r
192     @LOC("IN,SynthesisFilter.L4") float new_v2;\r
193     @LOC("IN,SynthesisFilter.L2") float new_v3;\r
194     @LOC("IN,SynthesisFilter.L3") float new_v4;\r
195     @LOC("IN,SynthesisFilter.L4") float new_v5;\r
196     @LOC("IN,SynthesisFilter.L2") float new_v6;\r
197     @LOC("IN,SynthesisFilter.L3") float new_v7;\r
198     @LOC("IN,SynthesisFilter.L4") float new_v8;\r
199     @LOC("IN,SynthesisFilter.L4") float new_v9;\r
200     @LOC("IN,SynthesisFilter.L3") float new_v10;\r
201     @LOC("IN,SynthesisFilter.L2") float new_v11;\r
202     @LOC("IN,SynthesisFilter.L4") float new_v12;\r
203     @LOC("IN,SynthesisFilter.L3") float new_v13;\r
204     @LOC("IN,SynthesisFilter.L4") float new_v14;\r
205     @LOC("IN,SynthesisFilter.L4") float new_v15;\r
206     @LOC("IN,SynthesisFilter.L1") float new_v16;\r
207     @LOC("IN,SynthesisFilter.L3") float new_v17;\r
208     @LOC("IN,SynthesisFilter.L1") float new_v18;\r
209     @LOC("IN,SynthesisFilter.L2") float new_v19;\r
210     @LOC("IN,SynthesisFilter.L2") float new_v20;\r
211     @LOC("IN,SynthesisFilter.L2") float new_v21;\r
212     @LOC("IN,SynthesisFilter.L2") float new_v22;\r
213     @LOC("IN,SynthesisFilter.L3") float new_v23;\r
214     @LOC("IN,SynthesisFilter.L2") float new_v24;\r
215     @LOC("IN,SynthesisFilter.L2") float new_v25;\r
216     @LOC("IN,SynthesisFilter.L2") float new_v26;\r
217     @LOC("IN,SynthesisFilter.L4") float new_v27;\r
218     @LOC("IN,SynthesisFilter.L2") float new_v28;\r
219     @LOC("IN,SynthesisFilter.L4") float new_v29;\r
220     @LOC("IN,SynthesisFilter.L2") float new_v30;\r
221     @LOC("IN,SynthesisFilter.L4") float new_v31;\r
222 \r
223     new_v0 = new_v1 = new_v2 = new_v3 = new_v4 = new_v5 = new_v6 = new_v7 = new_v8 = new_v9 = \r
224       new_v10 = new_v11 = new_v12 = new_v13 = new_v14 = new_v15 = new_v16 = new_v17 = new_v18 = new_v19 = \r
225         new_v20 = new_v21 = new_v22 = new_v23 = new_v24 = new_v25 = new_v26 = new_v27 = new_v28 = new_v29 = \r
226           new_v30 = new_v31 = 0.0f;\r
227 \r
228 \r
229     //  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
230     //  float[] p = new float[16];\r
231     //  float[] pp = new float[16];\r
232 \r
233     //float[] s = samples; // subbed in samples directly below to reduce uneccesary areas\r
234 \r
235     @LOC("IN,SynthesisFilter.S") float s0 = samples[0];\r
236     @LOC("IN,SynthesisFilter.S") float s1 = samples[1];\r
237     @LOC("IN,SynthesisFilter.S") float s2 = samples[2];\r
238     @LOC("IN,SynthesisFilter.S") float s3 = samples[3];\r
239     @LOC("IN,SynthesisFilter.S") float s4 = samples[4];\r
240     @LOC("IN,SynthesisFilter.S") float s5 = samples[5];\r
241     @LOC("IN,SynthesisFilter.S") float s6 = samples[6];\r
242     @LOC("IN,SynthesisFilter.S") float s7 = samples[7];\r
243     @LOC("IN,SynthesisFilter.S") float s8 = samples[8];\r
244     @LOC("IN,SynthesisFilter.S") float s9 = samples[9];\r
245     @LOC("IN,SynthesisFilter.S") float s10 = samples[10];       \r
246     @LOC("IN,SynthesisFilter.S") float s11 = samples[11];\r
247     @LOC("IN,SynthesisFilter.S") float s12 = samples[12];\r
248     @LOC("IN,SynthesisFilter.S") float s13 = samples[13];\r
249     @LOC("IN,SynthesisFilter.S") float s14 = samples[14];\r
250     @LOC("IN,SynthesisFilter.S") float s15 = samples[15];\r
251     @LOC("IN,SynthesisFilter.S") float s16 = samples[16];\r
252     @LOC("IN,SynthesisFilter.S") float s17 = samples[17];\r
253     @LOC("IN,SynthesisFilter.S") float s18 = samples[18];\r
254     @LOC("IN,SynthesisFilter.S") float s19 = samples[19];\r
255     @LOC("IN,SynthesisFilter.S") float s20 = samples[20];       \r
256     @LOC("IN,SynthesisFilter.S") float s21 = samples[21];\r
257     @LOC("IN,SynthesisFilter.S") float s22 = samples[22];\r
258     @LOC("IN,SynthesisFilter.S") float s23 = samples[23];\r
259     @LOC("IN,SynthesisFilter.S") float s24 = samples[24];\r
260     @LOC("IN,SynthesisFilter.S") float s25 = samples[25];\r
261     @LOC("IN,SynthesisFilter.S") float s26 = samples[26];\r
262     @LOC("IN,SynthesisFilter.S") float s27 = samples[27];\r
263     @LOC("IN,SynthesisFilter.S") float s28 = samples[28];\r
264     @LOC("IN,SynthesisFilter.S") float s29 = samples[29];\r
265     @LOC("IN,SynthesisFilter.S") float s30 = samples[30];       \r
266     @LOC("IN,SynthesisFilter.S") float s31 = samples[31];\r
267 \r
268     @LOC("IN,SynthesisFilter.LSH") float p0 = s0 + s31;\r
269     @LOC("IN,SynthesisFilter.LSH") float p1 = s1 + s30;\r
270     @LOC("IN,SynthesisFilter.LSH") float p2 = s2 + s29;\r
271     @LOC("IN,SynthesisFilter.LSH") float p3 = s3 + s28;\r
272     @LOC("IN,SynthesisFilter.LSH") float p4 = s4 + s27;\r
273     @LOC("IN,SynthesisFilter.LSH") float p5 = s5 + s26;\r
274     @LOC("IN,SynthesisFilter.LSH") float p6 = s6 + s25;\r
275     @LOC("IN,SynthesisFilter.LSH") float p7 = s7 + s24;\r
276     @LOC("IN,SynthesisFilter.LSH") float p8 = s8 + s23;\r
277     @LOC("IN,SynthesisFilter.LSH") float p9 = s9 + s22;\r
278     @LOC("IN,SynthesisFilter.LSH") float p10 = s10 + s21;\r
279     @LOC("IN,SynthesisFilter.LSH") float p11 = s11 + s20;\r
280     @LOC("IN,SynthesisFilter.LSH") float p12 = s12 + s19;\r
281     @LOC("IN,SynthesisFilter.LSH") float p13 = s13 + s18;\r
282     @LOC("IN,SynthesisFilter.LSH") float p14 = s14 + s17;\r
283     @LOC("IN,SynthesisFilter.LSH") float p15 = s15 + s16;\r
284 \r
285     @LOC("IN,SynthesisFilter.LSH") float pp0 = p0 + p15;\r
286     @LOC("IN,SynthesisFilter.LSH") float pp1 = p1 + p14;\r
287     @LOC("IN,SynthesisFilter.LSH") float pp2 = p2 + p13;\r
288     @LOC("IN,SynthesisFilter.LSH") float pp3 = p3 + p12;\r
289     @LOC("IN,SynthesisFilter.LSH") float pp4 = p4 + p11;\r
290     @LOC("IN,SynthesisFilter.LSH") float pp5 = p5 + p10;\r
291     @LOC("IN,SynthesisFilter.LSH") float pp6 = p6 + p9;\r
292     @LOC("IN,SynthesisFilter.LSH") float pp7 = p7 + p8;\r
293     @LOC("IN,SynthesisFilter.LSH") float pp8 = (p0 - p15) * cos1_32;\r
294     @LOC("IN,SynthesisFilter.LSH") float pp9 = (p1 - p14) * cos3_32;\r
295     @LOC("IN,SynthesisFilter.LSH") float pp10 = (p2 - p13) * cos5_32;\r
296     @LOC("IN,SynthesisFilter.LSH") float pp11 = (p3 - p12) * cos7_32;\r
297     @LOC("IN,SynthesisFilter.LSH") float pp12 = (p4 - p11) * cos9_32;\r
298     @LOC("IN,SynthesisFilter.LSH") float pp13 = (p5 - p10) * cos11_32;\r
299     @LOC("IN,SynthesisFilter.LSH") float pp14 = (p6 - p9) * cos13_32;\r
300     @LOC("IN,SynthesisFilter.LSH") float pp15 = (p7 - p8) * cos15_32;\r
301 \r
302     p0 = pp0 + pp7;\r
303     p1 = pp1 + pp6;\r
304     p2 = pp2 + pp5;\r
305     p3 = pp3 + pp4;\r
306     p4 = (pp0 - pp7) * cos1_16;\r
307     p5 = (pp1 - pp6) * cos3_16;\r
308     p6 = (pp2 - pp5) * cos5_16;\r
309     p7 = (pp3 - pp4) * cos7_16;\r
310     p8 = pp8 + pp15;\r
311     p9 = pp9 + pp14;\r
312     p10 = pp10 + pp13;\r
313     p11 = pp11 + pp12;\r
314     p12 = (pp8 - pp15) * cos1_16;\r
315     p13 = (pp9 - pp14) * cos3_16;\r
316     p14 = (pp10 - pp13) * cos5_16;\r
317     p15 = (pp11 - pp12) * cos7_16;\r
318 \r
319 \r
320     pp0 = p0 + p3;\r
321     pp1 = p1 + p2;\r
322     pp2 = (p0 - p3) * cos1_8;\r
323     pp3 = (p1 - p2) * cos3_8;\r
324     pp4 = p4 + p7;\r
325     pp5 = p5 + p6;\r
326     pp6 = (p4 - p7) * cos1_8;\r
327     pp7 = (p5 - p6) * cos3_8;\r
328     pp8 = p8 + p11;\r
329     pp9 = p9 + p10;\r
330     pp10 = (p8 - p11) * cos1_8;\r
331     pp11 = (p9 - p10) * cos3_8;\r
332     pp12 = p12 + p15;\r
333     pp13 = p13 + p14;\r
334     pp14 = (p12 - p15) * cos1_8;\r
335     pp15 = (p13 - p14) * cos3_8;\r
336 \r
337     p0 = pp0 + pp1;\r
338     p1 = (pp0 - pp1) * cos1_4;\r
339     p2 = pp2 + pp3;\r
340     p3 = (pp2 - pp3) * cos1_4;\r
341     p4 = pp4 + pp5;\r
342     p5 = (pp4 - pp5) * cos1_4;\r
343     p6 = pp6 + pp7;\r
344     p7 = (pp6 - pp7) * cos1_4;\r
345     p8 = pp8 + pp9;\r
346     p9 = (pp8 - pp9) * cos1_4;\r
347 \r
348     p10 = pp10 + pp11;\r
349     p11 = (pp10 - pp11) * cos1_4;\r
350     p12 = pp12 + pp13;\r
351     p13 = (pp12 - pp13) * cos1_4;\r
352     p14 = pp14 + pp15;\r
353     p15 = (pp14 - pp15) * cos1_4;\r
354 \r
355     // this is pretty insane coding\r
356     @LOC("IN,SynthesisFilter.L3") float tmp1;\r
357     new_v19/*36-17*/ = -(new_v4 = (new_v12 = p7) + p5) - p6;\r
358     new_v27/*44-17*/ = -p6 - p7 - p4;\r
359     new_v6 = (new_v10 = (new_v14 = p15) + p11) + p13;\r
360     new_v17/*34-17*/ = -(new_v2 = p15 + p13 + p9) - p14;\r
361     new_v21/*38-17*/ = (tmp1 = -p14 - p15 - p10 - p11) - p13;\r
362     new_v29/*46-17*/ = -p14 - p15 - p12 - p8;\r
363     new_v25/*42-17*/ = tmp1 - p12;\r
364     new_v31/*48-17*/ = -p0;\r
365     new_v0 = p1;\r
366     new_v23/*40-17*/ = -(new_v8 = p3) - p2;\r
367 \r
368     p0 = (s0 - s31) * cos1_64;\r
369     p1 = (s1 - s30) * cos3_64;\r
370     p2 = (s2 - s29) * cos5_64;\r
371     p3 = (s3 - s28) * cos7_64;\r
372     p4 = (s4 - s27) * cos9_64;\r
373     p5 = (s5 - s26) * cos11_64;\r
374     p6 = (s6 - s25) * cos13_64;\r
375     p7 = (s7 - s24) * cos15_64;\r
376     p8 = (s8 - s23) * cos17_64;\r
377     p9 = (s9 - s22) * cos19_64;\r
378     p10 = (s10 - s21) * cos21_64;\r
379     p11 = (s11 - s20) * cos23_64;\r
380     p12 = (s12 - s19) * cos25_64;\r
381     p13 = (s13 - s18) * cos27_64;\r
382     p14 = (s14 - s17) * cos29_64;\r
383     p15 = (s15 - s16) * cos31_64;\r
384 \r
385 \r
386     pp0 = p0 + p15;\r
387     pp1 = p1 + p14;\r
388     pp2 = p2 + p13;\r
389     pp3 = p3 + p12;\r
390     pp4 = p4 + p11;\r
391     pp5 = p5 + p10;\r
392     pp6 = p6 + p9;\r
393     pp7 = p7 + p8;\r
394     pp8 = (p0 - p15) * cos1_32;\r
395     pp9 = (p1 - p14) * cos3_32;\r
396     pp10 = (p2 - p13) * cos5_32;\r
397     pp11 = (p3 - p12) * cos7_32;\r
398     pp12 = (p4 - p11) * cos9_32;\r
399     pp13 = (p5 - p10) * cos11_32;\r
400     pp14 = (p6 - p9) * cos13_32;\r
401     pp15 = (p7 - p8) * cos15_32;\r
402 \r
403 \r
404     p0 = pp0 + pp7;\r
405     p1 = pp1 + pp6;\r
406     p2 = pp2 + pp5;\r
407     p3 = pp3 + pp4;\r
408     p4 = (pp0 - pp7) * cos1_16;\r
409     p5 = (pp1 - pp6) * cos3_16;\r
410     p6 = (pp2 - pp5) * cos5_16;\r
411     p7 = (pp3 - pp4) * cos7_16;\r
412     p8 = pp8 + pp15;\r
413     p9 = pp9 + pp14;\r
414     p10 = pp10 + pp13;\r
415     p11 = pp11 + pp12;\r
416     p12 = (pp8 - pp15) * cos1_16;\r
417     p13 = (pp9 - pp14) * cos3_16;\r
418     p14 = (pp10 - pp13) * cos5_16;\r
419     p15 = (pp11 - pp12) * cos7_16;\r
420 \r
421 \r
422     pp0 = p0 + p3;\r
423     pp1 = p1 + p2;\r
424     pp2 = (p0 - p3) * cos1_8;\r
425     pp3 = (p1 - p2) * cos3_8;\r
426     pp4 = p4 + p7;\r
427     pp5 = p5 + p6;\r
428     pp6 = (p4 - p7) * cos1_8;\r
429     pp7 = (p5 - p6) * cos3_8;\r
430     pp8 = p8 + p11;\r
431     pp9 = p9 + p10;\r
432     pp10 = (p8 - p11) * cos1_8;\r
433     pp11 = (p9 - p10) * cos3_8;\r
434     pp12 = p12 + p15;\r
435     pp13 = p13 + p14;\r
436     pp14 = (p12 - p15) * cos1_8;\r
437     pp15 = (p13 - p14) * cos3_8;\r
438 \r
439 \r
440     p0 = pp0 + pp1;\r
441     p1 = (pp0 - pp1) * cos1_4;\r
442     p2 = pp2 + pp3;\r
443     p3 = (pp2 - pp3) * cos1_4;\r
444     p4 = pp4 + pp5;\r
445     p5 = (pp4 - pp5) * cos1_4;\r
446     p6 = pp6 + pp7;\r
447     p7 = (pp6 - pp7) * cos1_4;\r
448     p8 = pp8 + pp9;\r
449     p9 = (pp8 - pp9) * cos1_4;\r
450     p10 = pp10 + pp11;\r
451     p11 = (pp10 - pp11) * cos1_4;\r
452     p12 = pp12 + pp13;\r
453     p13 = (pp12 - pp13) * cos1_4;\r
454     p14 = pp14 + pp15;\r
455     p15 = (pp14 - pp15) * cos1_4;\r
456 \r
457 \r
458     // manually doing something that a compiler should handle sucks\r
459     // coding like this is hard to read\r
460     @LOC("IN,SynthesisFilter.L4") float tmp2;\r
461     new_v5 = (new_v11 = (new_v13 = (new_v15 = p15) + p7) + p11)\r
462     + p5 + p13;\r
463     new_v7 = (new_v9 = p15 + p11 + p3) + p13;\r
464     new_v16/*33-17*/ = -(new_v1 = (tmp1 = p13 + p15 + p9) + p1) - p14;\r
465     new_v18/*35-17*/ = -(new_v3 = tmp1 + p5 + p7) - p6 - p14;\r
466 \r
467     new_v22/*39-17*/ = (tmp1 = -p10 - p11 - p14 - p15)\r
468     - p13 - p2 - p3;\r
469     new_v20/*37-17*/ = tmp1 - p13 - p5 - p6 - p7;\r
470     new_v24/*41-17*/ = tmp1 - p12 - p2 - p3;\r
471     new_v26/*43-17*/ = tmp1 - p12 - (tmp2 = p4 + p6 + p7);\r
472     new_v30/*47-17*/ = (tmp1 = -p8 - p12 - p14 - p15) - p0;\r
473     new_v28/*45-17*/ = tmp1 - tmp2;\r
474 \r
475     // insert V[0-15] (== new_v[0-15]) into actual v:   \r
476     // float[] x2 = actual_v + actual_write_pos;\r
477     //float dest[] = actual_v; //actual_v subbed in so as not to create a new area\r
478 \r
479     //int pos = actual_write_pos; //substituted to simplify location relations\r
480 \r
481     v1[0 + actual_write_pos] = new_v0;\r
482     v1[16 + actual_write_pos] = new_v1;\r
483     v1[32 + actual_write_pos] = new_v2;\r
484     v1[48 + actual_write_pos] = new_v3;\r
485     v1[64 + actual_write_pos] = new_v4;\r
486     v1[80 + actual_write_pos] = new_v5;\r
487     v1[96 + actual_write_pos] = new_v6;\r
488     v1[112 + actual_write_pos] = new_v7;\r
489     v1[128 + actual_write_pos] = new_v8;\r
490     v1[144 + actual_write_pos] = new_v9;\r
491     v1[160 + actual_write_pos] = new_v10;\r
492     v1[176 + actual_write_pos] = new_v11;\r
493     v1[192 + actual_write_pos] = new_v12;\r
494     v1[208 + actual_write_pos] = new_v13;\r
495     v1[224 + actual_write_pos] = new_v14;\r
496     v1[240 + actual_write_pos] = new_v15;\r
497 \r
498     // V[16] is always 0.0:\r
499     v1[256 + actual_write_pos] = 0.0f;\r
500 \r
501     // insert V[17-31] (== -new_v[15-1]) into actual v:\r
502     v1[272 + actual_write_pos] = -new_v15;\r
503     v1[288 + actual_write_pos] = -new_v14;\r
504     v1[304 + actual_write_pos] = -new_v13;\r
505     v1[320 + actual_write_pos] = -new_v12;\r
506     v1[336 + actual_write_pos] = -new_v11;\r
507     v1[352 + actual_write_pos] = -new_v10;\r
508     v1[368 + actual_write_pos] = -new_v9;\r
509     v1[384 + actual_write_pos] = -new_v8;\r
510     v1[400 + actual_write_pos] = -new_v7;\r
511     v1[416 + actual_write_pos] = -new_v6;\r
512     v1[432 + actual_write_pos] = -new_v5;\r
513     v1[448 + actual_write_pos] = -new_v4;\r
514     v1[464 + actual_write_pos] = -new_v3;\r
515     v1[480 + actual_write_pos] = -new_v2;\r
516     v1[496 + actual_write_pos] = -new_v1;\r
517 \r
518     // insert V[32] (== -new_v[0]) into other v:\r
519     //dest = (actual_v==v1) ? v2 : v1;  //assignment replaced with if statement so that new areas are not created\r
520 \r
521     v2[0 + actual_write_pos] = -new_v0;\r
522     // insert V[33-48] (== new_v[16-31]) into other v:\r
523     v2[16 + actual_write_pos] = new_v16;\r
524     v2[32 + actual_write_pos] = new_v17;\r
525     v2[48 + actual_write_pos] = new_v18;\r
526     v2[64 + actual_write_pos] = new_v19;\r
527     v2[80 + actual_write_pos] = new_v20;\r
528     v2[96 + actual_write_pos] = new_v21;\r
529     v2[112 + actual_write_pos] = new_v22;\r
530     v2[128 + actual_write_pos] = new_v23;\r
531     v2[144 + actual_write_pos] = new_v24;\r
532     v2[160 + actual_write_pos] = new_v25;\r
533     v2[176 + actual_write_pos] = new_v26;\r
534     v2[192 + actual_write_pos] = new_v27;\r
535     v2[208 + actual_write_pos] = new_v28;\r
536     v2[224 + actual_write_pos] = new_v29;\r
537     v2[240 + actual_write_pos] = new_v30;\r
538     v2[256 + actual_write_pos] = new_v31;\r
539 \r
540     // insert V[49-63] (== new_v[30-16]) into other v:\r
541     v2[272 + actual_write_pos] = new_v30;\r
542     v2[288 + actual_write_pos] = new_v29;\r
543     v2[304 + actual_write_pos] = new_v28;\r
544     v2[320 + actual_write_pos] = new_v27;\r
545     v2[336 + actual_write_pos] = new_v26;\r
546     v2[352 + actual_write_pos] = new_v25;\r
547     v2[368 + actual_write_pos] = new_v24;\r
548     v2[384 + actual_write_pos] = new_v23;\r
549     v2[400 + actual_write_pos] = new_v22;\r
550     v2[416 + actual_write_pos] = new_v21;\r
551     v2[432 + actual_write_pos] = new_v20;\r
552     v2[448 + actual_write_pos] = new_v19;\r
553     v2[464 + actual_write_pos] = new_v18;\r
554     v2[480 + actual_write_pos] = new_v17;\r
555     v2[496 + actual_write_pos] = new_v16;\r
556   }\r
557         \r
558   /**\r
559    * Compute PCM Samples.\r
560    */\r
561   \r
562   @LOC("TMP") private float[] _tmpOut = new float[32];\r
563   \r
564   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
565   private void compute_pcm_samples0(@LOC("THIS") Obuffer buffer)\r
566   {\r
567       //final float[] vp = v1;  //subbed in variable name instead to reduce areas       \r
568         //int inc = v_inc;\r
569         //final float[] tmpOut = _tmpOut; //subbed in variable name instread to reduce areas\r
570          @LOC("DVP") int dvp =0;\r
571         \r
572                         // fat chance of having this loop unroll\r
573                 for(@LOC("I") int i=0; i<32; i++)\r
574                 {\r
575                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
576                 //final float[] dp = d16[i]; //subbed in variable name instead to reduce areas\r
577                 pcm_sample = (float)(((v1[0 + dvp] * d16[i][0]) +\r
578                         (v1[15 + dvp] * d16[i][1]) +\r
579                         (v1[14 + dvp] * d16[i][2]) +\r
580                         (v1[13 + dvp] * d16[i][3]) +\r
581                         (v1[12 + dvp] * d16[i][4]) +\r
582                         (v1[11 + dvp] * d16[i][5]) +\r
583                         (v1[10 + dvp] * d16[i][6]) +\r
584                         (v1[9 + dvp] * d16[i][7]) +\r
585                         (v1[8 + dvp] * d16[i][8]) +\r
586                         (v1[7 + dvp] * d16[i][9]) +\r
587                         (v1[6 + dvp] * d16[i][10]) +\r
588                         (v1[5 + dvp] * d16[i][11]) +\r
589                         (v1[4 + dvp] * d16[i][12]) +\r
590                         (v1[3 + dvp] * d16[i][13]) +\r
591                         (v1[2 + dvp] * d16[i][14]) +\r
592                         (v1[1 + dvp] * d16[i][15])\r
593                         ) * scalefactor);\r
594 \r
595             _tmpOut[i] = pcm_sample;\r
596                         \r
597                         dvp += 16;\r
598         } // for\r
599   }\r
600   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
601   private void compute_pcm_samples1(@LOC("THIS") Obuffer buffer)\r
602   {\r
603       //final float[] vp = v1;  \r
604         //int inc = v_inc;\r
605         //final float[] tmpOut = _tmpOut;\r
606          @LOC("DVP") int dvp =0;\r
607         \r
608                         // fat chance of having this loop unroll\r
609                         for(@LOC("I") int i=0; i<32; i++)\r
610                         {\r
611                             //final float[] dp = d16[i];\r
612                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
613 \r
614                                 pcm_sample = (float)(((v1[1 + dvp] * d16[i][0]) +\r
615                                                       (v1[0 + dvp] * d16[i][1]) +\r
616                                         (v1[15 + dvp] * d16[i][2]) +\r
617                                         (v1[14 + dvp] * d16[i][3]) +\r
618                                         (v1[13 + dvp] * d16[i][4]) +\r
619                                         (v1[12 + dvp] * d16[i][5]) +\r
620                                         (v1[11 + dvp] * d16[i][6]) +\r
621                                         (v1[10 + dvp] * d16[i][7]) +\r
622                                         (v1[9 + dvp] * d16[i][8]) +\r
623                                         (v1[8 + dvp] * d16[i][9]) +\r
624                                         (v1[7 + dvp] * d16[i][10]) +\r
625                                         (v1[6 + dvp] * d16[i][11]) +\r
626                                         (v1[5 + dvp] * d16[i][12]) +\r
627                                         (v1[4 + dvp] * d16[i][13]) +\r
628                                         (v1[3 + dvp] * d16[i][14]) +\r
629                                         (v1[2 + dvp] * d16[i][15])\r
630                                         ) * scalefactor);\r
631 \r
632             _tmpOut[i] = pcm_sample;\r
633 //                      v1\r
634                         dvp += 16;\r
635          } // for\r
636   }\r
637   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
638   private void compute_pcm_samples2(@LOC("THIS") Obuffer buffer)\r
639   {\r
640       //final float[] vp = v1;\r
641         \r
642         //int inc = v_inc;\r
643         //final float[] tmpOut = _tmpOut;\r
644          @LOC("DVP") int dvp =0;\r
645         \r
646                         // fat chance of having this loop unroll\r
647                         for(@LOC("I") int i=0; i<32; i++)\r
648                         {\r
649                             //final float[] dp = d16[i];\r
650                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
651 \r
652                                 pcm_sample = (float)(((v1[2 + dvp] * d16[i][0]) +\r
653                                         (v1[1 + dvp] * d16[i][1]) +\r
654                                         (v1[0 + dvp] * d16[i][2]) +\r
655                                         (v1[15 + dvp] * d16[i][3]) +\r
656                                         (v1[14 + dvp] * d16[i][4]) +\r
657                                         (v1[13 + dvp] * d16[i][5]) +\r
658                                         (v1[12 + dvp] * d16[i][6]) +\r
659                                         (v1[11 + dvp] * d16[i][7]) +\r
660                                         (v1[10 + dvp] * d16[i][8]) +\r
661                                         (v1[9 + dvp] * d16[i][9]) +\r
662                                         (v1[8 + dvp] * d16[i][10]) +\r
663                                         (v1[7 + dvp] * d16[i][11]) +\r
664                                         (v1[6 + dvp] * d16[i][12]) +\r
665                                         (v1[5 + dvp] * d16[i][13]) +\r
666                                         (v1[4 + dvp] * d16[i][14]) +\r
667                                         (v1[3 + dvp] * d16[i][15])\r
668                                         ) * scalefactor);\r
669 \r
670             _tmpOut[i] = pcm_sample;\r
671                         \r
672                         dvp += 16;\r
673                         } // for\r
674   }\r
675   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")       \r
676   private void compute_pcm_samples3(@LOC("THIS") Obuffer buffer)\r
677   {\r
678       //final float[] vp = v1;\r
679         \r
680         int idx = 0;\r
681         //int inc = v_inc;\r
682         //final float[] tmpOut = _tmpOut;\r
683          @LOC("DVP") int dvp =0;\r
684         \r
685                         // fat chance of having this loop unroll\r
686                         for(@LOC("I") int i=0; i<32; i++)\r
687                         {\r
688                             //final float[] dp = d16[i];\r
689                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
690 \r
691                                 pcm_sample = (float) ( ( (v1[3 + dvp] * d16[i][0]) +\r
692                                         (v1[2 + dvp] * d16[i][1]) +\r
693                                         (v1[1 + dvp] * d16[i][2]) +\r
694                                         (v1[0 + dvp] * d16[i][3]) +\r
695                                         (v1[15 + dvp] * d16[i][4]) +\r
696                                         (v1[14 + dvp] * d16[i][5]) +\r
697                                         (v1[13 + dvp] * d16[i][6]) +\r
698                                         (v1[12 + dvp] * d16[i][7]) +\r
699                                         (v1[11 + dvp] * d16[i][8]) +\r
700                                         (v1[10 + dvp] * d16[i][9]) +\r
701                                         (v1[9 + dvp] * d16[i][10]) +\r
702                                         (v1[8 + dvp] * d16[i][11]) +\r
703                                         (v1[7 + dvp] * d16[i][12]) +\r
704                                         (v1[6 + dvp] * d16[i][13]) +\r
705                                         (v1[5 + dvp] * d16[i][14]) +\r
706                                         (v1[4 + dvp] * d16[i][15])\r
707                                         ) * scalefactor);\r
708 \r
709             _tmpOut[i] = pcm_sample;\r
710                         \r
711                         dvp += 16;\r
712                         } // for\r
713   }\r
714   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")                       \r
715   private void compute_pcm_samples4(@LOC("THIS") Obuffer buffer)\r
716   {\r
717       //final float[] vp = v1;\r
718         \r
719         //int inc = v_inc;\r
720         //final float[] tmpOut = _tmpOut;\r
721          @LOC("DVP") int dvp =0;\r
722         \r
723                         // fat chance of having this loop unroll\r
724                         for(@LOC("I") int i=0; i<32; i++)\r
725                         {\r
726                             //final float[] dp = d16[i];\r
727                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
728 \r
729                                 pcm_sample = (float)(((v1[4 + dvp] * d16[i][0]) +\r
730                                         (v1[3 + dvp] * d16[i][1]) +\r
731                                         (v1[2 + dvp] * d16[i][2]) +\r
732                                         (v1[1 + dvp] * d16[i][3]) +\r
733                                         (v1[0 + dvp] * d16[i][4]) +\r
734                                         (v1[15 + dvp] * d16[i][5]) +\r
735                                         (v1[14 + dvp] * d16[i][6]) +\r
736                                         (v1[13 + dvp] * d16[i][7]) +\r
737                                         (v1[12 + dvp] * d16[i][8]) +\r
738                                         (v1[11 + dvp] * d16[i][9]) +\r
739                                         (v1[10 + dvp] * d16[i][10]) +\r
740                                         (v1[9 + dvp] * d16[i][11]) +\r
741                                         (v1[8 + dvp] * d16[i][12]) +\r
742                                         (v1[7 + dvp] * d16[i][13]) +\r
743                                         (v1[6 + dvp] * d16[i][14]) +\r
744                                         (v1[5 + dvp] * d16[i][15])\r
745                                         ) * scalefactor);\r
746 \r
747             _tmpOut[i] = pcm_sample;\r
748                         \r
749                         dvp += 16;\r
750                         } // for\r
751   }\r
752   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
753   private void compute_pcm_samples5(@LOC("THIS") Obuffer buffer)\r
754   {\r
755       //final float[] vp = v1;\r
756         \r
757         //int inc = v_inc;\r
758         //final float[] tmpOut = _tmpOut;\r
759          @LOC("DVP") int dvp =0;\r
760         \r
761                         // fat chance of having this loop unroll\r
762                         for(@LOC("I") int i=0; i<32; i++)\r
763                         {\r
764                             //  final float[] dp = d16[i];\r
765                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
766 \r
767                                 pcm_sample = (float)(((v1[5 + dvp] * d16[i][0]) +\r
768                                         (v1[4 + dvp] * d16[i][1]) +\r
769                                         (v1[3 + dvp] * d16[i][2]) +\r
770                                         (v1[2 + dvp] * d16[i][3]) +\r
771                                         (v1[1 + dvp] * d16[i][4]) +\r
772                                         (v1[0 + dvp] * d16[i][5]) +\r
773                                         (v1[15 + dvp] * d16[i][6]) +\r
774                                         (v1[14 + dvp] * d16[i][7]) +\r
775                                         (v1[13 + dvp] * d16[i][8]) +\r
776                                         (v1[12 + dvp] * d16[i][9]) +\r
777                                         (v1[11 + dvp] * d16[i][10]) +\r
778                                         (v1[10 + dvp] * d16[i][11]) +\r
779                                         (v1[9 + dvp] * d16[i][12]) +\r
780                                         (v1[8 + dvp] * d16[i][13]) +\r
781                                         (v1[7 + dvp] * d16[i][14]) +\r
782                                         (v1[6 + dvp] * d16[i][15])\r
783                                         ) * scalefactor);\r
784 \r
785             _tmpOut[i] = pcm_sample;\r
786                         \r
787                         dvp += 16;\r
788                         } // for\r
789   }\r
790   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
791   private void compute_pcm_samples6(@LOC("THIS") Obuffer buffer)\r
792   {\r
793       //final float[] vp = v1;  \r
794         //int inc = v_inc;\r
795         //final float[] tmpOut = _tmpOut;\r
796          @LOC("DVP") int dvp =0;\r
797         \r
798                         // fat chance of having this loop unroll\r
799                         for(@LOC("I") int i=0; i<32; i++)\r
800                         {\r
801                             //final float[] dp = d16[i];\r
802                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
803 \r
804                                 pcm_sample = (float)(((v1[6 + dvp] * d16[i][0]) +\r
805                                         (v1[5 + dvp] * d16[i][1]) +\r
806                                         (v1[4 + dvp] * d16[i][2]) +\r
807                                         (v1[3 + dvp] * d16[i][3]) +\r
808                                         (v1[2 + dvp] * d16[i][4]) +\r
809                                         (v1[1 + dvp] * d16[i][5]) +\r
810                                         (v1[0 + dvp] * d16[i][6]) +\r
811                                         (v1[15 + dvp] * d16[i][7]) +\r
812                                         (v1[14 + dvp] * d16[i][8]) +\r
813                                         (v1[13 + dvp] * d16[i][9]) +\r
814                                         (v1[12 + dvp] * d16[i][10]) +\r
815                                         (v1[11 + dvp] * d16[i][11]) +\r
816                                         (v1[10 + dvp] * d16[i][12]) +\r
817                                         (v1[9 + dvp] * d16[i][13]) +\r
818                                         (v1[8 + dvp] * d16[i][14]) +\r
819                                         (v1[7 + dvp] * d16[i][15])\r
820                                         ) * scalefactor);\r
821 \r
822             _tmpOut[i] = pcm_sample;\r
823                         \r
824                         dvp += 16;\r
825                         } // for\r
826   }\r
827   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
828   private void compute_pcm_samples7(@LOC("THIS") Obuffer buffer)\r
829   {\r
830       //final float[] vp = v1;\r
831         \r
832         //int inc = v_inc;\r
833         //final float[] tmpOut = _tmpOut;\r
834          @LOC("DVP") int dvp =0;\r
835         \r
836                         // fat chance of having this loop unroll\r
837                         for(@LOC("I") int i=0; i<32; i++)\r
838                         {\r
839                             //final float[] dp = d16[i];\r
840                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
841 \r
842                                 pcm_sample = (float)(((v1[7 + dvp] * d16[i][0]) +\r
843                                         (v1[6 + dvp] * d16[i][1]) +\r
844                                         (v1[5 + dvp] * d16[i][2]) +\r
845                                         (v1[4 + dvp] * d16[i][3]) +\r
846                                         (v1[3 + dvp] * d16[i][4]) +\r
847                                         (v1[2 + dvp] * d16[i][5]) +\r
848                                         (v1[1 + dvp] * d16[i][6]) +\r
849                                         (v1[0 + dvp] * d16[i][7]) +\r
850                                         (v1[15 + dvp] * d16[i][8]) +\r
851                                         (v1[14 + dvp] * d16[i][9]) +\r
852                                         (v1[13 + dvp] * d16[i][10]) +\r
853                                         (v1[12 + dvp] * d16[i][11]) +\r
854                                         (v1[11 + dvp] * d16[i][12]) +\r
855                                         (v1[10 + dvp] * d16[i][13]) +\r
856                                         (v1[9 + dvp] * d16[i][14]) +\r
857                                         (v1[8 + dvp] * d16[i][15])\r
858                                         ) * scalefactor);\r
859 \r
860             _tmpOut[i] = pcm_sample;\r
861                         \r
862                         dvp += 16;\r
863                         } // for\r
864   }\r
865   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
866   private void compute_pcm_samples8(@LOC("THIS") Obuffer buffer)\r
867   {\r
868       //final float[] vp = v1;\r
869         \r
870         //int inc = v_inc;\r
871         //final float[] tmpOut = _tmpOut;\r
872          @LOC("DVP") int dvp =0;\r
873         \r
874                         // fat chance of having this loop unroll\r
875                         for(@LOC("I") int i=0; i<32; i++)\r
876                         {\r
877                             //final float[] dp = d16[i];\r
878                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
879 \r
880                                 pcm_sample = (float)(((v1[8 + dvp] * d16[i][0]) +\r
881                                         (v1[7 + dvp] * d16[i][1]) +\r
882                                         (v1[6 + dvp] * d16[i][2]) +\r
883                                         (v1[5 + dvp] * d16[i][3]) +\r
884                                         (v1[4 + dvp] * d16[i][4]) +\r
885                                         (v1[3 + dvp] * d16[i][5]) +\r
886                                         (v1[2 + dvp] * d16[i][6]) +\r
887                                         (v1[1 + dvp] * d16[i][7]) +\r
888                                         (v1[0 + dvp] * d16[i][8]) +\r
889                                         (v1[15 + dvp] * d16[i][9]) +\r
890                                         (v1[14 + dvp] * d16[i][10]) +\r
891                                         (v1[13 + dvp] * d16[i][11]) +\r
892                                         (v1[12 + dvp] * d16[i][12]) +\r
893                                         (v1[11 + dvp] * d16[i][13]) +\r
894                                         (v1[10 + dvp] * d16[i][14]) +\r
895                                         (v1[9 + dvp] * d16[i][15])\r
896                                         ) * scalefactor);\r
897 \r
898             _tmpOut[i] = pcm_sample;\r
899                         \r
900                         dvp += 16;\r
901                         } // for\r
902   }\r
903   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
904   private void compute_pcm_samples9(@LOC("THIS") Obuffer buffer)\r
905   {\r
906       //final float[] vp = v1;\r
907         \r
908         //int inc = v_inc;\r
909         //final float[] tmpOut = _tmpOut;\r
910          @LOC("DVP") int dvp =0;\r
911         \r
912                         // fat chance of having this loop unroll\r
913                         for(@LOC("I") int i=0; i<32; i++)\r
914                         {\r
915                             //final float[] dp = d16[i];\r
916                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
917 \r
918                                 pcm_sample = (float)(((v1[9 + dvp] * d16[i][0]) +\r
919                                         (v1[8 + dvp] * d16[i][1]) +\r
920                                         (v1[7 + dvp] * d16[i][2]) +\r
921                                         (v1[6 + dvp] * d16[i][3]) +\r
922                                         (v1[5 + dvp] * d16[i][4]) +\r
923                                         (v1[4 + dvp] * d16[i][5]) +\r
924                                         (v1[3 + dvp] * d16[i][6]) +\r
925                                         (v1[2 + dvp] * d16[i][7]) +\r
926                                         (v1[1 + dvp] * d16[i][8]) +\r
927                                         (v1[0 + dvp] * d16[i][9]) +\r
928                                         (v1[15 + dvp] * d16[i][10]) +\r
929                                         (v1[14 + dvp] * d16[i][11]) +\r
930                                         (v1[13 + dvp] * d16[i][12]) +\r
931                                         (v1[12 + dvp] * d16[i][13]) +\r
932                                         (v1[11 + dvp] * d16[i][14]) +\r
933                                         (v1[10 + dvp] * d16[i][15])\r
934                                         ) * scalefactor);\r
935 \r
936             _tmpOut[i] = pcm_sample;\r
937                         \r
938                         dvp += 16;\r
939                         } // for\r
940   }\r
941   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
942   private void compute_pcm_samples10(@LOC("THIS") Obuffer buffer)\r
943   {\r
944       //final float[] vp = v1;  \r
945         //int inc = v_inc;\r
946         //final float[] tmpOut = _tmpOut;\r
947          @LOC("DVP") int dvp =0;\r
948         \r
949                         // fat chance of having this loop unroll\r
950                         for(@LOC("I") int i=0; i<32; i++)\r
951                         {\r
952                             //final float[] dp = d16[i];\r
953                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
954 \r
955                                 pcm_sample = (float)(((v1[10 + dvp] * d16[i][0]) +\r
956                                         (v1[9 + dvp] * d16[i][1]) +\r
957                                         (v1[8 + dvp] * d16[i][2]) +\r
958                                         (v1[7 + dvp] * d16[i][3]) +\r
959                                         (v1[6 + dvp] * d16[i][4]) +\r
960                                         (v1[5 + dvp] * d16[i][5]) +\r
961                                         (v1[4 + dvp] * d16[i][6]) +\r
962                                         (v1[3 + dvp] * d16[i][7]) +\r
963                                         (v1[2 + dvp] * d16[i][8]) +\r
964                                         (v1[1 + dvp] * d16[i][9]) +\r
965                                         (v1[0 + dvp] * d16[i][10]) +\r
966                                         (v1[15 + dvp] * d16[i][11]) +\r
967                                         (v1[14 + dvp] * d16[i][12]) +\r
968                                         (v1[13 + dvp] * d16[i][13]) +\r
969                                         (v1[12 + dvp] * d16[i][14]) +\r
970                                         (v1[11 + dvp] * d16[i][15])\r
971                                         ) * scalefactor);\r
972 \r
973             _tmpOut[i] = pcm_sample;\r
974                         \r
975                         dvp += 16;\r
976                         } // for\r
977   }\r
978   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
979   private void compute_pcm_samples11(@LOC("THIS") Obuffer buffer)\r
980   {\r
981       //final float[] vp = v1;\r
982         \r
983         //int inc = v_inc;\r
984         //final float[] tmpOut = _tmpOut;\r
985          @LOC("DVP") int dvp =0;\r
986         \r
987                         // fat chance of having this loop unroll\r
988                         for(@LOC("I") int i=0; i<32; i++)\r
989                         {\r
990                             //final float[] dp = d16[i];\r
991                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
992 \r
993                                 pcm_sample = (float)(((v1[11 + dvp] * d16[i][0]) +\r
994                                         (v1[10 + dvp] * d16[i][1]) +\r
995                                         (v1[9 + dvp] * d16[i][2]) +\r
996                                         (v1[8 + dvp] * d16[i][3]) +\r
997                                         (v1[7 + dvp] * d16[i][4]) +\r
998                                         (v1[6 + dvp] * d16[i][5]) +\r
999                                         (v1[5 + dvp] * d16[i][6]) +\r
1000                                         (v1[4 + dvp] * d16[i][7]) +\r
1001                                         (v1[3 + dvp] * d16[i][8]) +\r
1002                                         (v1[2 + dvp] * d16[i][9]) +\r
1003                                         (v1[1 + dvp] * d16[i][10]) +\r
1004                                         (v1[0 + dvp] * d16[i][11]) +\r
1005                                         (v1[15 + dvp] * d16[i][12]) +\r
1006                                         (v1[14 + dvp] * d16[i][13]) +\r
1007                                         (v1[13 + dvp] * d16[i][14]) +\r
1008                                         (v1[12 + dvp] * d16[i][15])\r
1009                                         ) * scalefactor);\r
1010 \r
1011             _tmpOut[i] = pcm_sample;\r
1012                         \r
1013                         dvp += 16;\r
1014                         } // for\r
1015   }\r
1016   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1017   private void compute_pcm_samples12(@LOC("THIS") Obuffer buffer)\r
1018   {\r
1019       //final float[] vp = v1;  \r
1020         //int inc = v_inc;\r
1021         //final float[] tmpOut = _tmpOut;\r
1022          @LOC("DVP") int dvp =0;\r
1023         \r
1024                         // fat chance of having this loop unroll\r
1025                         for(@LOC("I") int i=0; i<32; i++)\r
1026                         {\r
1027                             //final float[] dp = d16[i];\r
1028                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1029 \r
1030                                 pcm_sample = (float)(((v1[12 + dvp] * d16[i][0]) +\r
1031                                         (v1[11 + dvp] * d16[i][1]) +\r
1032                                         (v1[10 + dvp] * d16[i][2]) +\r
1033                                         (v1[9 + dvp] * d16[i][3]) +\r
1034                                         (v1[8 + dvp] * d16[i][4]) +\r
1035                                         (v1[7 + dvp] * d16[i][5]) +\r
1036                                         (v1[6 + dvp] * d16[i][6]) +\r
1037                                         (v1[5 + dvp] * d16[i][7]) +\r
1038                                         (v1[4 + dvp] * d16[i][8]) +\r
1039                                         (v1[3 + dvp] * d16[i][9]) +\r
1040                                         (v1[2 + dvp] * d16[i][10]) +\r
1041                                         (v1[1 + dvp] * d16[i][11]) +\r
1042                                         (v1[0 + dvp] * d16[i][12]) +\r
1043                                         (v1[15 + dvp] * d16[i][13]) +\r
1044                                         (v1[14 + dvp] * d16[i][14]) +\r
1045                                         (v1[13 + dvp] * d16[i][15])\r
1046                                         ) * scalefactor);\r
1047 \r
1048             _tmpOut[i] = pcm_sample;\r
1049                         \r
1050                         dvp += 16;\r
1051                         } // for\r
1052   }\r
1053   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1054   private void compute_pcm_samples13(@LOC("THIS") Obuffer buffer)\r
1055   {\r
1056       //final float[] vp = v1;\r
1057         \r
1058         //int inc = v_inc;\r
1059         //final float[] tmpOut = _tmpOut;\r
1060          @LOC("DVP") int dvp =0;\r
1061         \r
1062                         // fat chance of having this loop unroll\r
1063                         for(@LOC("I") int i=0; i<32; i++)\r
1064                         {\r
1065                             //final float[] dp = d16[i];\r
1066                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1067 \r
1068                                 pcm_sample = (float)(((v1[13 + dvp] * d16[i][0]) +\r
1069                                         (v1[12 + dvp] * d16[i][1]) +\r
1070                                         (v1[11 + dvp] * d16[i][2]) +\r
1071                                         (v1[10 + dvp] * d16[i][3]) +\r
1072                                         (v1[9 + dvp] * d16[i][4]) +\r
1073                                         (v1[8 + dvp] * d16[i][5]) +\r
1074                                         (v1[7 + dvp] * d16[i][6]) +\r
1075                                         (v1[6 + dvp] * d16[i][7]) +\r
1076                                         (v1[5 + dvp] * d16[i][8]) +\r
1077                                         (v1[4 + dvp] * d16[i][9]) +\r
1078                                         (v1[3 + dvp] * d16[i][10]) +\r
1079                                         (v1[2 + dvp] * d16[i][11]) +\r
1080                                         (v1[1 + dvp] * d16[i][12]) +\r
1081                                         (v1[0 + dvp] * d16[i][13]) +\r
1082                                         (v1[15 + dvp] * d16[i][14]) +\r
1083                                         (v1[14 + dvp] * d16[i][15])\r
1084                                         ) * scalefactor);\r
1085 \r
1086             _tmpOut[i] = pcm_sample;\r
1087                         \r
1088                         dvp += 16;\r
1089                         } // for\r
1090   }\r
1091   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1092   private void compute_pcm_samples14(@LOC("THIS") Obuffer buffer)\r
1093   {\r
1094       //final float[] vp = v1;\r
1095         \r
1096         //int inc = v_inc;\r
1097         //final float[] tmpOut = _tmpOut;\r
1098          @LOC("DVP") int dvp =0;\r
1099         \r
1100                         // fat chance of having this loop unroll\r
1101                         for(@LOC("I") int i=0; i<32; i++)\r
1102                         {\r
1103                             //final float[] dp = d16[i];\r
1104                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1105 \r
1106                                 pcm_sample = (float)(((v1[14 + dvp] * d16[i][0]) +\r
1107                                         (v1[13 + dvp] * d16[i][1]) +\r
1108                                         (v1[12 + dvp] * d16[i][2]) +\r
1109                                         (v1[11 + dvp] * d16[i][3]) +\r
1110                                         (v1[10 + dvp] * d16[i][4]) +\r
1111                                         (v1[9 + dvp] * d16[i][5]) +\r
1112                                         (v1[8 + dvp] * d16[i][6]) +\r
1113                                         (v1[7 + dvp] * d16[i][7]) +\r
1114                                         (v1[6 + dvp] * d16[i][8]) +\r
1115                                         (v1[5 + dvp] * d16[i][9]) +\r
1116                                         (v1[4 + dvp] * d16[i][10]) +\r
1117                                         (v1[3 + dvp] * d16[i][11]) +\r
1118                                         (v1[2 + dvp] * d16[i][12]) +\r
1119                                         (v1[1 + dvp] * d16[i][13]) +\r
1120                                         (v1[0 + dvp] * d16[i][14]) +\r
1121                                         (v1[15 + dvp] * d16[i][15])\r
1122                                         ) * scalefactor);\r
1123 \r
1124             _tmpOut[i] = pcm_sample;\r
1125                         \r
1126                         dvp += 16;\r
1127                         } // for\r
1128   }\r
1129   @LATTICE("THIS<DVP,DVP<I,DVP*,I*,THISLOC=THIS")\r
1130   private void compute_pcm_samples15(@LOC("THIS") Obuffer buffer)\r
1131   {\r
1132       //final float[] vp = v1;\r
1133                 \r
1134         //int inc = v_inc;\r
1135         //final float[] tmpOut = _tmpOut;\r
1136       @LOC("DVP") int dvp =0;\r
1137         \r
1138                         // fat chance of having this loop unroll\r
1139                         for(@LOC("I") int i=0; i<32; i++)\r
1140                         {\r
1141                                 @LOC("THIS,SynthesisFilter.PCM") float pcm_sample;\r
1142                                 //final float dp[] = d16[i];\r
1143                                 pcm_sample = (float)(((v1[15 + dvp] * d16[i][0]) +\r
1144                                         (v1[14 + dvp] * d16[i][1]) +\r
1145                                         (v1[13 + dvp] * d16[i][2]) +\r
1146                                         (v1[12 + dvp] * d16[i][3]) +\r
1147                                         (v1[11 + dvp] * d16[i][4]) +\r
1148                                         (v1[10 + dvp] * d16[i][5]) +\r
1149                                         (v1[9 + dvp] * d16[i][6]) +\r
1150                                         (v1[8 + dvp] * d16[i][7]) +\r
1151                                         (v1[7 + dvp] * d16[i][8]) +\r
1152                                         (v1[6 + dvp] * d16[i][9]) +\r
1153                                         (v1[5 + dvp] * d16[i][10]) +\r
1154                                         (v1[4 + dvp] * d16[i][11]) +\r
1155                                         (v1[3 + dvp] * d16[i][12]) +\r
1156                                         (v1[2 + dvp] * d16[i][13]) +\r
1157                                         (v1[1 + dvp] * d16[i][14]) +\r
1158                                         (v1[0 + dvp] * d16[i][15])\r
1159                                         ) * scalefactor);\r
1160 \r
1161             _tmpOut[i] = pcm_sample;                    \r
1162                         dvp += 16;\r
1163                         } // for\r
1164                 }\r
1165                                  \r
1166 private void compute_pcm_samples(@LOC("GLOBAL") Obuffer buffer)\r
1167 {\r
1168         \r
1169         switch (actual_write_pos)\r
1170         {\r
1171         case 0: \r
1172                 compute_pcm_samples0(buffer);\r
1173                 break;\r
1174         case 1: \r
1175                 compute_pcm_samples1(buffer);\r
1176                 break;\r
1177         case 2: \r
1178                 compute_pcm_samples2(buffer);\r
1179                 break;\r
1180         case 3: \r
1181                 compute_pcm_samples3(buffer);\r
1182                 break;\r
1183         case 4: \r
1184                 compute_pcm_samples4(buffer);\r
1185                 break;\r
1186         case 5: \r
1187                 compute_pcm_samples5(buffer);\r
1188                 break;\r
1189         case 6: \r
1190                 compute_pcm_samples6(buffer);\r
1191                 break;\r
1192         case 7: \r
1193                 compute_pcm_samples7(buffer);\r
1194                 break;\r
1195         case 8: \r
1196                 compute_pcm_samples8(buffer);\r
1197                 break;\r
1198         case 9: \r
1199                 compute_pcm_samples9(buffer);\r
1200                 break;\r
1201         case 10: \r
1202                 compute_pcm_samples10(buffer);\r
1203                 break;\r
1204         case 11: \r
1205                 compute_pcm_samples11(buffer);\r
1206                 break;\r
1207         case 12: \r
1208                 compute_pcm_samples12(buffer);\r
1209                 break;\r
1210         case 13: \r
1211                 compute_pcm_samples13(buffer);\r
1212                 break;\r
1213         case 14: \r
1214                 compute_pcm_samples14(buffer);\r
1215                 break;\r
1216         case 15: \r
1217                 compute_pcm_samples15(buffer);\r
1218                 break;\r
1219         }\r
1220                 \r
1221         if (buffer!=null)\r
1222         {               \r
1223                 buffer.appendSamples(channel, _tmpOut);\r
1224         }\r
1225          \r
1226 /*\r
1227          // MDM: I was considering putting in quality control for\r
1228          // low-spec CPUs, but the performance gain (about 10-15%) \r
1229          // did not justify the considerable drop in audio quality.\r
1230                 switch (inc)\r
1231                 {\r
1232                 case 16:                 \r
1233                     buffer.appendSamples(channel, tmpOut);\r
1234                     break;\r
1235                 case 32:\r
1236                         for (int i=0; i<16; i++)\r
1237                         {\r
1238                                 buffer.append(channel, (short)tmpOut[i]);\r
1239                                 buffer.append(channel, (short)tmpOut[i]); \r
1240                         }\r
1241                         break;                  \r
1242                 case 64:\r
1243                         for (int i=0; i<8; i++)\r
1244                         {\r
1245                                 buffer.append(channel, (short)tmpOut[i]);\r
1246                                 buffer.append(channel, (short)tmpOut[i]);\r
1247                                 buffer.append(channel, (short)tmpOut[i]);\r
1248                                 buffer.append(channel, (short)tmpOut[i]); \r
1249                         }\r
1250                         break;                  \r
1251         \r
1252                 }\r
1253 */       \r
1254   }\r
1255 \r
1256   /**\r
1257    * Calculate 32 PCM samples and put the into the Obuffer-object.\r
1258    */\r
1259   \r
1260   @LATTICE("V<THIS,THIS<SH,SH*,THISLOC=THIS")   \r
1261   public void calculate_pcm_samples(@LOC("V") Obuffer buffer)\r
1262   {\r
1263         compute_new_v();        \r
1264         compute_pcm_samples(buffer);\r
1265     \r
1266         actual_write_pos = (actual_write_pos + 1) & 0xf;\r
1267 //      actual_v = (actual_v == v1) ? v2 : v1;\r
1268 \r
1269         // initialize samples[]:        \r
1270     //for (register float *floatp = samples + 32; floatp > samples; )\r
1271         // *--floatp = 0.0f;  \r
1272         \r
1273         // MDM: this may not be necessary. The Layer III decoder always\r
1274         // outputs 32 subband samples, but I haven't checked layer I & II.\r
1275         for (@LOC("SH") int p=0;p<32;p++) \r
1276                 samples[p] = 0.0f;\r
1277   }\r
1278   \r
1279   \r
1280   @LOC("EQ") private static final double MY_PI = 3.14159265358979323846;\r
1281   @LOC("SA") private static final float cos1_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 64.0)));\r
1282   @LOC("SA") private static final float cos3_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 64.0)));\r
1283   @LOC("SA") private static final float cos5_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 64.0)));\r
1284   @LOC("SA") private static final float cos7_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 64.0)));\r
1285   @LOC("SA") private static final float cos9_64  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0  / 64.0)));\r
1286   @LOC("SA") private static final float cos11_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 64.0)));\r
1287   @LOC("SA") private static final float cos13_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 64.0)));\r
1288   @LOC("SA") private static final float cos15_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 64.0)));\r
1289   @LOC("SA") private static final float cos17_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 17.0 / 64.0)));\r
1290   @LOC("SA") private static final float cos19_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 19.0 / 64.0)));\r
1291   @LOC("SA") private static final float cos21_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 21.0 / 64.0)));\r
1292   @LOC("SA") private static final float cos23_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 23.0 / 64.0)));\r
1293   @LOC("SA") private static final float cos25_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 25.0 / 64.0)));\r
1294   @LOC("SA") private static final float cos27_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 27.0 / 64.0)));\r
1295   @LOC("SA") private static final float cos29_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 29.0 / 64.0)));\r
1296   @LOC("SA") private static final float cos31_64 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 31.0 / 64.0)));\r
1297   @LOC("SA") private static final float cos1_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 32.0)));\r
1298   @LOC("SA") private static final float cos3_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 32.0)));\r
1299   @LOC("SA") private static final float cos5_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 32.0)));\r
1300   @LOC("SA") private static final float cos7_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 32.0)));\r
1301   @LOC("SA") private static final float cos9_32  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 9.0  / 32.0)));\r
1302   @LOC("SA") private static final float cos11_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 11.0 / 32.0)));\r
1303   @LOC("SA") private static final float cos13_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 13.0 / 32.0)));\r
1304   @LOC("SA") private static final float cos15_32 =(float) (1.0 / (2.0 * Math.cos(MY_PI * 15.0 / 32.0)));\r
1305   @LOC("SA") private static final float cos1_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 16.0)));\r
1306   @LOC("SA") private static final float cos3_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 16.0)));\r
1307   @LOC("SA") private static final float cos5_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 5.0  / 16.0)));\r
1308   @LOC("SA") private static final float cos7_16  =(float) (1.0 / (2.0 * Math.cos(MY_PI * 7.0  / 16.0)));\r
1309   @LOC("SA") private static final float cos1_8   =(float) (1.0 / (2.0 * Math.cos(MY_PI        / 8.0)));\r
1310   @LOC("SA") private static final float cos3_8   =(float) (1.0 / (2.0 * Math.cos(MY_PI * 3.0  / 8.0)));\r
1311   @LOC("SA") private static final float cos1_4   =(float) (1.0 / (2.0 * Math.cos(MY_PI / 4.0)));\r
1312   \r
1313   // Note: These values are not in the same order\r
1314   // as in Annex 3-B.3 of the ISO/IEC DIS 11172-3 \r
1315   // private float d[] = {0.000000000, -4.000442505};\r
1316   \r
1317 //  @LOC("V2") private static float d[] = null;\r
1318   \r
1319   /** \r
1320    * d[] split into subarrays of length 16. This provides for\r
1321    * more faster access by allowing a block of 16 to be addressed\r
1322    * with constant offset. \r
1323    **/\r
1324   @LOC("V2") private static float d16[][] = null;       \r
1325   \r
1326         /**\r
1327          * Converts a 1D array into a number of smaller arrays. This is used\r
1328          * to achieve offset + constant indexing into an array. Each sub-array\r
1329          * represents a block of values of the original array. \r
1330          * @param array                 The array to split up into blocks.\r
1331          * @param blockSize             The size of the blocks to split the array\r
1332          *                                              into. This must be an exact divisor of\r
1333          *                                              the length of the array, or some data\r
1334          *                                              will be lost from the main array.\r
1335          * \r
1336          * @return      An array of arrays in which each element in the returned\r
1337          *                      array will be of length <code>blockSize</code>.\r
1338          */\r
1339         static private float[][] splitArray(final float[] array, final int blockSize)\r
1340         {\r
1341                 int size = array.length / blockSize;\r
1342                 float[][] split = new float[size][];\r
1343                 for (int i=0; i<size; i++)\r
1344                 {\r
1345                         split[i] = subArray(array, i*blockSize, blockSize);\r
1346                 }\r
1347                 return split;\r
1348         }\r
1349         \r
1350         /**\r
1351          * Returns a subarray of an existing array.\r
1352          * \r
1353          * @param array The array to retrieve a subarra from.\r
1354          * @param offs  The offset in the array that corresponds to\r
1355          *                              the first index of the subarray.\r
1356          * @param len   The number of indeces in the subarray.\r
1357          * @return The subarray, which may be of length 0.\r
1358          */\r
1359         static private float[] subArray(final float[] array, final int offs, int len)\r
1360         {\r
1361                 if (offs+len > array.length)\r
1362                 {\r
1363                         len = array.length-offs;\r
1364                 }\r
1365                 \r
1366                 if (len < 0)\r
1367                         len = 0;\r
1368                 \r
1369                 float[] subarray = new float[len];\r
1370                 for (int i=0; i<len; i++)\r
1371                 {\r
1372                         subarray[i] = array[offs+i];\r
1373                 }\r
1374                 \r
1375                 return subarray;\r
1376         }\r
1377         \r
1378         // The original data for d[]. This data is loaded from a file\r
1379         // to reduce the overall package size and to improve performance. \r
1380 \r
1381   static final float d[] = {\r
1382         0.000000000f, -0.000442505f,  0.003250122f, -0.007003784f,\r
1383         0.031082153f, -0.078628540f,  0.100311279f, -0.572036743f,\r
1384         1.144989014f,  0.572036743f,  0.100311279f,  0.078628540f,\r
1385         0.031082153f,  0.007003784f,  0.003250122f,  0.000442505f,\r
1386    -0.000015259f, -0.000473022f,  0.003326416f, -0.007919312f,\r
1387         0.030517578f, -0.084182739f,  0.090927124f, -0.600219727f,\r
1388         1.144287109f,  0.543823242f,  0.108856201f,  0.073059082f,\r
1389         0.031478882f,  0.006118774f,  0.003173828f,  0.000396729f,\r
1390    -0.000015259f, -0.000534058f,  0.003387451f, -0.008865356f,\r
1391         0.029785156f, -0.089706421f,  0.080688477f, -0.628295898f,\r
1392         1.142211914f,  0.515609741f,  0.116577148f,  0.067520142f,\r
1393     0.031738281f,  0.005294800f,  0.003082275f,  0.000366211f,\r
1394    -0.000015259f, -0.000579834f,  0.003433228f, -0.009841919f,\r
1395     0.028884888f, -0.095169067f,  0.069595337f, -0.656219482f,\r
1396         1.138763428f,  0.487472534f,  0.123474121f,  0.061996460f,\r
1397     0.031845093f,  0.004486084f,  0.002990723f,  0.000320435f,\r
1398    -0.000015259f, -0.000625610f,  0.003463745f, -0.010848999f,\r
1399     0.027801514f, -0.100540161f,  0.057617188f, -0.683914185f,\r
1400         1.133926392f,  0.459472656f,  0.129577637f,  0.056533813f,\r
1401         0.031814575f,  0.003723145f,  0.002899170f,  0.000289917f,\r
1402    -0.000015259f, -0.000686646f,  0.003479004f, -0.011886597f,\r
1403         0.026535034f, -0.105819702f,  0.044784546f, -0.711318970f,\r
1404         1.127746582f,  0.431655884f,  0.134887695f,  0.051132202f,\r
1405         0.031661987f,  0.003005981f,  0.002792358f,  0.000259399f,\r
1406    -0.000015259f, -0.000747681f,  0.003479004f, -0.012939453f,\r
1407         0.025085449f, -0.110946655f,  0.031082153f, -0.738372803f,\r
1408     1.120223999f,  0.404083252f,  0.139450073f,  0.045837402f,\r
1409     0.031387329f,  0.002334595f,  0.002685547f,  0.000244141f,\r
1410    -0.000030518f, -0.000808716f,  0.003463745f, -0.014022827f,\r
1411     0.023422241f, -0.115921021f,  0.016510010f, -0.765029907f,\r
1412         1.111373901f,  0.376800537f,  0.143264771f,  0.040634155f,\r
1413     0.031005859f,  0.001693726f,  0.002578735f,  0.000213623f,\r
1414    -0.000030518f, -0.000885010f,  0.003417969f, -0.015121460f,\r
1415         0.021575928f, -0.120697021f,  0.001068115f, -0.791213989f,\r
1416     1.101211548f,  0.349868774f,  0.146362305f,  0.035552979f,\r
1417         0.030532837f,  0.001098633f,  0.002456665f,  0.000198364f,\r
1418    -0.000030518f, -0.000961304f,  0.003372192f, -0.016235352f,\r
1419     0.019531250f, -0.125259399f, -0.015228271f, -0.816864014f,\r
1420         1.089782715f,  0.323318481f,  0.148773193f,  0.030609131f,\r
1421         0.029937744f,  0.000549316f,  0.002349854f,  0.000167847f,\r
1422    -0.000030518f, -0.001037598f,  0.003280640f, -0.017349243f,\r
1423         0.017257690f, -0.129562378f, -0.032379150f, -0.841949463f,\r
1424     1.077117920f,  0.297210693f,  0.150497437f,  0.025817871f,\r
1425     0.029281616f,  0.000030518f,  0.002243042f,  0.000152588f,\r
1426    -0.000045776f, -0.001113892f,  0.003173828f, -0.018463135f,\r
1427         0.014801025f, -0.133590698f, -0.050354004f, -0.866363525f,\r
1428         1.063217163f,  0.271591187f,  0.151596069f,  0.021179199f,\r
1429         0.028533936f, -0.000442505f,  0.002120972f,  0.000137329f,\r
1430    -0.000045776f, -0.001205444f,  0.003051758f, -0.019577026f,\r
1431         0.012115479f, -0.137298584f, -0.069168091f, -0.890090942f,\r
1432         1.048156738f,  0.246505737f,  0.152069092f,  0.016708374f,\r
1433         0.027725220f, -0.000869751f,  0.002014160f,  0.000122070f,\r
1434    -0.000061035f, -0.001296997f,  0.002883911f, -0.020690918f,\r
1435     0.009231567f, -0.140670776f, -0.088775635f, -0.913055420f,\r
1436         1.031936646f,  0.221984863f,  0.151962280f,  0.012420654f,\r
1437     0.026840210f, -0.001266479f,  0.001907349f,  0.000106812f,\r
1438    -0.000061035f, -0.001388550f,  0.002700806f, -0.021789551f,\r
1439         0.006134033f, -0.143676758f, -0.109161377f, -0.935195923f,\r
1440     1.014617920f,  0.198059082f,  0.151306152f,  0.008316040f,\r
1441         0.025909424f, -0.001617432f,  0.001785278f,  0.000106812f,\r
1442    -0.000076294f, -0.001480103f,  0.002487183f, -0.022857666f,\r
1443         0.002822876f, -0.146255493f, -0.130310059f, -0.956481934f,\r
1444         0.996246338f,  0.174789429f,  0.150115967f,  0.004394531f,\r
1445     0.024932861f, -0.001937866f,  0.001693726f,  0.000091553f,\r
1446    -0.000076294f, -0.001586914f,  0.002227783f, -0.023910522f,\r
1447    -0.000686646f, -0.148422241f, -0.152206421f, -0.976852417f,\r
1448     0.976852417f,  0.152206421f,  0.148422241f,  0.000686646f,\r
1449         0.023910522f, -0.002227783f,  0.001586914f,  0.000076294f,\r
1450    -0.000091553f, -0.001693726f,  0.001937866f, -0.024932861f,\r
1451    -0.004394531f, -0.150115967f, -0.174789429f, -0.996246338f,\r
1452     0.956481934f,  0.130310059f,  0.146255493f, -0.002822876f,\r
1453     0.022857666f, -0.002487183f,  0.001480103f,  0.000076294f,\r
1454    -0.000106812f, -0.001785278f,  0.001617432f, -0.025909424f,\r
1455    -0.008316040f, -0.151306152f, -0.198059082f, -1.014617920f,\r
1456     0.935195923f,  0.109161377f,  0.143676758f, -0.006134033f,\r
1457     0.021789551f, -0.002700806f,  0.001388550f,  0.000061035f,\r
1458    -0.000106812f, -0.001907349f,  0.001266479f, -0.026840210f,\r
1459    -0.012420654f, -0.151962280f, -0.221984863f, -1.031936646f,\r
1460         0.913055420f,  0.088775635f,  0.140670776f, -0.009231567f,\r
1461         0.020690918f, -0.002883911f,  0.001296997f,  0.000061035f,\r
1462    -0.000122070f, -0.002014160f,  0.000869751f, -0.027725220f,\r
1463    -0.016708374f, -0.152069092f, -0.246505737f, -1.048156738f,\r
1464     0.890090942f,  0.069168091f,  0.137298584f, -0.012115479f,\r
1465         0.019577026f, -0.003051758f,  0.001205444f,  0.000045776f,\r
1466    -0.000137329f, -0.002120972f,  0.000442505f, -0.028533936f,\r
1467    -0.021179199f, -0.151596069f, -0.271591187f, -1.063217163f,\r
1468     0.866363525f,  0.050354004f,  0.133590698f, -0.014801025f,\r
1469     0.018463135f, -0.003173828f,  0.001113892f,  0.000045776f,\r
1470    -0.000152588f, -0.002243042f, -0.000030518f, -0.029281616f,\r
1471    -0.025817871f, -0.150497437f, -0.297210693f, -1.077117920f,\r
1472         0.841949463f,  0.032379150f,  0.129562378f, -0.017257690f,\r
1473         0.017349243f, -0.003280640f,  0.001037598f,  0.000030518f,\r
1474    -0.000167847f, -0.002349854f, -0.000549316f, -0.029937744f,\r
1475    -0.030609131f, -0.148773193f, -0.323318481f, -1.089782715f,\r
1476         0.816864014f,  0.015228271f,  0.125259399f, -0.019531250f,\r
1477     0.016235352f, -0.003372192f,  0.000961304f,  0.000030518f,\r
1478    -0.000198364f, -0.002456665f, -0.001098633f, -0.030532837f,\r
1479    -0.035552979f, -0.146362305f, -0.349868774f, -1.101211548f,\r
1480         0.791213989f, -0.001068115f,  0.120697021f, -0.021575928f,\r
1481         0.015121460f, -0.003417969f,  0.000885010f,  0.000030518f,\r
1482    -0.000213623f, -0.002578735f, -0.001693726f, -0.031005859f,\r
1483    -0.040634155f, -0.143264771f, -0.376800537f, -1.111373901f,\r
1484     0.765029907f, -0.016510010f,  0.115921021f, -0.023422241f,\r
1485     0.014022827f, -0.003463745f,  0.000808716f,  0.000030518f,\r
1486    -0.000244141f, -0.002685547f, -0.002334595f, -0.031387329f,\r
1487    -0.045837402f, -0.139450073f, -0.404083252f, -1.120223999f,\r
1488     0.738372803f, -0.031082153f,  0.110946655f, -0.025085449f,\r
1489         0.012939453f, -0.003479004f,  0.000747681f,  0.000015259f,\r
1490    -0.000259399f, -0.002792358f, -0.003005981f, -0.031661987f,\r
1491    -0.051132202f, -0.134887695f, -0.431655884f, -1.127746582f,\r
1492         0.711318970f, -0.044784546f,  0.105819702f, -0.026535034f,\r
1493     0.011886597f, -0.003479004f,  0.000686646f,  0.000015259f,\r
1494    -0.000289917f, -0.002899170f, -0.003723145f, -0.031814575f,\r
1495    -0.056533813f, -0.129577637f, -0.459472656f, -1.133926392f,\r
1496     0.683914185f, -0.057617188f,  0.100540161f, -0.027801514f,\r
1497         0.010848999f, -0.003463745f,  0.000625610f,  0.000015259f,\r
1498    -0.000320435f, -0.002990723f, -0.004486084f, -0.031845093f,\r
1499    -0.061996460f, -0.123474121f, -0.487472534f, -1.138763428f,\r
1500         0.656219482f, -0.069595337f,  0.095169067f, -0.028884888f,\r
1501         0.009841919f, -0.003433228f,  0.000579834f,  0.000015259f,\r
1502    -0.000366211f, -0.003082275f, -0.005294800f, -0.031738281f,\r
1503    -0.067520142f, -0.116577148f, -0.515609741f, -1.142211914f,\r
1504         0.628295898f, -0.080688477f,  0.089706421f, -0.029785156f,\r
1505         0.008865356f, -0.003387451f,  0.000534058f,  0.000015259f,\r
1506    -0.000396729f, -0.003173828f, -0.006118774f, -0.031478882f,\r
1507    -0.073059082f, -0.108856201f, -0.543823242f, -1.144287109f,\r
1508         0.600219727f, -0.090927124f,  0.084182739f, -0.030517578f,\r
1509         0.007919312f, -0.003326416f,  0.000473022f,  0.000015259f\r
1510         };\r
1511   \r
1512   \r
1513 }\r