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