gosu 0.8.0.pre3 → 0.8.0.pre4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/Gosu/Buttons.hpp +13 -11
  3. data/{linux → ext/gosu}/extconf.rb +25 -47
  4. data/{GosuImpl/RubyGosu_wrap.cxx → ext/gosu/gosu_wrap.cxx} +3 -2
  5. data/{GosuImpl/RubyGosu_wrap.h → ext/gosu/gosu_wrap.h} +0 -0
  6. data/lib/gosu.rb +6 -7
  7. data/lib/gosu/zen.rb +12 -0
  8. data/{GosuImpl → src}/Audio/ALChannelManagement.hpp +0 -0
  9. data/{GosuImpl → src}/Audio/AudioFile.hpp +0 -0
  10. data/{GosuImpl → src}/Audio/AudioOpenAL.cpp +0 -0
  11. data/{GosuImpl → src}/Audio/AudioOpenAL.mm +0 -0
  12. data/{GosuImpl → src}/Audio/AudioToolboxFile.hpp +0 -0
  13. data/{GosuImpl → src}/Audio/OggFile.hpp +0 -0
  14. data/{GosuImpl → src}/Audio/SndFile.hpp +0 -0
  15. data/{GosuImpl/Graphics → src/Bitmap}/Bitmap.cpp +2 -0
  16. data/{GosuImpl/Graphics → src/Bitmap}/BitmapApple.mm +0 -0
  17. data/{GosuImpl/Graphics → src/Bitmap}/BitmapBMP.cpp +0 -0
  18. data/{GosuImpl/Graphics → src/Bitmap}/BitmapColorKey.cpp +0 -0
  19. data/{GosuImpl/Graphics → src/Bitmap}/BitmapFreeImage.cpp +0 -0
  20. data/{GosuImpl/Graphics → src/Bitmap}/BitmapGDIplus.cpp +0 -0
  21. data/{GosuImpl/Graphics → src/Bitmap}/BitmapUtils.cpp +0 -0
  22. data/{GosuImpl → src}/DirectoriesMac.mm +0 -0
  23. data/{GosuImpl → src}/DirectoriesTouch.mm +0 -0
  24. data/{GosuImpl → src}/DirectoriesUnix.cpp +0 -0
  25. data/{GosuImpl → src}/DirectoriesWin.cpp +0 -0
  26. data/{GosuImpl → src}/FileUnix.cpp +0 -0
  27. data/{GosuImpl → src}/FileWin.cpp +0 -0
  28. data/{GosuImpl/Graphics → src}/GosuView.hpp +0 -0
  29. data/{GosuImpl/Graphics → src}/GosuView.mm +0 -0
  30. data/{GosuImpl → src}/Graphics/BlockAllocator.cpp +0 -0
  31. data/{GosuImpl → src}/Graphics/BlockAllocator.hpp +0 -0
  32. data/{GosuImpl → src}/Graphics/ClipRectStack.hpp +0 -0
  33. data/{GosuImpl → src}/Graphics/Color.cpp +0 -0
  34. data/{GosuImpl → src}/Graphics/Common.hpp +0 -0
  35. data/{GosuImpl → src}/Graphics/DrawOp.hpp +0 -0
  36. data/{GosuImpl → src}/Graphics/DrawOpQueue.hpp +0 -0
  37. data/{GosuImpl → src}/Graphics/Graphics.cpp +0 -0
  38. data/{GosuImpl → src}/Graphics/Image.cpp +0 -0
  39. data/{GosuImpl → src}/Graphics/LargeImageData.cpp +0 -0
  40. data/{GosuImpl → src}/Graphics/LargeImageData.hpp +0 -0
  41. data/{GosuImpl → src}/Graphics/Macro.hpp +0 -0
  42. data/{GosuImpl → src}/Graphics/RenderState.hpp +0 -0
  43. data/{GosuImpl → src}/Graphics/TexChunk.cpp +0 -0
  44. data/{GosuImpl → src}/Graphics/TexChunk.hpp +0 -0
  45. data/{GosuImpl → src}/Graphics/Texture.cpp +0 -0
  46. data/{GosuImpl → src}/Graphics/Texture.hpp +0 -0
  47. data/{GosuImpl → src}/Graphics/Transform.cpp +0 -0
  48. data/{GosuImpl → src}/Graphics/TransformStack.hpp +0 -0
  49. data/{GosuImpl → src}/IO.cpp +0 -0
  50. data/{GosuImpl → src}/Iconv.hpp +0 -0
  51. data/{GosuImpl → src}/Input/AccelerometerReader.hpp +0 -0
  52. data/{GosuImpl → src}/Input/AccelerometerReader.mm +0 -0
  53. data/{GosuImpl → src/Input}/Input.cpp +0 -0
  54. data/{GosuImpl → src/Input}/InputTouch.mm +0 -0
  55. data/{GosuImpl → src/Input}/TextInput.cpp +0 -0
  56. data/{GosuImpl → src/Input}/TextInputMac.mm +0 -0
  57. data/{GosuImpl → src}/Inspection.cpp +0 -0
  58. data/{GosuImpl → src}/MacUtility.hpp +0 -0
  59. data/{GosuImpl → src}/Math.cpp +0 -0
  60. data/{GosuImpl → src}/Sockets/CommSocket.cpp +0 -0
  61. data/{GosuImpl → src}/Sockets/ListenerSocket.cpp +0 -0
  62. data/{GosuImpl → src}/Sockets/MessageSocket.cpp +0 -0
  63. data/{GosuImpl → src}/Sockets/Socket.cpp +0 -0
  64. data/{GosuImpl → src}/Sockets/Socket.hpp +0 -0
  65. data/{GosuImpl/Graphics → src/Text}/Font.cpp +1 -1
  66. data/{GosuImpl/Graphics → src/Text}/FormattedString.hpp +0 -0
  67. data/{GosuImpl/Graphics → src/Text}/Text.cpp +1 -1
  68. data/{GosuImpl/Graphics/TextTouch.mm → src/Text/TextApple.mm} +0 -0
  69. data/{GosuImpl/Graphics → src/Text}/TextMac.cpp +1 -1
  70. data/{GosuImpl/Graphics → src/Text}/TextTTFWin.cpp +0 -0
  71. data/{GosuImpl/Graphics → src/Text}/TextUnix.cpp +0 -0
  72. data/{GosuImpl/Graphics → src/Text}/TextWin.cpp +0 -0
  73. data/{GosuImpl → src}/TimingApple.cpp +0 -0
  74. data/{GosuImpl → src}/TimingUnix.cpp +0 -0
  75. data/{GosuImpl → src}/TimingWin.cpp +0 -0
  76. data/{GosuImpl → src}/Utility.cpp +0 -0
  77. data/{GosuImpl → src}/UtilityApple.mm +0 -0
  78. data/{GosuImpl → src}/UtilityWin.cpp +0 -0
  79. data/{GosuImpl → src}/WinMain.cpp +0 -0
  80. data/{GosuImpl → src}/WinUtility.cpp +0 -0
  81. data/{GosuImpl → src}/Window.cpp +0 -0
  82. data/{GosuImpl → src}/WindowTouch.mm +0 -0
  83. data/{GosuImpl → src}/X11vroot.h +0 -0
  84. metadata +97 -193
  85. data/.yardopts +0 -1
  86. data/COPYING +0 -29
  87. data/GosuImpl/InputMac.mm +0 -733
  88. data/GosuImpl/InputWin.cpp +0 -483
  89. data/GosuImpl/InputX.cpp +0 -243
  90. data/GosuImpl/RubyGosu.swg +0 -821
  91. data/GosuImpl/RubyGosu_SWIG_GC_PATCH.patch +0 -126
  92. data/GosuImpl/RubyGosu_SWIG_RENAME_PATCH.patch +0 -62
  93. data/GosuImpl/TextInputWin.cpp +0 -211
  94. data/GosuImpl/TextInputX.cpp +0 -217
  95. data/GosuImpl/WindowWin.cpp +0 -534
  96. data/GosuImpl/WindowX.cpp +0 -458
  97. data/README.txt +0 -25
  98. data/dependencies/libogg/AUTHORS +0 -4
  99. data/dependencies/libogg/CHANGES +0 -70
  100. data/dependencies/libogg/COPYING +0 -28
  101. data/dependencies/libogg/include/ogg/ogg.h +0 -209
  102. data/dependencies/libogg/include/ogg/os_types.h +0 -147
  103. data/dependencies/libogg/src/bitwise.c +0 -857
  104. data/dependencies/libogg/src/framing.c +0 -2089
  105. data/dependencies/libvorbis/AUTHORS +0 -3
  106. data/dependencies/libvorbis/CHANGES +0 -126
  107. data/dependencies/libvorbis/COPYING +0 -28
  108. data/dependencies/libvorbis/include/vorbis/codec.h +0 -243
  109. data/dependencies/libvorbis/include/vorbis/vorbisenc.h +0 -436
  110. data/dependencies/libvorbis/include/vorbis/vorbisfile.h +0 -206
  111. data/dependencies/libvorbis/lib/analysis.c +0 -120
  112. data/dependencies/libvorbis/lib/backends.h +0 -144
  113. data/dependencies/libvorbis/lib/barkmel.c +0 -64
  114. data/dependencies/libvorbis/lib/bitrate.c +0 -253
  115. data/dependencies/libvorbis/lib/bitrate.h +0 -59
  116. data/dependencies/libvorbis/lib/block.c +0 -1046
  117. data/dependencies/libvorbis/lib/books/coupled/res_books_51.h +0 -12257
  118. data/dependencies/libvorbis/lib/books/coupled/res_books_stereo.h +0 -15783
  119. data/dependencies/libvorbis/lib/books/floor/floor_books.h +0 -1547
  120. data/dependencies/libvorbis/lib/books/uncoupled/res_books_uncoupled.h +0 -7758
  121. data/dependencies/libvorbis/lib/codebook.c +0 -479
  122. data/dependencies/libvorbis/lib/codebook.h +0 -119
  123. data/dependencies/libvorbis/lib/codec_internal.h +0 -167
  124. data/dependencies/libvorbis/lib/envelope.c +0 -375
  125. data/dependencies/libvorbis/lib/envelope.h +0 -80
  126. data/dependencies/libvorbis/lib/floor0.c +0 -222
  127. data/dependencies/libvorbis/lib/floor1.c +0 -1099
  128. data/dependencies/libvorbis/lib/highlevel.h +0 -58
  129. data/dependencies/libvorbis/lib/info.c +0 -664
  130. data/dependencies/libvorbis/lib/lookup.c +0 -94
  131. data/dependencies/libvorbis/lib/lookup.h +0 -32
  132. data/dependencies/libvorbis/lib/lookup_data.h +0 -192
  133. data/dependencies/libvorbis/lib/lpc.c +0 -160
  134. data/dependencies/libvorbis/lib/lpc.h +0 -29
  135. data/dependencies/libvorbis/lib/lsp.c +0 -456
  136. data/dependencies/libvorbis/lib/lsp.h +0 -28
  137. data/dependencies/libvorbis/lib/mapping0.c +0 -816
  138. data/dependencies/libvorbis/lib/masking.h +0 -785
  139. data/dependencies/libvorbis/lib/mdct.c +0 -563
  140. data/dependencies/libvorbis/lib/mdct.h +0 -71
  141. data/dependencies/libvorbis/lib/misc.h +0 -57
  142. data/dependencies/libvorbis/lib/modes/floor_all.h +0 -260
  143. data/dependencies/libvorbis/lib/modes/psych_11.h +0 -51
  144. data/dependencies/libvorbis/lib/modes/psych_16.h +0 -133
  145. data/dependencies/libvorbis/lib/modes/psych_44.h +0 -642
  146. data/dependencies/libvorbis/lib/modes/psych_8.h +0 -101
  147. data/dependencies/libvorbis/lib/modes/residue_16.h +0 -163
  148. data/dependencies/libvorbis/lib/modes/residue_44.h +0 -292
  149. data/dependencies/libvorbis/lib/modes/residue_44p51.h +0 -451
  150. data/dependencies/libvorbis/lib/modes/residue_44u.h +0 -318
  151. data/dependencies/libvorbis/lib/modes/residue_8.h +0 -109
  152. data/dependencies/libvorbis/lib/modes/setup_11.h +0 -143
  153. data/dependencies/libvorbis/lib/modes/setup_16.h +0 -153
  154. data/dependencies/libvorbis/lib/modes/setup_22.h +0 -128
  155. data/dependencies/libvorbis/lib/modes/setup_32.h +0 -132
  156. data/dependencies/libvorbis/lib/modes/setup_44.h +0 -117
  157. data/dependencies/libvorbis/lib/modes/setup_44p51.h +0 -74
  158. data/dependencies/libvorbis/lib/modes/setup_44u.h +0 -74
  159. data/dependencies/libvorbis/lib/modes/setup_8.h +0 -149
  160. data/dependencies/libvorbis/lib/modes/setup_X.h +0 -225
  161. data/dependencies/libvorbis/lib/os.h +0 -186
  162. data/dependencies/libvorbis/lib/psy.c +0 -1203
  163. data/dependencies/libvorbis/lib/psy.h +0 -154
  164. data/dependencies/libvorbis/lib/psytune.c +0 -524
  165. data/dependencies/libvorbis/lib/registry.c +0 -45
  166. data/dependencies/libvorbis/lib/registry.h +0 -32
  167. data/dependencies/libvorbis/lib/res0.c +0 -889
  168. data/dependencies/libvorbis/lib/scales.h +0 -90
  169. data/dependencies/libvorbis/lib/sharedbook.c +0 -579
  170. data/dependencies/libvorbis/lib/smallft.c +0 -1255
  171. data/dependencies/libvorbis/lib/smallft.h +0 -34
  172. data/dependencies/libvorbis/lib/synthesis.c +0 -184
  173. data/dependencies/libvorbis/lib/tone.c +0 -54
  174. data/dependencies/libvorbis/lib/vorbisenc.c +0 -1215
  175. data/dependencies/libvorbis/lib/vorbisfile.c +0 -2337
  176. data/dependencies/libvorbis/lib/window.c +0 -2135
  177. data/dependencies/libvorbis/lib/window.h +0 -26
  178. data/dependencies/ogg_vorbis.license +0 -28
  179. data/reference/gosu.rb +0 -1284
