more changes.
[IRC.git] / Robust / src / Tests / ssJava / mp3decoder / LayerIIDecoder.java
1 /*
2  * 11/19/04  1.0 moved to LGPL.
3  * 
4  * 29/05/01  Michael Scheerer,  Fixed some C++ to Java porting bugs. 
5  *
6  * 16/07/01  Michael Scheerer, Catched a bug in method
7  *           read_sampledata, which causes an outOfIndexException.
8  * 
9  * 12/12/99  Initial version. Adapted from javalayer.java
10  *                       and Subband*.java. mdm@techie.com
11  *
12  * 02/28/99  Initial version : javalayer.java by E.B
13  *-----------------------------------------------------------------------
14  *   This program is free software; you can redistribute it and/or modify
15  *   it under the terms of the GNU Library General Public License as published
16  *   by the Free Software Foundation; either version 2 of the License, or
17  *   (at your option) any later version.
18  *
19  *   This program is distributed in the hope that it will be useful,
20  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *   GNU Library General Public License for more details.
23  *
24  *   You should have received a copy of the GNU Library General Public
25  *   License along with this program; if not, write to the Free Software
26  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27  *----------------------------------------------------------------------
28  */
29
30
31 /**
32  * Implements decoding of MPEG Audio Layer II frames. 
33  */
34 @LATTICE("L<SH,SH<H,SH*")
35 @METHODDEFAULT("OUT<V,V<SH,SH<IN,SH*,THISLOC=V,GLOBALLOC=IN")
36 class LayerIIDecoder extends LayerIDecoder implements FrameDecoder  
37 {
38
39         public LayerIIDecoder()
40         {
41         }
42
43         
44         protected void createSubbands()
45         {               
46                 @LOC("V,LayerIIDecoder.SH") int i;
47                 if (mode == Header.SINGLE_CHANNEL)
48                   for (i = 0; i < num_subbands; ++i)
49                     subbands[i] = new SubbandLayer2(i);
50                 else if (mode == Header.JOINT_STEREO)
51                 {
52                   for (i = 0; i < header.intensity_stereo_bound(); ++i)
53                       subbands[i] = new SubbandLayer2Stereo(i);
54                   for (; i < num_subbands; ++i)
55                       subbands[i] = new SubbandLayer2IntensityStereo(i);
56                 }
57                 else
58                 {
59                   for (i = 0; i < num_subbands; ++i)
60                       subbands[i] = new SubbandLayer2Stereo(i);
61         }
62                 
63         }
64         
65         protected void readScaleFactorSelection()
66         {
67           // eom note: num_subbands is defined in LayerIDecoder so it has (THIS, LayerIDecoder) Loc
68               for (@LOC("V,LayerIIDecoder.SH") int i = 0; i < num_subbands; ++i){
69                 ((SubbandLayer2)subbands[i]).read_scalefactor_selection(stream, crc);
70               }
71         }
72         
73         
74
75          /**
76           * Class for layer II subbands in single channel mode.
77           */
78      @LATTICE("S<L,L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,H<SH,SN*,GN*")
79         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
80         static class SubbandLayer2 extends Subband
81         {
82           // this table contains 3 requantized samples for each legal codeword
83           // when grouped in 5 bits, i.e. 3 quantizationsteps per sample
84         @LOC("H") public static final float grouping_5bits[] = new float[]
85         {
86           -2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f,
87                          0.0f, -2.0f/3.0f, -2.0f/3.0f,
88                 2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f,
89           -2.0f/3.0f,      0.0f, -2.0f/3.0f,
90                          0.0f,      0.0f, -2.0f/3.0f,
91                 2.0f/3.0f,      0.0f, -2.0f/3.0f,
92           -2.0f/3.0f,  2.0f/3.0f, -2.0f/3.0f,
93                          0.0f,  2.0f/3.0f, -2.0f/3.0f,
94                 2.0f/3.0f,  2.0f/3.0f, -2.0f/3.0f,
95           -2.0f/3.0f, -2.0f/3.0f,      0.0f,
96                          0.0f, -2.0f/3.0f,      0.0f,
97                 2.0f/3.0f, -2.0f/3.0f,      0.0f,
98           -2.0f/3.0f,      0.0f,      0.0f,
99                          0.0f,      0.0f,      0.0f,
100                 2.0f/3.0f,      0.0f,      0.0f,
101           -2.0f/3.0f,  2.0f/3.0f,      0.0f,
102                          0.0f,  2.0f/3.0f,      0.0f,
103                 2.0f/3.0f,  2.0f/3.0f,      0.0f,
104           -2.0f/3.0f, -2.0f/3.0f,  2.0f/3.0f,
105                0.0f, -2.0f/3.0f,  2.0f/3.0f,
106                 2.0f/3.0f, -2.0f/3.0f,  2.0f/3.0f,
107           -2.0f/3.0f,      0.0f,  2.0f/3.0f,
108                0.0f,      0.0f,  2.0f/3.0f,
109            2.0f/3.0f,      0.0f,  2.0f/3.0f,
110           -2.0f/3.0f,  2.0f/3.0f,  2.0f/3.0f,
111                          0.0f,  2.0f/3.0f,  2.0f/3.0f,
112            2.0f/3.0f,  2.0f/3.0f,  2.0f/3.0f
113         };
114
115         // this table contains 3 requantized samples for each legal codeword
116         // when grouped in 7 bits, i.e. 5 quantizationsteps per sample
117         @LOC("H") public static final float grouping_7bits[] = new float[]
118         {
119           -0.8f, -0.8f, -0.8f,   -0.4f, -0.8f, -0.8f,    0.0f, -0.8f, -0.8f,    0.4f, -0.8f, -0.8f,    0.8f, -0.8f, -0.8f,
120           -0.8f, -0.4f, -0.8f,   -0.4f, -0.4f, -0.8f,    0.0f, -0.4f, -0.8f,    0.4f, -0.4f, -0.8f,    0.8f, -0.4f, -0.8f,
121           -0.8f,  0.0f, -0.8f,   -0.4f,  0.0f, -0.8f,    0.0f,  0.0f, -0.8f,    0.4f,  0.0f, -0.8f,    0.8f,  0.0f, -0.8f,
122           -0.8f,  0.4f, -0.8f,   -0.4f,  0.4f, -0.8f,    0.0f,  0.4f, -0.8f,    0.4f,  0.4f, -0.8f,    0.8f,  0.4f, -0.8f,
123           -0.8f,  0.8f, -0.8f,   -0.4f,  0.8f, -0.8f,    0.0f,  0.8f, -0.8f,    0.4f,  0.8f, -0.8f,    0.8f,  0.8f, -0.8f,
124           -0.8f, -0.8f, -0.4f,   -0.4f, -0.8f, -0.4f,    0.0f, -0.8f, -0.4f,    0.4f, -0.8f, -0.4f,    0.8f, -0.8f, -0.4f,
125           -0.8f, -0.4f, -0.4f,   -0.4f, -0.4f, -0.4f,    0.0f, -0.4f, -0.4f,    0.4f, -0.4f, -0.4f,    0.8f, -0.4f, -0.4f,
126           -0.8f,  0.0f, -0.4f,   -0.4f,  0.0f, -0.4f,    0.0f,  0.0f, -0.4f,    0.4f,  0.0f, -0.4f,    0.8f,  0.0f, -0.4f,
127           -0.8f,  0.4f, -0.4f,   -0.4f,  0.4f, -0.4f,    0.0f,  0.4f, -0.4f,    0.4f,  0.4f, -0.4f,    0.8f,  0.4f, -0.4f,
128           -0.8f,  0.8f, -0.4f,   -0.4f,  0.8f, -0.4f,    0.0f,  0.8f, -0.4f,    0.4f,  0.8f, -0.4f,    0.8f,  0.8f, -0.4f,
129           -0.8f, -0.8f,  0.0f,   -0.4f, -0.8f,  0.0f,    0.0f, -0.8f,  0.0f,    0.4f, -0.8f,  0.0f,    0.8f, -0.8f,  0.0f,
130           -0.8f, -0.4f,  0.0f,   -0.4f, -0.4f,  0.0f,    0.0f, -0.4f,  0.0f,    0.4f, -0.4f,  0.0f,    0.8f, -0.4f,  0.0f,
131           -0.8f,  0.0f,  0.0f,   -0.4f,  0.0f,  0.0f,    0.0f,  0.0f,  0.0f,    0.4f,  0.0f,  0.0f,    0.8f,  0.0f,  0.0f,
132           -0.8f,  0.4f,  0.0f,   -0.4f,  0.4f,  0.0f,    0.0f,  0.4f,  0.0f,    0.4f,  0.4f,  0.0f,    0.8f,  0.4f,  0.0f,
133           -0.8f,  0.8f,  0.0f,   -0.4f,  0.8f,  0.0f,    0.0f,  0.8f,  0.0f,    0.4f,  0.8f,  0.0f,    0.8f,  0.8f,  0.0f,
134           -0.8f, -0.8f,  0.4f,   -0.4f, -0.8f,  0.4f,    0.0f, -0.8f,  0.4f,    0.4f, -0.8f,  0.4f,    0.8f, -0.8f,  0.4f,
135           -0.8f, -0.4f,  0.4f,   -0.4f, -0.4f,  0.4f,    0.0f, -0.4f,  0.4f,    0.4f, -0.4f,  0.4f,    0.8f, -0.4f,  0.4f,
136           -0.8f,  0.0f,  0.4f,   -0.4f,  0.0f,  0.4f,    0.0f,  0.0f,  0.4f,    0.4f,  0.0f,  0.4f,    0.8f,  0.0f,  0.4f,
137           -0.8f,  0.4f,  0.4f,   -0.4f,  0.4f,  0.4f,    0.0f,  0.4f,  0.4f,    0.4f,  0.4f,  0.4f,    0.8f,  0.4f,  0.4f,
138           -0.8f,  0.8f,  0.4f,   -0.4f,  0.8f,  0.4f,    0.0f,  0.8f,  0.4f,    0.4f,  0.8f,  0.4f,    0.8f,  0.8f,  0.4f,
139           -0.8f, -0.8f,  0.8f,   -0.4f, -0.8f,  0.8f,    0.0f, -0.8f,  0.8f,    0.4f, -0.8f,  0.8f,    0.8f, -0.8f,  0.8f,
140           -0.8f, -0.4f,  0.8f,   -0.4f, -0.4f,  0.8f,    0.0f, -0.4f,  0.8f,    0.4f, -0.4f,  0.8f,    0.8f, -0.4f,  0.8f,
141           -0.8f,  0.0f,  0.8f,   -0.4f,  0.0f,  0.8f,    0.0f,  0.0f,  0.8f,    0.4f,  0.0f,  0.8f,    0.8f,  0.0f,  0.8f,
142           -0.8f,  0.4f,  0.8f,   -0.4f,  0.4f,  0.8f,    0.0f,  0.4f,  0.8f,    0.4f,  0.4f,  0.8f,    0.8f,  0.4f,  0.8f,
143           -0.8f,  0.8f,  0.8f,   -0.4f,  0.8f,  0.8f,    0.0f,  0.8f,  0.8f,    0.4f,  0.8f,  0.8f,    0.8f,  0.8f,  0.8f
144         };
145
146         // this table contains 3 requantized samples for each legal codeword
147         // when grouped in 10 bits, i.e. 9 quantizationsteps per sample
148         @LOC("H") public static final float grouping_10bits[] =
149         {
150           -8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
151           -2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,        0.0f, -8.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
152                 4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
153           -8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
154           -2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,        0.0f, -6.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
155                 4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
156           -8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
157           -2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,        0.0f, -4.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
158                 4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
159           -8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
160           -2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,        0.0f, -2.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
161                 4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
162           -8.0f/9.0f,      0.0f, -8.0f/9.0f,   -6.0f/9.0f,      0.0f, -8.0f/9.0f,   -4.0f/9.0f,      0.0f, -8.0f/9.0f,
163           -2.0f/9.0f,      0.0f, -8.0f/9.0f,        0.0f,      0.0f, -8.0f/9.0f,    2.0f/9.0f,      0.0f, -8.0f/9.0f,
164                 4.0f/9.0f,      0.0f, -8.0f/9.0f,    6.0f/9.0f,      0.0f, -8.0f/9.0f,    8.0f/9.0f,      0.0f, -8.0f/9.0f,
165           -8.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
166           -2.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,        0.0f,  2.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
167                 4.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
168           -8.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
169           -2.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,        0.0f,  4.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
170                 4.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
171           -8.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
172           -2.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,        0.0f,  6.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
173                 4.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
174           -8.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
175           -2.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,        0.0f,  8.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
176                 4.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
177           -8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
178           -2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,        0.0f, -8.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
179                 4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
180           -8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
181           -2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,        0.0f, -6.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
182                 4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
183           -8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
184           -2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,        0.0f, -4.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
185                 4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
186           -8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
187           -2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,        0.0f, -2.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
188                 4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
189           -8.0f/9.0f,      0.0f, -6.0f/9.0f,   -6.0f/9.0f,      0.0f, -6.0f/9.0f,   -4.0f/9.0f,      0.0f, -6.0f/9.0f,
190           -2.0f/9.0f,      0.0f, -6.0f/9.0f,        0.0f,      0.0f, -6.0f/9.0f,    2.0f/9.0f,      0.0f, -6.0f/9.0f,
191                 4.0f/9.0f,      0.0f, -6.0f/9.0f,    6.0f/9.0f,      0.0f, -6.0f/9.0f,    8.0f/9.0f,      0.0f, -6.0f/9.0f,
192           -8.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
193           -2.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,        0.0f,  2.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
194                 4.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
195           -8.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
196           -2.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,        0.0f,  4.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
197                 4.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
198           -8.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
199           -2.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,        0.0f,  6.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
200                 4.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
201           -8.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
202           -2.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,        0.0f,  8.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
203                 4.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
204           -8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
205           -2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,        0.0f, -8.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
206                 4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
207           -8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
208           -2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,        0.0f, -6.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
209                 4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
210           -8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
211           -2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,        0.0f, -4.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
212                 4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
213           -8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
214           -2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,        0.0f, -2.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
215                 4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
216           -8.0f/9.0f,      0.0f, -4.0f/9.0f,   -6.0f/9.0f,      0.0f, -4.0f/9.0f,   -4.0f/9.0f,      0.0f, -4.0f/9.0f,
217           -2.0f/9.0f,      0.0f, -4.0f/9.0f,        0.0f,      0.0f, -4.0f/9.0f,    2.0f/9.0f,      0.0f, -4.0f/9.0f,
218                 4.0f/9.0f,      0.0f, -4.0f/9.0f,    6.0f/9.0f,      0.0f, -4.0f/9.0f,    8.0f/9.0f,      0.0f, -4.0f/9.0f,
219           -8.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
220           -2.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,        0.0f,  2.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
221                 4.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
222           -8.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
223           -2.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,        0.0f,  4.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
224                 4.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
225           -8.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
226           -2.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,        0.0f,  6.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
227                 4.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
228           -8.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
229           -2.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,        0.0f,  8.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
230                 4.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
231           -8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
232           -2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,        0.0f, -8.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
233                 4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
234           -8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
235           -2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,        0.0f, -6.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
236                 4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
237           -8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
238           -2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,        0.0f, -4.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
239                 4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
240           -8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
241           -2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,        0.0f, -2.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
242                 4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
243           -8.0f/9.0f,      0.0f, -2.0f/9.0f,   -6.0f/9.0f,      0.0f, -2.0f/9.0f,   -4.0f/9.0f,      0.0f, -2.0f/9.0f,
244           -2.0f/9.0f,      0.0f, -2.0f/9.0f,        0.0f,      0.0f, -2.0f/9.0f,    2.0f/9.0f,      0.0f, -2.0f/9.0f,
245                 4.0f/9.0f,      0.0f, -2.0f/9.0f,    6.0f/9.0f,      0.0f, -2.0f/9.0f,    8.0f/9.0f,      0.0f, -2.0f/9.0f,
246           -8.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
247           -2.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,        0.0f,  2.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
248                 4.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
249           -8.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
250           -2.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,        0.0f,  4.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
251                 4.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
252           -8.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
253           -2.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,        0.0f,  6.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
254                 4.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
255           -8.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
256           -2.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,        0.0f,  8.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
257                 4.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
258           -8.0f/9.0f, -8.0f/9.0f,      0.0f,   -6.0f/9.0f, -8.0f/9.0f,      0.0f,   -4.0f/9.0f, -8.0f/9.0f,      0.0f,
259           -2.0f/9.0f, -8.0f/9.0f,      0.0f,        0.0f, -8.0f/9.0f,      0.0f,    2.0f/9.0f, -8.0f/9.0f,      0.0f,
260                 4.0f/9.0f, -8.0f/9.0f,      0.0f,    6.0f/9.0f, -8.0f/9.0f,      0.0f,    8.0f/9.0f, -8.0f/9.0f,      0.0f,
261           -8.0f/9.0f, -6.0f/9.0f,      0.0f,   -6.0f/9.0f, -6.0f/9.0f,      0.0f,   -4.0f/9.0f, -6.0f/9.0f,      0.0f,
262           -2.0f/9.0f, -6.0f/9.0f,      0.0f,        0.0f, -6.0f/9.0f,      0.0f,    2.0f/9.0f, -6.0f/9.0f,      0.0f,
263                 4.0f/9.0f, -6.0f/9.0f,      0.0f,    6.0f/9.0f, -6.0f/9.0f,      0.0f,    8.0f/9.0f, -6.0f/9.0f,      0.0f,
264           -8.0f/9.0f, -4.0f/9.0f,      0.0f,   -6.0f/9.0f, -4.0f/9.0f,      0.0f,   -4.0f/9.0f, -4.0f/9.0f,      0.0f,
265           -2.0f/9.0f, -4.0f/9.0f,      0.0f,        0.0f, -4.0f/9.0f,      0.0f,    2.0f/9.0f, -4.0f/9.0f,      0.0f,
266                 4.0f/9.0f, -4.0f/9.0f,      0.0f,    6.0f/9.0f, -4.0f/9.0f,      0.0f,    8.0f/9.0f, -4.0f/9.0f,      0.0f,
267           -8.0f/9.0f, -2.0f/9.0f,      0.0f,   -6.0f/9.0f, -2.0f/9.0f,      0.0f,   -4.0f/9.0f, -2.0f/9.0f,      0.0f,
268           -2.0f/9.0f, -2.0f/9.0f,      0.0f,        0.0f, -2.0f/9.0f,      0.0f,    2.0f/9.0f, -2.0f/9.0f,      0.0f,
269                 4.0f/9.0f, -2.0f/9.0f,      0.0f,    6.0f/9.0f, -2.0f/9.0f,      0.0f,    8.0f/9.0f, -2.0f/9.0f,      0.0f,
270           -8.0f/9.0f,      0.0f,      0.0f,   -6.0f/9.0f,      0.0f,      0.0f,   -4.0f/9.0f,      0.0f,      0.0f,
271           -2.0f/9.0f,      0.0f,      0.0f,        0.0f,      0.0f,      0.0f,    2.0f/9.0f,      0.0f,      0.0f,
272                 4.0f/9.0f,      0.0f,      0.0f,    6.0f/9.0f,      0.0f,      0.0f,    8.0f/9.0f,      0.0f,      0.0f,
273           -8.0f/9.0f,  2.0f/9.0f,      0.0f,   -6.0f/9.0f,  2.0f/9.0f,      0.0f,   -4.0f/9.0f,  2.0f/9.0f,      0.0f,
274           -2.0f/9.0f,  2.0f/9.0f,      0.0f,        0.0f,  2.0f/9.0f,      0.0f,    2.0f/9.0f,  2.0f/9.0f,      0.0f,
275                 4.0f/9.0f,  2.0f/9.0f,      0.0f,    6.0f/9.0f,  2.0f/9.0f,      0.0f,    8.0f/9.0f,  2.0f/9.0f,      0.0f,
276           -8.0f/9.0f,  4.0f/9.0f,      0.0f,   -6.0f/9.0f,  4.0f/9.0f,      0.0f,   -4.0f/9.0f,  4.0f/9.0f,      0.0f,
277           -2.0f/9.0f,  4.0f/9.0f,      0.0f,        0.0f,  4.0f/9.0f,      0.0f,    2.0f/9.0f,  4.0f/9.0f,      0.0f,
278                 4.0f/9.0f,  4.0f/9.0f,      0.0f,    6.0f/9.0f,  4.0f/9.0f,      0.0f,    8.0f/9.0f,  4.0f/9.0f,      0.0f,
279           -8.0f/9.0f,  6.0f/9.0f,      0.0f,   -6.0f/9.0f,  6.0f/9.0f,      0.0f,   -4.0f/9.0f,  6.0f/9.0f,      0.0f,
280           -2.0f/9.0f,  6.0f/9.0f,      0.0f,        0.0f,  6.0f/9.0f,      0.0f,    2.0f/9.0f,  6.0f/9.0f,      0.0f,
281                 4.0f/9.0f,  6.0f/9.0f,      0.0f,    6.0f/9.0f,  6.0f/9.0f,      0.0f,    8.0f/9.0f,  6.0f/9.0f,      0.0f,
282           -8.0f/9.0f,  8.0f/9.0f,      0.0f,   -6.0f/9.0f,  8.0f/9.0f,      0.0f,   -4.0f/9.0f,  8.0f/9.0f,      0.0f,
283           -2.0f/9.0f,  8.0f/9.0f,      0.0f,        0.0f,  8.0f/9.0f,      0.0f,    2.0f/9.0f,  8.0f/9.0f,      0.0f,
284            4.0f/9.0f,  8.0f/9.0f,      0.0f,    6.0f/9.0f,  8.0f/9.0f,      0.0f,    8.0f/9.0f,  8.0f/9.0f,      0.0f,
285           -8.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
286           -2.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,        0.0f, -8.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
287                 4.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
288           -8.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
289           -2.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,        0.0f, -6.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
290                 4.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
291           -8.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
292           -2.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,        0.0f, -4.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
293            4.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
294           -8.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
295           -2.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,        0.0f, -2.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
296            4.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
297           -8.0f/9.0f,      0.0f,  2.0f/9.0f,   -6.0f/9.0f,      0.0f,  2.0f/9.0f,   -4.0f/9.0f,      0.0f,  2.0f/9.0f,
298           -2.0f/9.0f,      0.0f,  2.0f/9.0f,        0.0f,      0.0f,  2.0f/9.0f,    2.0f/9.0f,      0.0f,  2.0f/9.0f,
299            4.0f/9.0f,      0.0f,  2.0f/9.0f,    6.0f/9.0f,      0.0f,  2.0f/9.0f,    8.0f/9.0f,      0.0f,  2.0f/9.0f,
300           -8.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
301           -2.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,        0.0f,  2.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
302            4.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
303           -8.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
304           -2.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,        0.0f,  4.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
305                 4.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
306           -8.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
307           -2.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,        0.0f,  6.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
308            4.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
309           -8.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
310           -2.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,        0.0f,  8.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
311            4.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
312           -8.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
313           -2.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,        0.0f, -8.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
314                 4.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
315           -8.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
316           -2.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,        0.0f, -6.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
317            4.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
318           -8.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
319           -2.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,        0.0f, -4.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
320            4.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
321           -8.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
322           -2.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,        0.0f, -2.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
323                 4.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
324           -8.0f/9.0f,      0.0f,  4.0f/9.0f,   -6.0f/9.0f,      0.0f,  4.0f/9.0f,   -4.0f/9.0f,      0.0f,  4.0f/9.0f,
325           -2.0f/9.0f,      0.0f,  4.0f/9.0f,        0.0f,      0.0f,  4.0f/9.0f,    2.0f/9.0f,      0.0f,  4.0f/9.0f,
326            4.0f/9.0f,      0.0f,  4.0f/9.0f,    6.0f/9.0f,      0.0f,  4.0f/9.0f,    8.0f/9.0f,      0.0f,  4.0f/9.0f,
327           -8.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
328           -2.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,        0.0f,  2.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
329            4.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
330           -8.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
331           -2.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,        0.0f,  4.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
332            4.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
333           -8.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
334           -2.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,        0.0f,  6.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
335                 4.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
336           -8.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
337           -2.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,        0.0f,  8.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
338                 4.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
339           -8.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
340           -2.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,        0.0f, -8.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
341            4.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
342           -8.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
343           -2.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,        0.0f, -6.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
344            4.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
345           -8.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
346           -2.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,        0.0f, -4.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
347                 4.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
348           -8.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
349           -2.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,        0.0f, -2.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
350            4.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
351           -8.0f/9.0f,      0.0f,  6.0f/9.0f,   -6.0f/9.0f,      0.0f,  6.0f/9.0f,   -4.0f/9.0f,      0.0f,  6.0f/9.0f,
352           -2.0f/9.0f,      0.0f,  6.0f/9.0f,        0.0f,      0.0f,  6.0f/9.0f,    2.0f/9.0f,      0.0f,  6.0f/9.0f,
353                 4.0f/9.0f,      0.0f,  6.0f/9.0f,    6.0f/9.0f,      0.0f,  6.0f/9.0f,    8.0f/9.0f,      0.0f,  6.0f/9.0f,
354           -8.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
355           -2.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,        0.0f,  2.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
356                 4.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
357           -8.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
358           -2.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,        0.0f,  4.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
359                 4.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
360           -8.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
361           -2.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,        0.0f,  6.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
362                 4.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
363           -8.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
364           -2.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,        0.0f,  8.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
365                 4.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
366           -8.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
367           -2.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,        0.0f, -8.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
368            4.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
369           -8.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
370           -2.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,        0.0f, -6.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
371                 4.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
372           -8.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
373           -2.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,        0.0f, -4.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
374            4.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
375           -8.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
376           -2.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,        0.0f, -2.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
377            4.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
378           -8.0f/9.0f,      0.0f,  8.0f/9.0f,   -6.0f/9.0f,      0.0f,  8.0f/9.0f,   -4.0f/9.0f,      0.0f,  8.0f/9.0f,
379           -2.0f/9.0f,      0.0f,  8.0f/9.0f,        0.0f,      0.0f,  8.0f/9.0f,    2.0f/9.0f,      0.0f,  8.0f/9.0f,
380            4.0f/9.0f,      0.0f,  8.0f/9.0f,    6.0f/9.0f,      0.0f,  8.0f/9.0f,    8.0f/9.0f,      0.0f,  8.0f/9.0f,
381           -8.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
382           -2.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,        0.0f,  2.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
383                 4.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
384           -8.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
385           -2.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,        0.0f,  4.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
386                 4.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
387           -8.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
388           -2.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,        0.0f,  6.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
389            4.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
390           -8.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,
391           -2.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,        0.0f,  8.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,
392            4.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f
393         };
394
395         // data taken from ISO/IEC DIS 11172, Annexes 3-B.2[abcd] and 3-B.4:
396
397         // subbands 0-2 in tables 3-B.2a and 2b: (index is allocation)
398         @LOC("F") public static final int table_ab1_codelength[] =
399           // bits per codeword
400         { 0, 5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
401
402         @LOC("F") public static final float table_ab1_groupingtables[][] =
403           // pointer to sample grouping table, or NULL-pointer if ungrouped
404         { null, grouping_5bits, null, null, null, null, null, null, null, null, null, null, null, null, null, null };
405
406         @LOC("F") public static final float table_ab1_factor[] =
407           // factor for requantization: (real)sample * factor - 1.0 gives requantized sample
408         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f,
409           1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f,
410           1.0f/4096.0f, 1.0f/8192.0f, 1.0f/16384.0f, 1.0f/32768.0f };
411
412         @LOC("F") public static final float table_ab1_c[] =
413           // factor c for requantization from table 3-B.4
414         { 0.0f,           1.33333333333f, 1.14285714286f, 1.06666666666f, 1.03225806452f,
415           1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f,
416           1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, 1.00003051851f,
417           1.00001525902f };
418
419         @LOC("F") public static final float table_ab1_d[] =
420           // addend d for requantization from table 3-B.4
421         { 0.0f,           0.50000000000f, 0.25000000000f, 0.12500000000f, 0.06250000000f,
422           0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f,
423           0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f, 0.00006103516f,
424           0.00003051758f };
425
426         // subbands 3-... tables 3-B.2a and 2b:
427         @LOC("F") public static final float[] table_ab234_groupingtables[] =
428         { null, grouping_5bits, grouping_7bits, null, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null };
429
430         // subbands 3-10 in tables 3-B.2a and 2b:
431         @LOC("F") public static final int table_ab2_codelength[] =
432         { 0, 5, 7, 3, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 };
433         @LOC("F") public static final float table_ab2_factor[] =
434         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f,
435           1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f,
436           1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/32768.0f };
437         @LOC("F") public static final float table_ab2_c[] =
438         { 0.0f,           1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f,
439           1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f,
440           1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f,
441           1.00001525902f };
442         @LOC("F") public static final float table_ab2_d[] =
443         { 0.0f,           0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f,
444           0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f,
445           0.00390625000f, 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f,
446           0.00003051758f };
447
448         // subbands 11-22 in tables 3-B.2a and 2b:
449         @LOC("F") public static final int table_ab3_codelength[] = { 0, 5, 7, 3, 10, 4, 5, 16 };
450         @LOC("F") public static final float table_ab3_factor[] =
451         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32768.0f };
452         @LOC("F") public static final float table_ab3_c[] =
453         { 0.0f,           1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f,
454           1.06666666666f, 1.03225806452f, 1.00001525902f };
455         @LOC("F") public static final float table_ab3_d[] =
456         { 0.0f,           0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f,
457           0.12500000000f, 0.06250000000f, 0.00003051758f };
458
459         // subbands 23-... in tables 3-B.2a and 2b:
460         @LOC("F") public static final int table_ab4_codelength[] = { 0, 5, 7, 16 };
461         @LOC("F") public static final float table_ab4_factor[] = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/32768.0f };
462         @LOC("F") public static final float table_ab4_c[] = { 0.0f, 1.33333333333f, 1.60000000000f, 1.00001525902f };
463         @LOC("F") public static final float table_ab4_d[] = { 0.0f, 0.50000000000f, 0.50000000000f, 0.00003051758f };
464
465         // subbands in tables 3-B.2c and 2d:
466         @LOC("F") public static final int table_cd_codelength[] =
467         { 0, 5, 7, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
468         @LOC("F") public static final float table_cd_groupingtables[][] =
469         { null, grouping_5bits, grouping_7bits, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null, null };
470         @LOC("F") public static final float table_cd_factor[] =
471         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f,
472           1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f,
473           1.0f/8192.0f, 1.0f/16384.0f };
474         @LOC("F") public static final float table_cd_c[] =
475         { 0.0f,           1.33333333333f, 1.60000000000f, 1.77777777777f, 1.06666666666f,
476           1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f,
477           1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f,
478           1.00003051851f };
479         @LOC("F") public static final float table_cd_d[] =
480         { 0.0f,           0.50000000000f, 0.50000000000f, 0.50000000000f, 0.12500000000f,
481           0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f,
482           0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f,
483           0.00006103516f };
484
485
486
487           @LOC("F") protected int                       subbandnumber;
488           @LOC("F") protected int                               allocation;
489           @LOC("ARR") protected int                             scfsi;
490           @LOC("L") protected float                     scalefactor1;
491           @LOC("L") protected float                     scalefactor2;
492           @LOC("L") protected float                     scalefactor3;
493           @LOC("ARR") protected int[]                   codelength = {0}; 
494           @LOC("ARR") protected float                       groupingtable[][] = new float[2][]; 
495           //protected float[][]                 groupingtable = {{0},{0}} ;
496           @LOC("ARR") protected float[]                 factor = {0.0f};
497           @LOC("GN") protected int                              groupnumber;
498           @LOC("SN") protected int                      samplenumber;
499           @LOC("L") protected float[]                   samples = new float[3];
500           @LOC("ARR") protected float[]                 c = {0.0f};
501           @LOC("ARR") protected float[]                 d = {0.0f};
502           /**
503            * Constructor
504            */
505           public SubbandLayer2(@LOC("IN") int subbandnumber)
506           {     
507                 this.subbandnumber = subbandnumber;
508             groupnumber = samplenumber = 0;  
509           }
510           
511           
512           /**
513            *
514            */
515           @RETURNLOC("OUT") 
516           protected int get_allocationlength (@LOC("IN") Header header)
517           {
518                 if (header.version() == Header.MPEG1)
519                 {
520                   @LOC("SH") int channel_bitrate = header.bitrate_index();
521
522                   // calculate bitrate per channel:
523                   if (header.mode() != Header.SINGLE_CHANNEL)
524                          if (channel_bitrate == 4)
525                                 channel_bitrate = 1;
526                          else
527                                 channel_bitrate -= 4;
528
529                   if (channel_bitrate == 1 || channel_bitrate == 2)
530                          // table 3-B.2c or 3-B.2d
531                          if (subbandnumber <= 1)
532                                 return 4;
533                          else
534                                 return 3;
535                   else
536                          // tables 3-B.2a or 3-B.2b
537                          if (subbandnumber <= 10)
538                                 return 4;
539                          else if (subbandnumber <= 22)
540                                 return 3;
541                          else
542                                 return 2;
543             }
544                 else
545                 { // MPEG-2 LSF -- Jeff
546
547                  // table B.1 of ISO/IEC 13818-3
548              if (subbandnumber <= 3)
549                         return 4;
550              else if (subbandnumber <= 10)
551                         return 3;
552              else
553                         return 2;
554             }
555           }
556           
557           /**
558            *
559            */
560             protected void prepare_sample_reading(@LOC("IN") Header header, @LOC("IN") int allocation,
561                                                   //float[][] groupingtable,
562                                                   @LOC("IN") int channel,
563                                                   @LOC("V") float[] factor, @LOC("V") int[] codelength,
564                                                   @LOC("V") float[] c, @LOC("V") float[] d)
565            {
566                         @LOC("SH")int channel_bitrate = header.bitrate_index();
567                         // calculate bitrate per channel:
568                         if (header.mode() != Header.SINGLE_CHANNEL)
569                                 if (channel_bitrate == 4)
570                                         channel_bitrate = 1;
571                                 else
572                                         channel_bitrate -= 4;
573                         
574                          if (channel_bitrate == 1 || channel_bitrate == 2)
575                          {
576                                  // table 3-B.2c or 3-B.2d
577                                  groupingtable[channel] = table_cd_groupingtables[allocation];
578                                  factor[0] = table_cd_factor[allocation];
579                                  codelength[0] = table_cd_codelength[allocation];
580                                  c[0] = table_cd_c[allocation];
581                                  d[0] = table_cd_d[allocation];
582                          }
583                          else
584                          {
585                                  // tables 3-B.2a or 3-B.2b
586                                  if (subbandnumber <= 2)
587                                  {
588                                         groupingtable[channel] = table_ab1_groupingtables[allocation];
589                                         factor[0] = table_ab1_factor[allocation];
590                                         codelength[0] = table_ab1_codelength[allocation];
591                                 c[0] = table_ab1_c[allocation];
592                                 d[0] = table_ab1_d[allocation];
593                              }
594                                  else
595                                  {
596                                 groupingtable[channel] = table_ab234_groupingtables[allocation];
597                                         if (subbandnumber <= 10)
598                                         {
599                                                 factor[0] = table_ab2_factor[allocation];
600                                                 codelength[0] = table_ab2_codelength[allocation];
601                                                 c[0] = table_ab2_c[allocation];
602                                                 d[0] = table_ab2_d[allocation];
603                                 }
604                                 else if (subbandnumber <= 22)
605                                 {
606                                                 factor[0] = table_ab3_factor[allocation];
607                                                 codelength[0] = table_ab3_codelength[allocation];
608                                                 c[0] = table_ab3_c[allocation];
609                                                 d[0] = table_ab3_d[allocation];
610                                 }
611                                         else
612                                 {
613                                                 factor[0] = table_ab4_factor[allocation];
614                                                 codelength[0] = table_ab4_codelength[allocation];
615                                                 c[0] = table_ab4_c[allocation];
616                                                 d[0] = table_ab4_d[allocation];
617                                 }
618                                  }
619                          }   
620            }
621                                          
622           
623           /**
624            *
625            */
626           @LATTICE("OUT<V,V<SH,SH<IN,SH*,THISLOC=OUT,GLOBALLOC=IN")
627           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
628           {
629                  @LOC("V") int length = get_allocationlength(header);
630                  allocation = stream.get_bits(length);
631                  if (crc != null) 
632                          crc.add_bits(allocation, length);  
633           }
634           
635           /**
636            *
637            */
638           public void read_scalefactor_selection (@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
639           {
640                 if (allocation != 0)
641                 {
642                 scfsi = stream.get_bits(2);
643                 if (crc != null) crc.add_bits(scfsi, 2);
644             }
645           }
646
647           /**
648            *
649            */
650           public void read_scalefactor (@LOC("IN") Bitstream stream, @LOC("IN") Header header)
651           {
652                 if (allocation != 0)
653                 {
654                    switch (scfsi)
655                    {
656                    case 0:
657                          scalefactor1 = scalefactors[stream.get_bits(6)];
658                          scalefactor2 = scalefactors[stream.get_bits(6)];
659                          scalefactor3 = scalefactors[stream.get_bits(6)];
660                          break;
661                         case 1:
662                          scalefactor1 = scalefactor2 = scalefactors[stream.get_bits(6)];
663                          scalefactor3 = scalefactors[stream.get_bits(6)];
664                          break;
665                    case 2:
666                          scalefactor1 = scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)];
667                          break;
668                    case 3:
669                          scalefactor1 = scalefactors[stream.get_bits(6)];
670                          scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)];
671                          break;
672                 }
673                 prepare_sample_reading(header, allocation, 0,
674                                     factor, codelength, c, d);
675           }
676           }
677           
678           /**
679            *
680            */
681 //          @LATTICE("OUT<V,V<SH,SH<TEMP,TEMP<TMP,TMP<THIS,THIS<IN,SH*,TEMP*,TMP*,THISLOC=THIS,GLOBALLOC=IN")
682           @LATTICE("OUT<V,V<TEMP,TEMP<TMP,TMP<SH,SH<THIS,THIS<IN,SH*,TEMP*,TMP*,THISLOC=THIS,GLOBALLOC=IN")
683           @RETURNLOC("V")
684           public boolean read_sampledata (@LOC("IN") Bitstream stream)
685           {
686                 if (allocation != 0)
687                  if (groupingtable[0] != null)
688                  {
689                         @LOC("SH") int samplecode = stream.get_bits(codelength[0]);
690                         // create requantized samples:
691                         samplecode += samplecode << 1;
692                         //float[] target = samples;  //subbed in variable to reduce areas
693                         //float[] source = groupingtable[0];  //subbed in variable to reduce areas
694                   /*
695                   int tmp = 0;
696                         int temp = 0;
697                         target[tmp++] = source[samplecode + temp];
698                         temp++;
699                         target[tmp++] = source[samplecode + temp];
700                         temp++;
701                         target[tmp] = source[samplecode + temp];
702                         */
703                         //Bugfix:
704                         @LOC("TMP") int tmp = 0;
705                         @LOC("TEMP") int temp = samplecode;
706                         
707 //                      if(temp > source.length - 3) temp = source.length - 3;
708                         if(temp > groupingtable[0].length - 3) temp = groupingtable[0].length - 3;
709                         
710                         samples[tmp] = groupingtable[0][temp];
711                         temp++;tmp++;
712                         samples[tmp] = groupingtable[0][temp];
713                         temp++;tmp++;
714                         samples[tmp] = groupingtable[0][temp];
715                         
716                         // memcpy (samples, groupingtable + samplecode, 3 * sizeof (real));
717                  }
718                  else
719                  {
720                         samples[0] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
721                         samples[1] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
722                         samples[2] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
723                  }
724
725                 samplenumber = 0;
726                   if (++groupnumber == 12)
727                          return true;
728                   else
729                          return false;
730           }
731
732           /**
733            *
734            */
735        @RETURNLOC("THIS")
736           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
737           {
738             if ((allocation != 0) && (channels != OutputChannels.RIGHT_CHANNEL))
739             {
740                  @LOC("SH") float sample = samples[samplenumber];
741           
742                  if (groupingtable[0] == null)
743                         sample = (sample + d[0]) * c[0];
744                  if (groupnumber <= 4)
745                         sample *= scalefactor1;
746                  else if (groupnumber <= 8)
747                         sample *= scalefactor2;
748                  else
749                         sample *= scalefactor3;
750                  filter1.input_sample(sample, subbandnumber);
751             }
752           
753             if (++samplenumber == 3)
754                  return true;
755             else
756                  return false;
757           }
758         };
759         
760          /**
761           * Class for layer II subbands in joint stereo mode.
762           */
763      @LATTICE("S<L,L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,H<SH,SN*,GN*,L*")
764         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
765         static class SubbandLayer2IntensityStereo extends SubbandLayer2
766         {
767           @LOC("ARR") protected int              channel2_scfsi;
768           @LOC("L") protected float      channel2_scalefactor1; 
769           @LOC("L") protected float        channel2_scalefactor2;
770           @LOC("L") protected float        channel2_scalefactor3;
771
772           /**
773            * Constructor
774            */
775           public SubbandLayer2IntensityStereo (@LOC("IN") int subbandnumber)
776           {
777                 super(subbandnumber);
778           }
779
780           /**
781            *
782            */
783           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
784           {
785             super.read_allocation (stream, header, crc);
786           }
787           
788           /**
789            *
790            */
791           public void read_scalefactor_selection(@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
792           {
793             if (allocation != 0)
794             {
795                  scfsi = stream.get_bits(2);
796                  channel2_scfsi = stream.get_bits(2);
797                  if (crc != null)
798                  {
799                         crc.add_bits(scfsi, 2);
800                         crc.add_bits(channel2_scfsi, 2);
801                  }
802             }  
803           }
804           
805           /**
806            *
807            */
808             public void read_scalefactor(@LOC("IN") Bitstream stream, @LOC("IN") Header header)
809           {
810             if (allocation != 0)
811             {
812                  super.read_scalefactor(stream, header);
813                  switch (channel2_scfsi)
814                  {
815                  case 0:
816                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
817                    channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
818                    channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
819                    break;
820
821                  case 1:
822                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
823                    channel2_scalefactor2 = channel2_scalefactor1;
824                    channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
825                    break;
826
827                  case 2:
828                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
829                    channel2_scalefactor2 = channel2_scalefactor1;
830                    channel2_scalefactor3 = channel2_scalefactor2;
831                    break;
832
833                  case 3:
834                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
835                    channel2_scalefactor2 = scalefactors[stream.get_bits (6)];
836                    channel2_scalefactor3 = channel2_scalefactor2;
837                    break;
838                  }
839             }
840           
841           }
842           
843           /**
844            *
845            */
846           @RETURNLOC("V")
847           public boolean read_sampledata(@LOC("IN") Bitstream stream)
848           {
849                  return super.read_sampledata (stream);
850           }
851           
852           /**
853            *
854            */
855           @LATTICE("S2<S1,S1<THIS,THIS<GLOBAL,GLOBAL<IN,S1*,THISLOC=THIS,GLOBALLOC=GLOBAL")
856           @RETURNLOC("S2")
857           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
858           {
859                   if (allocation != 0)
860                   {
861                         @LOC("S1") float sample = samples[samplenumber];
862                 
863                          if (groupingtable[0] == null)
864                                 sample = (sample + d[0]) * c[0];
865                        if (channels == OutputChannels.BOTH_CHANNELS)
866                            {
867                               @LOC("S2") float sample2 = sample;
868                               if (groupnumber <= 4)
869                               {
870                                         sample *= scalefactor1;
871                                         sample2 *= channel2_scalefactor1;
872                                   }
873                                   else if (groupnumber <= 8)
874                                   {
875                                         sample *= scalefactor2;
876                                         sample2 *= channel2_scalefactor2;
877                                   }
878                                   else
879                                   {
880                                         sample *= scalefactor3;
881                                         sample2 *= channel2_scalefactor3;
882                                   }
883                                   filter1.input_sample(sample, subbandnumber);
884                               filter2.input_sample(sample2, subbandnumber);
885                             }
886                                 else if (channels == OutputChannels.LEFT_CHANNEL)
887                                 {
888                                         if (groupnumber <= 4)
889                                                 sample *= scalefactor1;
890                                 else if (groupnumber <= 8)
891                                                 sample *= scalefactor2;
892                                         else
893                                                 sample *= scalefactor3;
894                                         filter1.input_sample(sample, subbandnumber);
895                                  }
896                                  else
897                                  {
898                                         if (groupnumber <= 4)
899                                         sample *= channel2_scalefactor1;
900                                         else if (groupnumber <= 8)
901                                                 sample *= channel2_scalefactor2;
902                                         else
903                                                 sample *= channel2_scalefactor3;
904                                         filter1.input_sample(sample, subbandnumber);
905                                 }
906                         }
907                 
908                   if (++samplenumber == 3)
909                          return true;
910                   else
911                  return false;
912           }
913         };
914
915          /**
916           * Class for layer II subbands in stereo mode.
917           */
918      @LATTICE("S<L,L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,H<SH,SN*,GN*")
919         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
920         static class SubbandLayer2Stereo extends SubbandLayer2
921         {
922           @LOC("F")protected int                        channel2_allocation;
923           @LOC("ARR") protected int             channel2_scfsi;
924           @LOC("L") protected float             channel2_scalefactor1;
925           @LOC("L") protected float channel2_scalefactor2;
926           @LOC("L") protected float channel2_scalefactor3;
927           //protected boolean           channel2_grouping;  ???? Never used!
928           @LOC("ARR") protected int[]           channel2_codelength = {0};
929           //protected float[][]         channel2_groupingtable = {{0},{0}};
930           @LOC("ARR") protected float[]         channel2_factor = {0.0f};
931           @LOC("L") protected float[]   channel2_samples;
932           @LOC("ARR") protected float[]         channel2_c = {0.0f};
933           @LOC("ARR") protected float[]         channel2_d = {0.0f};
934           
935           /**
936            * Constructor
937            */
938           public SubbandLayer2Stereo(@LOC("IN") int subbandnumber)
939           {
940                 super(subbandnumber);
941                 channel2_samples = new float[3];
942           }
943           
944           /**
945            *
946            */
947           @LATTICE("OUT<SH,SH<THIS,THIS<V,V<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
948           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
949           {
950             @LOC("V") int length = get_allocationlength(header);
951             allocation = stream.get_bits(length);
952             channel2_allocation = stream.get_bits(length);
953             if (crc != null)
954             {
955                  crc.add_bits(allocation, length);
956                  crc.add_bits(channel2_allocation, length);
957             }
958           }
959
960           /**
961            *
962            */
963           public void read_scalefactor_selection(@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
964           {
965                   if (allocation != 0)
966                   {
967                          scfsi = stream.get_bits(2);
968                          if (crc != null)
969                                 crc.add_bits(scfsi, 2);
970                   }
971                   if (channel2_allocation != 0)
972                   {
973                          channel2_scfsi = stream.get_bits(2);
974                          if (crc != null)
975                                 crc.add_bits(channel2_scfsi, 2);
976                   }
977           }
978
979           /**
980            *
981            */
982             public void read_scalefactor(@LOC("IN") Bitstream stream, @LOC("IN") Header header)
983           {
984             super.read_scalefactor(stream, header);
985             if (channel2_allocation != 0)
986             {
987                  switch (channel2_scfsi)
988                  {
989                         case 0:
990                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
991                            channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
992                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
993                        break;
994           
995                         case 1:
996                            channel2_scalefactor1 = channel2_scalefactor2 =
997                                                                       scalefactors[stream.get_bits(6)];
998                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
999                        break;
1000           
1001                         case 2:
1002                            channel2_scalefactor1 = channel2_scalefactor2 =
1003                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
1004                        break;
1005           
1006                         case 3:
1007                            channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
1008                        channel2_scalefactor2 = channel2_scalefactor3 =
1009                                                                            scalefactors[stream.get_bits(6)];
1010                    break;
1011                  }
1012                  prepare_sample_reading(header, channel2_allocation, 1,
1013                                      channel2_factor, channel2_codelength, channel2_c,
1014                                      channel2_d);
1015            }
1016           }
1017
1018           /**
1019            *
1020            */
1021           @LATTICE("OUT<V,V<SH,SH<TEMP,TEMP<TMP,TMP<THIS,THIS<IN,SH*,TEMP*,TMP*,THISLOC=THIS,GLOBALLOC=IN")
1022           @RETURNLOC("V")
1023           public boolean read_sampledata (@LOC("IN") Bitstream stream)
1024           {
1025             @LOC("V")boolean returnvalue = super.read_sampledata(stream);
1026           
1027             if (channel2_allocation != 0)
1028                  if (groupingtable[1] != null)
1029                  {
1030                         @LOC("SH") int samplecode = stream.get_bits(channel2_codelength[0]);
1031                         // create requantized samples:
1032                         samplecode += samplecode << 1;
1033                 /*
1034                         float[] target = channel2_samples;
1035                         float[] source = channel2_groupingtable[0];
1036                         int tmp = 0;
1037                         int temp = 0;
1038                         target[tmp++] = source[samplecode + temp];
1039                         temp++;
1040                         target[tmp++] = source[samplecode + temp];
1041                         temp++;
1042                         target[tmp] = source[samplecode + temp];
1043                         // memcpy (channel2_samples, channel2_groupingtable + samplecode, 3 * sizeof (real));
1044                 */
1045                         @LOC("V") float[] target = channel2_samples;
1046                         @LOC("V") float[] source = groupingtable[1];
1047                         @LOC("TMP") int tmp = 0;
1048                         @LOC("TEMP") int temp = samplecode;
1049                 target[tmp] = source[temp];
1050                         temp++;tmp++;
1051                 target[tmp] = source[temp];
1052                         temp++;tmp++;
1053                 target[tmp] = source[temp];
1054                 
1055               } 
1056                   else 
1057                   {
1058                         channel2_samples[0] = (float) ((stream.get_bits(channel2_codelength[0])) *
1059                                                                          channel2_factor[0] - 1.0);
1060                         channel2_samples[1] = (float) ((stream.get_bits(channel2_codelength[0])) *
1061                                                                          channel2_factor[0] - 1.0);
1062                         channel2_samples[2] = (float) ((stream.get_bits(channel2_codelength[0])) *
1063                                       channel2_factor[0] - 1.0);
1064                  }
1065              return returnvalue;
1066           }
1067
1068           /**
1069            *
1070            */
1071           @RETURNLOC("V")
1072           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
1073           {
1074             @LOC("V") boolean returnvalue = super.put_next_sample(channels, filter1, filter2);
1075             if ((channel2_allocation != 0) && (channels != OutputChannels.LEFT_CHANNEL))
1076             {
1077                 @LOC("SH") float sample = channel2_samples[samplenumber - 1];
1078           
1079                  if (groupingtable[1] == null)
1080                         sample = (sample + channel2_d[0]) * channel2_c[0];
1081           
1082                  if (groupnumber <= 4)
1083                         sample *= channel2_scalefactor1;
1084                  else if (groupnumber <= 8)
1085                         sample *= channel2_scalefactor2;
1086                  else
1087                         sample *= channel2_scalefactor3;
1088                  if (channels == OutputChannels.BOTH_CHANNELS)
1089                         filter2.input_sample(sample, subbandnumber);
1090                  else
1091                         filter1.input_sample(sample, subbandnumber);
1092             }
1093                 return returnvalue;
1094           }
1095         }
1096 }