@@ -1,1255 +0,0 @@
1
- /********************************************************************
2
- * *
3
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
7
- * *
8
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9
- * by the Xiph.Org Foundation http://www.xiph.org/ *
10
- * *
11
- ********************************************************************
12
-
13
- function: *unnormalized* fft transform
14
- last mod: $Id: smallft.c 16227 2009-07-08 06:58:46Z xiphmont $
15
-
16
- ********************************************************************/
17
-
18
- /* FFT implementation from OggSquish, minus cosine transforms,
19
- * minus all but radix 2/4 case. In Vorbis we only need this
20
- * cut-down version.
21
- *
22
- * To do more than just power-of-two sized vectors, see the full
23
- * version I wrote for NetLib.
24
- *
25
- * Note that the packing is a little strange; rather than the FFT r/i
26
- * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1,
27
- * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the
28
- * FORTRAN version
29
- */
30
-
31
- #include <stdlib.h>
32
- #include <string.h>
33
- #include <math.h>
34
- #include "smallft.h"
35
- #include "os.h"
36
- #include "misc.h"
37
-
38
- static void drfti1(int n, float *wa, int *ifac){
39
- static int ntryh[4] = { 4,2,3,5 };
40
- static float tpi = 6.28318530717958648f;
41
- float arg,argh,argld,fi;
42
- int ntry=0,i,j=-1;
43
- int k1, l1, l2, ib;
44
- int ld, ii, ip, is, nq, nr;
45
- int ido, ipm, nfm1;
46
- int nl=n;
47
- int nf=0;
48
-
49
- L101:
50
- j++;
51
- if (j < 4)
52
- ntry=ntryh[j];
53
- else
54
- ntry+=2;
55
-
56
- L104:
57
- nq=nl/ntry;
58
- nr=nl-ntry*nq;
59
- if (nr!=0) goto L101;
60
-
61
- nf++;
62
- ifac[nf+1]=ntry;
63
- nl=nq;
64
- if(ntry!=2)goto L107;
65
- if(nf==1)goto L107;
66
-
67
- for (i=1;i<nf;i++){
68
- ib=nf-i+1;
69
- ifac[ib+1]=ifac[ib];
70
- }
71
- ifac[2] = 2;
72
-
73
- L107:
74
- if(nl!=1)goto L104;
75
- ifac[0]=n;
76
- ifac[1]=nf;
77
- argh=tpi/n;
78
- is=0;
79
- nfm1=nf-1;
80
- l1=1;
81
-
82
- if(nfm1==0)return;
83
-
84
- for (k1=0;k1<nfm1;k1++){
85
- ip=ifac[k1+2];
86
- ld=0;
87
- l2=l1*ip;
88
- ido=n/l2;
89
- ipm=ip-1;
90
-
91
- for (j=0;j<ipm;j++){
92
- ld+=l1;
93
- i=is;
94
- argld=(float)ld*argh;
95
- fi=0.f;
96
- for (ii=2;ii<ido;ii+=2){
97
- fi+=1.f;
98
- arg=fi*argld;
99
- wa[i++]=cos(arg);
100
- wa[i++]=sin(arg);
101
- }
102
- is+=ido;
103
- }
104
- l1=l2;
105
- }
106
- }
107
-
108
- static void fdrffti(int n, float *wsave, int *ifac){
109
-
110
- if (n == 1) return;
111
- drfti1(n, wsave+n, ifac);
112
- }
113
-
114
- static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
115
- int i,k;
116
- float ti2,tr2;
117
- int t0,t1,t2,t3,t4,t5,t6;
118
-
119
- t1=0;
120
- t0=(t2=l1*ido);
121
- t3=ido<<1;
122
- for(k=0;k<l1;k++){
123
- ch[t1<<1]=cc[t1]+cc[t2];
124
- ch[(t1<<1)+t3-1]=cc[t1]-cc[t2];
125
- t1+=ido;
126
- t2+=ido;
127
- }
128
-
129
- if(ido<2)return;
130
- if(ido==2)goto L105;
131
-
132
- t1=0;
133
- t2=t0;
134
- for(k=0;k<l1;k++){
135
- t3=t2;
136
- t4=(t1<<1)+(ido<<1);
137
- t5=t1;
138
- t6=t1+t1;
139
- for(i=2;i<ido;i+=2){
140
- t3+=2;
141
- t4-=2;
142
- t5+=2;
143
- t6+=2;
144
- tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
145
- ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
146
- ch[t6]=cc[t5]+ti2;
147
- ch[t4]=ti2-cc[t5];
148
- ch[t6-1]=cc[t5-1]+tr2;
149
- ch[t4-1]=cc[t5-1]-tr2;
150
- }
151
- t1+=ido;
152
- t2+=ido;
153
- }
154
-
155
- if(ido%2==1)return;
156
-
157
- L105:
158
- t3=(t2=(t1=ido)-1);
159
- t2+=t0;
160
- for(k=0;k<l1;k++){
161
- ch[t1]=-cc[t2];
162
- ch[t1-1]=cc[t3];
163
- t1+=ido<<1;
164
- t2+=ido;
165
- t3+=ido;
166
- }
167
- }
168
-
169
- static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
170
- float *wa2,float *wa3){
171
- static float hsqt2 = .70710678118654752f;
172
- int i,k,t0,t1,t2,t3,t4,t5,t6;
173
- float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
174
- t0=l1*ido;
175
-
176
- t1=t0;
177
- t4=t1<<1;
178
- t2=t1+(t1<<1);
179
- t3=0;
180
-
181
- for(k=0;k<l1;k++){
182
- tr1=cc[t1]+cc[t2];
183
- tr2=cc[t3]+cc[t4];
184
-
185
- ch[t5=t3<<2]=tr1+tr2;
186
- ch[(ido<<2)+t5-1]=tr2-tr1;
187
- ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
188
- ch[t5]=cc[t2]-cc[t1];
189
-
190
- t1+=ido;
191
- t2+=ido;
192
- t3+=ido;
193
- t4+=ido;
194
- }
195
-
196
- if(ido<2)return;
197
- if(ido==2)goto L105;
198
-
199
-
200
- t1=0;
201
- for(k=0;k<l1;k++){
202
- t2=t1;
203
- t4=t1<<2;
204
- t5=(t6=ido<<1)+t4;
205
- for(i=2;i<ido;i+=2){
206
- t3=(t2+=2);
207
- t4+=2;
208
- t5-=2;
209
-
210
- t3+=t0;
211
- cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
212
- ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
213
- t3+=t0;
214
- cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3];
215
- ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1];
216
- t3+=t0;
217
- cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3];
218
- ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1];
219
-
220
- tr1=cr2+cr4;
221
- tr4=cr4-cr2;
222
- ti1=ci2+ci4;
223
- ti4=ci2-ci4;
224
-
225
- ti2=cc[t2]+ci3;
226
- ti3=cc[t2]-ci3;
227
- tr2=cc[t2-1]+cr3;
228
- tr3=cc[t2-1]-cr3;
229
-
230
- ch[t4-1]=tr1+tr2;
231
- ch[t4]=ti1+ti2;
232
-
233
- ch[t5-1]=tr3-ti4;
234
- ch[t5]=tr4-ti3;
235
-
236
- ch[t4+t6-1]=ti4+tr3;
237
- ch[t4+t6]=tr4+ti3;
238
-
239
- ch[t5+t6-1]=tr2-tr1;
240
- ch[t5+t6]=ti1-ti2;
241
- }
242
- t1+=ido;
243
- }
244
- if(ido&1)return;
245
-
246
- L105:
247
-
248
- t2=(t1=t0+ido-1)+(t0<<1);
249
- t3=ido<<2;
250
- t4=ido;
251
- t5=ido<<1;
252
- t6=ido;
253
-
254
- for(k=0;k<l1;k++){
255
- ti1=-hsqt2*(cc[t1]+cc[t2]);
256
- tr1=hsqt2*(cc[t1]-cc[t2]);
257
-
258
- ch[t4-1]=tr1+cc[t6-1];
259
- ch[t4+t5-1]=cc[t6-1]-tr1;
260
-
261
- ch[t4]=ti1-cc[t1+t0];
262
- ch[t4+t5]=ti1+cc[t1+t0];
263
-
264
- t1+=ido;
265
- t2+=ido;
266
- t4+=t3;
267
- t6+=ido;
268
- }
269
- }
270
-
271
- static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
272
- float *c2,float *ch,float *ch2,float *wa){
273
-
274
- static float tpi=6.283185307179586f;
275
- int idij,ipph,i,j,k,l,ic,ik,is;
276
- int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
277
- float dc2,ai1,ai2,ar1,ar2,ds2;
278
- int nbd;
279
- float dcp,arg,dsp,ar1h,ar2h;
280
- int idp2,ipp2;
281
-
282
- arg=tpi/(float)ip;
283
- dcp=cos(arg);
284
- dsp=sin(arg);
285
- ipph=(ip+1)>>1;
286
- ipp2=ip;
287
- idp2=ido;
288
- nbd=(ido-1)>>1;
289
- t0=l1*ido;
290
- t10=ip*ido;
291
-
292
- if(ido==1)goto L119;
293
- for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik];
294
-
295
- t1=0;
296
- for(j=1;j<ip;j++){
297
- t1+=t0;
298
- t2=t1;
299
- for(k=0;k<l1;k++){
300
- ch[t2]=c1[t2];
301
- t2+=ido;
302
- }
303
- }
304
-
305
- is=-ido;
306
- t1=0;
307
- if(nbd>l1){
308
- for(j=1;j<ip;j++){
309
- t1+=t0;
310
- is+=ido;
311
- t2= -ido+t1;
312
- for(k=0;k<l1;k++){
313
- idij=is-1;
314
- t2+=ido;
315
- t3=t2;
316
- for(i=2;i<ido;i+=2){
317
- idij+=2;
318
- t3+=2;
319
- ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
320
- ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
321
- }
322
- }
323
- }
324
- }else{
325
-
326
- for(j=1;j<ip;j++){
327
- is+=ido;
328
- idij=is-1;
329
- t1+=t0;
330
- t2=t1;
331
- for(i=2;i<ido;i+=2){
332
- idij+=2;
333
- t2+=2;
334
- t3=t2;
335
- for(k=0;k<l1;k++){
336
- ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
337
- ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
338
- t3+=ido;
339
- }
340
- }
341
- }
342
- }
343
-
344
- t1=0;
345
- t2=ipp2*t0;
346
- if(nbd<l1){
347
- for(j=1;j<ipph;j++){
348
- t1+=t0;
349
- t2-=t0;
350
- t3=t1;
351
- t4=t2;
352
- for(i=2;i<ido;i+=2){
353
- t3+=2;
354
- t4+=2;
355
- t5=t3-ido;
356
- t6=t4-ido;
357
- for(k=0;k<l1;k++){
358
- t5+=ido;
359
- t6+=ido;
360
- c1[t5-1]=ch[t5-1]+ch[t6-1];
361
- c1[t6-1]=ch[t5]-ch[t6];
362
- c1[t5]=ch[t5]+ch[t6];
363
- c1[t6]=ch[t6-1]-ch[t5-1];
364
- }
365
- }
366
- }
367
- }else{
368
- for(j=1;j<ipph;j++){
369
- t1+=t0;
370
- t2-=t0;
371
- t3=t1;
372
- t4=t2;
373
- for(k=0;k<l1;k++){
374
- t5=t3;
375
- t6=t4;
376
- for(i=2;i<ido;i+=2){
377
- t5+=2;
378
- t6+=2;
379
- c1[t5-1]=ch[t5-1]+ch[t6-1];
380
- c1[t6-1]=ch[t5]-ch[t6];
381
- c1[t5]=ch[t5]+ch[t6];
382
- c1[t6]=ch[t6-1]-ch[t5-1];
383
- }
384
- t3+=ido;
385
- t4+=ido;
386
- }
387
- }
388
- }
389
-
390
- L119:
391
- for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
392
-
393
- t1=0;
394
- t2=ipp2*idl1;
395
- for(j=1;j<ipph;j++){
396
- t1+=t0;
397
- t2-=t0;
398
- t3=t1-ido;
399
- t4=t2-ido;
400
- for(k=0;k<l1;k++){
401
- t3+=ido;
402
- t4+=ido;
403
- c1[t3]=ch[t3]+ch[t4];
404
- c1[t4]=ch[t4]-ch[t3];
405
- }
406
- }
407
-
408
- ar1=1.f;
409
- ai1=0.f;
410
- t1=0;
411
- t2=ipp2*idl1;
412
- t3=(ip-1)*idl1;
413
- for(l=1;l<ipph;l++){
414
- t1+=idl1;
415
- t2-=idl1;
416
- ar1h=dcp*ar1-dsp*ai1;
417
- ai1=dcp*ai1+dsp*ar1;
418
- ar1=ar1h;
419
- t4=t1;
420
- t5=t2;
421
- t6=t3;
422
- t7=idl1;
423
-
424
- for(ik=0;ik<idl1;ik++){
425
- ch2[t4++]=c2[ik]+ar1*c2[t7++];
426
- ch2[t5++]=ai1*c2[t6++];
427
- }
428
-
429
- dc2=ar1;
430
- ds2=ai1;
431
- ar2=ar1;
432
- ai2=ai1;
433
-
434
- t4=idl1;
435
- t5=(ipp2-1)*idl1;
436
- for(j=2;j<ipph;j++){
437
- t4+=idl1;
438
- t5-=idl1;
439
-
440
- ar2h=dc2*ar2-ds2*ai2;
441
- ai2=dc2*ai2+ds2*ar2;
442
- ar2=ar2h;
443
-
444
- t6=t1;
445
- t7=t2;
446
- t8=t4;
447
- t9=t5;
448
- for(ik=0;ik<idl1;ik++){
449
- ch2[t6++]+=ar2*c2[t8++];
450
- ch2[t7++]+=ai2*c2[t9++];
451
- }
452
- }
453
- }
454
-
455
- t1=0;
456
- for(j=1;j<ipph;j++){
457
- t1+=idl1;
458
- t2=t1;
459
- for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++];
460
- }
461
-
462
- if(ido<l1)goto L132;
463
-
464
- t1=0;
465
- t2=0;
466
- for(k=0;k<l1;k++){
467
- t3=t1;
468
- t4=t2;
469
- for(i=0;i<ido;i++)cc[t4++]=ch[t3++];
470
- t1+=ido;
471
- t2+=t10;
472
- }
473
-
474
- goto L135;
475
-
476
- L132:
477
- for(i=0;i<ido;i++){
478
- t1=i;
479
- t2=i;
480
- for(k=0;k<l1;k++){
481
- cc[t2]=ch[t1];
482
- t1+=ido;
483
- t2+=t10;
484
- }
485
- }
486
-
487
- L135:
488
- t1=0;
489
- t2=ido<<1;
490
- t3=0;
491
- t4=ipp2*t0;
492
- for(j=1;j<ipph;j++){
493
-
494
- t1+=t2;
495
- t3+=t0;
496
- t4-=t0;
497
-
498
- t5=t1;
499
- t6=t3;
500
- t7=t4;
501
-
502
- for(k=0;k<l1;k++){
503
- cc[t5-1]=ch[t6];
504
- cc[t5]=ch[t7];
505
- t5+=t10;
506
- t6+=ido;
507
- t7+=ido;
508
- }
509
- }
510
-
511
- if(ido==1)return;
512
- if(nbd<l1)goto L141;
513
-
514
- t1=-ido;
515
- t3=0;
516
- t4=0;
517
- t5=ipp2*t0;
518
- for(j=1;j<ipph;j++){
519
- t1+=t2;
520
- t3+=t2;
521
- t4+=t0;
522
- t5-=t0;
523
- t6=t1;
524
- t7=t3;
525
- t8=t4;
526
- t9=t5;
527
- for(k=0;k<l1;k++){
528
- for(i=2;i<ido;i+=2){
529
- ic=idp2-i;
530
- cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1];
531
- cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1];
532
- cc[i+t7]=ch[i+t8]+ch[i+t9];
533
- cc[ic+t6]=ch[i+t9]-ch[i+t8];
534
- }
535
- t6+=t10;
536
- t7+=t10;
537
- t8+=ido;
538
- t9+=ido;
539
- }
540
- }
541
- return;
542
-
543
- L141:
544
-
545
- t1=-ido;
546
- t3=0;
547
- t4=0;
548
- t5=ipp2*t0;
549
- for(j=1;j<ipph;j++){
550
- t1+=t2;
551
- t3+=t2;
552
- t4+=t0;
553
- t5-=t0;
554
- for(i=2;i<ido;i+=2){
555
- t6=idp2+t1-i;
556
- t7=i+t3;
557
- t8=i+t4;
558
- t9=i+t5;
559
- for(k=0;k<l1;k++){
560
- cc[t7-1]=ch[t8-1]+ch[t9-1];
561
- cc[t6-1]=ch[t8-1]-ch[t9-1];
562
- cc[t7]=ch[t8]+ch[t9];
563
- cc[t6]=ch[t9]-ch[t8];
564
- t6+=t10;
565
- t7+=t10;
566
- t8+=ido;
567
- t9+=ido;
568
- }
569
- }
570
- }
571
- }
572
-
573
- static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
574
- int i,k1,l1,l2;
575
- int na,kh,nf;
576
- int ip,iw,ido,idl1,ix2,ix3;
577
-
578
- nf=ifac[1];
579
- na=1;
580
- l2=n;
581
- iw=n;
582
-
583
- for(k1=0;k1<nf;k1++){
584
- kh=nf-k1;
585
- ip=ifac[kh+1];
586
- l1=l2/ip;
587
- ido=n/l2;
588
- idl1=ido*l1;
589
- iw-=(ip-1)*ido;
590
- na=1-na;
591
-
592
- if(ip!=4)goto L102;
593
-
594
- ix2=iw+ido;
595
- ix3=ix2+ido;
596
- if(na!=0)
597
- dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
598
- else
599
- dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
600
- goto L110;
601
-
602
- L102:
603
- if(ip!=2)goto L104;
604
- if(na!=0)goto L103;
605
-
606
- dradf2(ido,l1,c,ch,wa+iw-1);
607
- goto L110;
608
-
609
- L103:
610
- dradf2(ido,l1,ch,c,wa+iw-1);
611
- goto L110;
612
-
613
- L104:
614
- if(ido==1)na=1-na;
615
- if(na!=0)goto L109;
616
-
617
- dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
618
- na=1;
619
- goto L110;
620
-
621
- L109:
622
- dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
623
- na=0;
624
-
625
- L110:
626
- l2=l1;
627
- }
628
-
629
- if(na==1)return;
630
-
631
- for(i=0;i<n;i++)c[i]=ch[i];
632
- }
633
-
634
- static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
635
- int i,k,t0,t1,t2,t3,t4,t5,t6;
636
- float ti2,tr2;
637
-
638
- t0=l1*ido;
639
-
640
- t1=0;
641
- t2=0;
642
- t3=(ido<<1)-1;
643
- for(k=0;k<l1;k++){
644
- ch[t1]=cc[t2]+cc[t3+t2];
645
- ch[t1+t0]=cc[t2]-cc[t3+t2];
646
- t2=(t1+=ido)<<1;
647
- }
648
-
649
- if(ido<2)return;
650
- if(ido==2)goto L105;
651
-
652
- t1=0;
653
- t2=0;
654
- for(k=0;k<l1;k++){
655
- t3=t1;
656
- t5=(t4=t2)+(ido<<1);
657
- t6=t0+t1;
658
- for(i=2;i<ido;i+=2){
659
- t3+=2;
660
- t4+=2;
661
- t5-=2;
662
- t6+=2;
663
- ch[t3-1]=cc[t4-1]+cc[t5-1];
664
- tr2=cc[t4-1]-cc[t5-1];
665
- ch[t3]=cc[t4]-cc[t5];
666
- ti2=cc[t4]+cc[t5];
667
- ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2;
668
- ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2;
669
- }
670
- t2=(t1+=ido)<<1;
671
- }
672
-
673
- if(ido%2==1)return;
674
-
675
- L105:
676
- t1=ido-1;
677
- t2=ido-1;
678
- for(k=0;k<l1;k++){
679
- ch[t1]=cc[t2]+cc[t2];
680
- ch[t1+t0]=-(cc[t2+1]+cc[t2+1]);
681
- t1+=ido;
682
- t2+=ido<<1;
683
- }
684
- }
685
-
686
- static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
687
- float *wa2){
688
- static float taur = -.5f;
689
- static float taui = .8660254037844386f;
690
- int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
691
- float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2;
692
- t0=l1*ido;
693
-
694
- t1=0;
695
- t2=t0<<1;
696
- t3=ido<<1;
697
- t4=ido+(ido<<1);
698
- t5=0;
699
- for(k=0;k<l1;k++){
700
- tr2=cc[t3-1]+cc[t3-1];
701
- cr2=cc[t5]+(taur*tr2);
702
- ch[t1]=cc[t5]+tr2;
703
- ci3=taui*(cc[t3]+cc[t3]);
704
- ch[t1+t0]=cr2-ci3;
705
- ch[t1+t2]=cr2+ci3;
706
- t1+=ido;
707
- t3+=t4;
708
- t5+=t4;
709
- }
710
-
711
- if(ido==1)return;
712
-
713
- t1=0;
714
- t3=ido<<1;
715
- for(k=0;k<l1;k++){
716
- t7=t1+(t1<<1);
717
- t6=(t5=t7+t3);
718
- t8=t1;
719
- t10=(t9=t1+t0)+t0;
720
-
721
- for(i=2;i<ido;i+=2){
722
- t5+=2;
723
- t6-=2;
724
- t7+=2;
725
- t8+=2;
726
- t9+=2;
727
- t10+=2;
728
- tr2=cc[t5-1]+cc[t6-1];
729
- cr2=cc[t7-1]+(taur*tr2);
730
- ch[t8-1]=cc[t7-1]+tr2;
731
- ti2=cc[t5]-cc[t6];
732
- ci2=cc[t7]+(taur*ti2);
733
- ch[t8]=cc[t7]+ti2;
734
- cr3=taui*(cc[t5-1]-cc[t6-1]);
735
- ci3=taui*(cc[t5]+cc[t6]);
736
- dr2=cr2-ci3;
737
- dr3=cr2+ci3;
738
- di2=ci2+cr3;
739
- di3=ci2-cr3;
740
- ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2;
741
- ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2;
742
- ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3;
743
- ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3;
744
- }
745
- t1+=ido;
746
- }
747
- }
748
-
749
- static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
750
- float *wa2,float *wa3){
751
- static float sqrt2=1.414213562373095f;
752
- int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8;
753
- float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
754
- t0=l1*ido;
755
-
756
- t1=0;
757
- t2=ido<<2;
758
- t3=0;
759
- t6=ido<<1;
760
- for(k=0;k<l1;k++){
761
- t4=t3+t6;
762
- t5=t1;
763
- tr3=cc[t4-1]+cc[t4-1];
764
- tr4=cc[t4]+cc[t4];
765
- tr1=cc[t3]-cc[(t4+=t6)-1];
766
- tr2=cc[t3]+cc[t4-1];
767
- ch[t5]=tr2+tr3;
768
- ch[t5+=t0]=tr1-tr4;
769
- ch[t5+=t0]=tr2-tr3;
770
- ch[t5+=t0]=tr1+tr4;
771
- t1+=ido;
772
- t3+=t2;
773
- }
774
-
775
- if(ido<2)return;
776
- if(ido==2)goto L105;
777
-
778
- t1=0;
779
- for(k=0;k<l1;k++){
780
- t5=(t4=(t3=(t2=t1<<2)+t6))+t6;
781
- t7=t1;
782
- for(i=2;i<ido;i+=2){
783
- t2+=2;
784
- t3+=2;
785
- t4-=2;
786
- t5-=2;
787
- t7+=2;
788
- ti1=cc[t2]+cc[t5];
789
- ti2=cc[t2]-cc[t5];
790
- ti3=cc[t3]-cc[t4];
791
- tr4=cc[t3]+cc[t4];
792
- tr1=cc[t2-1]-cc[t5-1];
793
- tr2=cc[t2-1]+cc[t5-1];
794
- ti4=cc[t3-1]-cc[t4-1];
795
- tr3=cc[t3-1]+cc[t4-1];
796
- ch[t7-1]=tr2+tr3;
797
- cr3=tr2-tr3;
798
- ch[t7]=ti2+ti3;
799
- ci3=ti2-ti3;
800
- cr2=tr1-tr4;
801
- cr4=tr1+tr4;
802
- ci2=ti1+ti4;
803
- ci4=ti1-ti4;
804
-
805
- ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2;
806
- ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2;
807
- ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3;
808
- ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3;
809
- ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4;
810
- ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4;
811
- }
812
- t1+=ido;
813
- }
814
-
815
- if(ido%2 == 1)return;
816
-
817
- L105:
818
-
819
- t1=ido;
820
- t2=ido<<2;
821
- t3=ido-1;
822
- t4=ido+(ido<<1);
823
- for(k=0;k<l1;k++){
824
- t5=t3;
825
- ti1=cc[t1]+cc[t4];
826
- ti2=cc[t4]-cc[t1];
827
- tr1=cc[t1-1]-cc[t4-1];
828
- tr2=cc[t1-1]+cc[t4-1];
829
- ch[t5]=tr2+tr2;
830
- ch[t5+=t0]=sqrt2*(tr1-ti1);
831
- ch[t5+=t0]=ti2+ti2;
832
- ch[t5+=t0]=-sqrt2*(tr1+ti1);
833
-
834
- t3+=ido;
835
- t1+=t2;
836
- t4+=t2;
837
- }
838
- }
839
-
840
- static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
841
- float *c2,float *ch,float *ch2,float *wa){
842
- static float tpi=6.283185307179586f;
843
- int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
844
- t11,t12;
845
- float dc2,ai1,ai2,ar1,ar2,ds2;
846
- int nbd;
847
- float dcp,arg,dsp,ar1h,ar2h;
848
- int ipp2;
849
-
850
- t10=ip*ido;
851
- t0=l1*ido;
852
- arg=tpi/(float)ip;
853
- dcp=cos(arg);
854
- dsp=sin(arg);
855
- nbd=(ido-1)>>1;
856
- ipp2=ip;
857
- ipph=(ip+1)>>1;
858
- if(ido<l1)goto L103;
859
-
860
- t1=0;
861
- t2=0;
862
- for(k=0;k<l1;k++){
863
- t3=t1;
864
- t4=t2;
865
- for(i=0;i<ido;i++){
866
- ch[t3]=cc[t4];
867
- t3++;
868
- t4++;
869
- }
870
- t1+=ido;
871
- t2+=t10;
872
- }
873
- goto L106;
874
-
875
- L103:
876
- t1=0;
877
- for(i=0;i<ido;i++){
878
- t2=t1;
879
- t3=t1;
880
- for(k=0;k<l1;k++){
881
- ch[t2]=cc[t3];
882
- t2+=ido;
883
- t3+=t10;
884
- }
885
- t1++;
886
- }
887
-
888
- L106:
889
- t1=0;
890
- t2=ipp2*t0;
891
- t7=(t5=ido<<1);
892
- for(j=1;j<ipph;j++){
893
- t1+=t0;
894
- t2-=t0;
895
- t3=t1;
896
- t4=t2;
897
- t6=t5;
898
- for(k=0;k<l1;k++){
899
- ch[t3]=cc[t6-1]+cc[t6-1];
900
- ch[t4]=cc[t6]+cc[t6];
901
- t3+=ido;
902
- t4+=ido;
903
- t6+=t10;
904
- }
905
- t5+=t7;
906
- }
907
-
908
- if (ido == 1)goto L116;
909
- if(nbd<l1)goto L112;
910
-
911
- t1=0;
912
- t2=ipp2*t0;
913
- t7=0;
914
- for(j=1;j<ipph;j++){
915
- t1+=t0;
916
- t2-=t0;
917
- t3=t1;
918
- t4=t2;
919
-
920
- t7+=(ido<<1);
921
- t8=t7;
922
- for(k=0;k<l1;k++){
923
- t5=t3;
924
- t6=t4;
925
- t9=t8;
926
- t11=t8;
927
- for(i=2;i<ido;i+=2){
928
- t5+=2;
929
- t6+=2;
930
- t9+=2;
931
- t11-=2;
932
- ch[t5-1]=cc[t9-1]+cc[t11-1];
933
- ch[t6-1]=cc[t9-1]-cc[t11-1];
934
- ch[t5]=cc[t9]-cc[t11];
935
- ch[t6]=cc[t9]+cc[t11];
936
- }
937
- t3+=ido;
938
- t4+=ido;
939
- t8+=t10;
940
- }
941
- }
942
- goto L116;
943
-
944
- L112:
945
- t1=0;
946
- t2=ipp2*t0;
947
- t7=0;
948
- for(j=1;j<ipph;j++){
949
- t1+=t0;
950
- t2-=t0;
951
- t3=t1;
952
- t4=t2;
953
- t7+=(ido<<1);
954
- t8=t7;
955
- t9=t7;
956
- for(i=2;i<ido;i+=2){
957
- t3+=2;
958
- t4+=2;
959
- t8+=2;
960
- t9-=2;
961
- t5=t3;
962
- t6=t4;
963
- t11=t8;
964
- t12=t9;
965
- for(k=0;k<l1;k++){
966
- ch[t5-1]=cc[t11-1]+cc[t12-1];
967
- ch[t6-1]=cc[t11-1]-cc[t12-1];
968
- ch[t5]=cc[t11]-cc[t12];
969
- ch[t6]=cc[t11]+cc[t12];
970
- t5+=ido;
971
- t6+=ido;
972
- t11+=t10;
973
- t12+=t10;
974
- }
975
- }
976
- }
977
-
978
- L116:
979
- ar1=1.f;
980
- ai1=0.f;
981
- t1=0;
982
- t9=(t2=ipp2*idl1);
983
- t3=(ip-1)*idl1;
984
- for(l=1;l<ipph;l++){
985
- t1+=idl1;
986
- t2-=idl1;
987
-
988
- ar1h=dcp*ar1-dsp*ai1;
989
- ai1=dcp*ai1+dsp*ar1;
990
- ar1=ar1h;
991
- t4=t1;
992
- t5=t2;
993
- t6=0;
994
- t7=idl1;
995
- t8=t3;
996
- for(ik=0;ik<idl1;ik++){
997
- c2[t4++]=ch2[t6++]+ar1*ch2[t7++];
998
- c2[t5++]=ai1*ch2[t8++];
999
- }
1000
- dc2=ar1;
1001
- ds2=ai1;
1002
- ar2=ar1;
1003
- ai2=ai1;
1004
-
1005
- t6=idl1;
1006
- t7=t9-idl1;
1007
- for(j=2;j<ipph;j++){
1008
- t6+=idl1;
1009
- t7-=idl1;
1010
- ar2h=dc2*ar2-ds2*ai2;
1011
- ai2=dc2*ai2+ds2*ar2;
1012
- ar2=ar2h;
1013
- t4=t1;
1014
- t5=t2;
1015
- t11=t6;
1016
- t12=t7;
1017
- for(ik=0;ik<idl1;ik++){
1018
- c2[t4++]+=ar2*ch2[t11++];
1019
- c2[t5++]+=ai2*ch2[t12++];
1020
- }
1021
- }
1022
- }
1023
-
1024
- t1=0;
1025
- for(j=1;j<ipph;j++){
1026
- t1+=idl1;
1027
- t2=t1;
1028
- for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++];
1029
- }
1030
-
1031
- t1=0;
1032
- t2=ipp2*t0;
1033
- for(j=1;j<ipph;j++){
1034
- t1+=t0;
1035
- t2-=t0;
1036
- t3=t1;
1037
- t4=t2;
1038
- for(k=0;k<l1;k++){
1039
- ch[t3]=c1[t3]-c1[t4];
1040
- ch[t4]=c1[t3]+c1[t4];
1041
- t3+=ido;
1042
- t4+=ido;
1043
- }
1044
- }
1045
-
1046
- if(ido==1)goto L132;
1047
- if(nbd<l1)goto L128;
1048
-
1049
- t1=0;
1050
- t2=ipp2*t0;
1051
- for(j=1;j<ipph;j++){
1052
- t1+=t0;
1053
- t2-=t0;
1054
- t3=t1;
1055
- t4=t2;
1056
- for(k=0;k<l1;k++){
1057
- t5=t3;
1058
- t6=t4;
1059
- for(i=2;i<ido;i+=2){
1060
- t5+=2;
1061
- t6+=2;
1062
- ch[t5-1]=c1[t5-1]-c1[t6];
1063
- ch[t6-1]=c1[t5-1]+c1[t6];
1064
- ch[t5]=c1[t5]+c1[t6-1];
1065
- ch[t6]=c1[t5]-c1[t6-1];
1066
- }
1067
- t3+=ido;
1068
- t4+=ido;
1069
- }
1070
- }
1071
- goto L132;
1072
-
1073
- L128:
1074
- t1=0;
1075
- t2=ipp2*t0;
1076
- for(j=1;j<ipph;j++){
1077
- t1+=t0;
1078
- t2-=t0;
1079
- t3=t1;
1080
- t4=t2;
1081
- for(i=2;i<ido;i+=2){
1082
- t3+=2;
1083
- t4+=2;
1084
- t5=t3;
1085
- t6=t4;
1086
- for(k=0;k<l1;k++){
1087
- ch[t5-1]=c1[t5-1]-c1[t6];
1088
- ch[t6-1]=c1[t5-1]+c1[t6];
1089
- ch[t5]=c1[t5]+c1[t6-1];
1090
- ch[t6]=c1[t5]-c1[t6-1];
1091
- t5+=ido;
1092
- t6+=ido;
1093
- }
1094
- }
1095
- }
1096
-
1097
- L132:
1098
- if(ido==1)return;
1099
-
1100
- for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
1101
-
1102
- t1=0;
1103
- for(j=1;j<ip;j++){
1104
- t2=(t1+=t0);
1105
- for(k=0;k<l1;k++){
1106
- c1[t2]=ch[t2];
1107
- t2+=ido;
1108
- }
1109
- }
1110
-
1111
- if(nbd>l1)goto L139;
1112
-
1113
- is= -ido-1;
1114
- t1=0;
1115
- for(j=1;j<ip;j++){
1116
- is+=ido;
1117
- t1+=t0;
1118
- idij=is;
1119
- t2=t1;
1120
- for(i=2;i<ido;i+=2){
1121
- t2+=2;
1122
- idij+=2;
1123
- t3=t2;
1124
- for(k=0;k<l1;k++){
1125
- c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
1126
- c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
1127
- t3+=ido;
1128
- }
1129
- }
1130
- }
1131
- return;
1132
-
1133
- L139:
1134
- is= -ido-1;
1135
- t1=0;
1136
- for(j=1;j<ip;j++){
1137
- is+=ido;
1138
- t1+=t0;
1139
- t2=t1;
1140
- for(k=0;k<l1;k++){
1141
- idij=is;
1142
- t3=t2;
1143
- for(i=2;i<ido;i+=2){
1144
- idij+=2;
1145
- t3+=2;
1146
- c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
1147
- c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
1148
- }
1149
- t2+=ido;
1150
- }
1151
- }
1152
- }
1153
-
1154
- static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
1155
- int i,k1,l1,l2;
1156
- int na;
1157
- int nf,ip,iw,ix2,ix3,ido,idl1;
1158
-
1159
- nf=ifac[1];
1160
- na=0;
1161
- l1=1;
1162
- iw=1;
1163
-
1164
- for(k1=0;k1<nf;k1++){
1165
- ip=ifac[k1 + 2];
1166
- l2=ip*l1;
1167
- ido=n/l2;
1168
- idl1=ido*l1;
1169
- if(ip!=4)goto L103;
1170
- ix2=iw+ido;
1171
- ix3=ix2+ido;
1172
-
1173
- if(na!=0)
1174
- dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
1175
- else
1176
- dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
1177
- na=1-na;
1178
- goto L115;
1179
-
1180
- L103:
1181
- if(ip!=2)goto L106;
1182
-
1183
- if(na!=0)
1184
- dradb2(ido,l1,ch,c,wa+iw-1);
1185
- else
1186
- dradb2(ido,l1,c,ch,wa+iw-1);
1187
- na=1-na;
1188
- goto L115;
1189
-
1190
- L106:
1191
- if(ip!=3)goto L109;
1192
-
1193
- ix2=iw+ido;
1194
- if(na!=0)
1195
- dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1);
1196
- else
1197
- dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1);
1198
- na=1-na;
1199
- goto L115;
1200
-
1201
- L109:
1202
- /* The radix five case can be translated later..... */
1203
- /* if(ip!=5)goto L112;
1204
-
1205
- ix2=iw+ido;
1206
- ix3=ix2+ido;
1207
- ix4=ix3+ido;
1208
- if(na!=0)
1209
- dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
1210
- else
1211
- dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
1212
- na=1-na;
1213
- goto L115;
1214
-
1215
- L112:*/
1216
- if(na!=0)
1217
- dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
1218
- else
1219
- dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
1220
- if(ido==1)na=1-na;
1221
-
1222
- L115:
1223
- l1=l2;
1224
- iw+=(ip-1)*ido;
1225
- }
1226
-
1227
- if(na==0)return;
1228
-
1229
- for(i=0;i<n;i++)c[i]=ch[i];
1230
- }
1231
-
1232
- void drft_forward(drft_lookup *l,float *data){
1233
- if(l->n==1)return;
1234
- drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
1235
- }
1236
-
1237
- void drft_backward(drft_lookup *l,float *data){
1238
- if (l->n==1)return;
1239
- drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
1240
- }
1241
-
1242
- void drft_init(drft_lookup *l,int n){
1243
- l->n=n;
1244
- l->trigcache=_ogg_calloc(3*n,sizeof(*l->trigcache));
1245
- l->splitcache=_ogg_calloc(32,sizeof(*l->splitcache));
1246
- fdrffti(n, l->trigcache, l->splitcache);
1247
- }
1248
-
1249
- void drft_clear(drft_lookup *l){
1250
- if(l){
1251
- if(l->trigcache)_ogg_free(l->trigcache);
1252
- if(l->splitcache)_ogg_free(l->splitcache);
1253
- memset(l,0,sizeof(*l));
1254
- }
1255
- }