198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/********************************************************************
298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project *                                                                  *
398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project *                                                                  *
898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * by the XIPHOPHORUS Company http://www.xiph.org/                  *
1098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project *                                                                  *
1198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project ********************************************************************
1298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project function: *unnormalized* fft transform
1498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project last mod: $Id: smallft.c,v 1.19 2003/10/08 05:12:37 jm Exp $
1598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project ********************************************************************/
1798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/* FFT implementation from OggSquish, minus cosine transforms,
1998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * minus all but radix 2/4 case.  In Vorbis we only need this
2098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * cut-down version.
2198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project *
2298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * To do more than just power-of-two sized vectors, see the full
2398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * version I wrote for NetLib.
2498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project *
2598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * Note that the packing is a little strange; rather than the FFT r/i
2698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1,
2798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the
2898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project * FORTRAN version
2998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project */
3098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
3198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifdef HAVE_CONFIG_H
3298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "config.h"
3398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif
3498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
3598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include <math.h>
3698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "smallft.h"
3798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "arch.h"
3898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "os_support.h"
3998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
4098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void drfti1(int n, float *wa, int *ifac){
4198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static int ntryh[4] = { 4,2,3,5 };
4298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float tpi = 6.28318530717958648f;
4398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float arg,argh,argld,fi;
4498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int ntry=0,i,j=-1;
4598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int k1, l1, l2, ib;
4698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int ld, ii, ip, is, nq, nr;
4798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int ido, ipm, nfm1;
4898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int nl=n;
4998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int nf=0;
5098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L101:
5298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  j++;
5398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if (j < 4)
5498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ntry=ntryh[j];
5598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  else
5698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ntry+=2;
5798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L104:
5998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nq=nl/ntry;
6098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nr=nl-ntry*nq;
6198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if (nr!=0) goto L101;
6298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
6398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nf++;
6498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ifac[nf+1]=ntry;
6598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nl=nq;
6698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ntry!=2)goto L107;
6798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nf==1)goto L107;
6898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
6998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for (i=1;i<nf;i++){
7098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ib=nf-i+1;
7198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ifac[ib+1]=ifac[ib];
7298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
7398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ifac[2] = 2;
7498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
7598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L107:
7698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nl!=1)goto L104;
7798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ifac[0]=n;
7898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ifac[1]=nf;
7998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  argh=tpi/n;
8098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  is=0;
8198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nfm1=nf-1;
8298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l1=1;
8398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
8498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nfm1==0)return;
8598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
8698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for (k1=0;k1<nfm1;k1++){
8798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ip=ifac[k1+2];
8898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ld=0;
8998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l2=l1*ip;
9098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ido=n/l2;
9198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ipm=ip-1;
9298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
9398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for (j=0;j<ipm;j++){
9498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ld+=l1;
9598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      i=is;
9698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      argld=(float)ld*argh;
9798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      fi=0.f;
9898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for (ii=2;ii<ido;ii+=2){
9998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project	fi+=1.f;
10098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project	arg=fi*argld;
10198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project	wa[i++]=cos(arg);
10298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project	wa[i++]=sin(arg);
10398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
10498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      is+=ido;
10598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
10698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l1=l2;
10798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
10898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
10998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
11098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void fdrffti(int n, float *wsave, int *ifac){
11198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
11298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if (n == 1) return;
11398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  drfti1(n, wsave+n, ifac);
11498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
11598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
11698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
11798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k;
11898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float ti2,tr2;
11998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int t0,t1,t2,t3,t4,t5,t6;
12098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
12198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
12298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=(t2=l1*ido);
12398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=ido<<1;
12498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
12598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1<<1]=cc[t1]+cc[t2];
12698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[(t1<<1)+t3-1]=cc[t1]-cc[t2];
12798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
12898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido;
12998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
13098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
13198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<2)return;
13298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==2)goto L105;
13398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
13498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
13598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=t0;
13698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
13798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t2;
13898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=(t1<<1)+(ido<<1);
13998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t1;
14098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t1+t1;
14198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
14298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=2;
14398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4-=2;
14498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5+=2;
14598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=2;
14698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
14798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
14898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t6]=cc[t5]+ti2;
14998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4]=ti2-cc[t5];
15098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t6-1]=cc[t5-1]+tr2;
15198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4-1]=cc[t5-1]-tr2;
15298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
15398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
15498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido;
15598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
15698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
15798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido%2==1)return;
15898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
15998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L105:
16098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=(t2=(t1=ido)-1);
16198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2+=t0;
16298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
16398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1]=-cc[t2];
16498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1-1]=cc[t3];
16598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido<<1;
16698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido;
16798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=ido;
16898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
16998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
17098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
17198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
17298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project	    float *wa2,float *wa3){
17398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float hsqt2 = .70710678118654752f;
17498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k,t0,t1,t2,t3,t4,t5,t6;
17598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
17698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
17798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
17898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=t0;
17998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=t1<<1;
18098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=t1+(t1<<1);
18198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=0;
18298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
18398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
18498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr1=cc[t1]+cc[t2];
18598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr2=cc[t3]+cc[t4];
18698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
18798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5=t3<<2]=tr1+tr2;
18898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[(ido<<2)+t5-1]=tr2-tr1;
18998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
19098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5]=cc[t2]-cc[t1];
19198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
19298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
19398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido;
19498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=ido;
19598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4+=ido;
19698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
19798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
19898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<2)return;
19998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==2)goto L105;
20098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
20198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
20298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
20398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
20498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
20598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t1<<2;
20698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=(t6=ido<<1)+t4;
20798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
20898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3=(t2+=2);
20998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=2;
21098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5-=2;
21198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
21298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=t0;
21398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
21498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
21598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=t0;
21698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3];
21798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1];
21898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=t0;
21998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3];
22098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1];
22198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
22298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr1=cr2+cr4;
22398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr4=cr4-cr2;
22498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti1=ci2+ci4;
22598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti4=ci2-ci4;
22698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
22798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti2=cc[t2]+ci3;
22898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti3=cc[t2]-ci3;
22998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr2=cc[t2-1]+cr3;
23098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr3=cc[t2-1]-cr3;
23198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
23298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4-1]=tr1+tr2;
23398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4]=ti1+ti2;
23498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
23598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t5-1]=tr3-ti4;
23698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t5]=tr4-ti3;
23798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
23898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4+t6-1]=ti4+tr3;
23998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4+t6]=tr4+ti3;
24098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
24198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t5+t6-1]=tr2-tr1;
24298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t5+t6]=ti1-ti2;
24398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
24498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
24598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
24698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido&1)return;
24798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
24898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L105:
24998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
25098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=(t1=t0+ido-1)+(t0<<1);
25198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=ido<<2;
25298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=ido;
25398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t5=ido<<1;
25498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t6=ido;
25598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
25698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
25798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ti1=-hsqt2*(cc[t1]+cc[t2]);
25898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr1=hsqt2*(cc[t1]-cc[t2]);
25998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
26098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t4-1]=tr1+cc[t6-1];
26198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t4+t5-1]=cc[t6-1]-tr1;
26298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
26398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t4]=ti1-cc[t1+t0];
26498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t4+t5]=ti1+cc[t1+t0];
26598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
26698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
26798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido;
26898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4+=t3;
26998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6+=ido;
27098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
27198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
27298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
27398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
27498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project                          float *c2,float *ch,float *ch2,float *wa){
27598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
27698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float tpi=6.283185307179586f;
27798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int idij,ipph,i,j,k,l,ic,ik,is;
27898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
27998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float dc2,ai1,ai2,ar1,ar2,ds2;
28098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int nbd;
28198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float dcp,arg,dsp,ar1h,ar2h;
28298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int idp2,ipp2;
28398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
28498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  arg=tpi/(float)ip;
28598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  dcp=cos(arg);
28698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  dsp=sin(arg);
28798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ipph=(ip+1)>>1;
28898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ipp2=ip;
28998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  idp2=ido;
29098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nbd=(ido-1)>>1;
29198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
29298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t10=ip*ido;
29398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
29498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==1)goto L119;
29598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik];
29698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
29798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
29898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ip;j++){
29998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
30098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
30198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
30298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t2]=c1[t2];
30398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=ido;
30498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
30598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
30698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
30798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  is=-ido;
30898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
30998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd>l1){
31098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=1;j<ip;j++){
31198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t1+=t0;
31298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      is+=ido;
31398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2= -ido+t1;
31498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
31598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        idij=is-1;
31698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t2+=ido;
31798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3=t2;
31898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        for(i=2;i<ido;i+=2){
31998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          idij+=2;
32098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t3+=2;
32198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
32298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
32398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        }
32498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
32598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
32698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }else{
32798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
32898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=1;j<ip;j++){
32998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      is+=ido;
33098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      idij=is-1;
33198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t1+=t0;
33298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2=t1;
33398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
33498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        idij+=2;
33598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t2+=2;
33698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3=t2;
33798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        for(k=0;k<l1;k++){
33898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
33998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
34098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t3+=ido;
34198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        }
34298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
34398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
34498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
34598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
34698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
34798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
34898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd<l1){
34998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=1;j<ipph;j++){
35098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t1+=t0;
35198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2-=t0;
35298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3=t1;
35398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4=t2;
35498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
35598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3+=2;
35698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t4+=2;
35798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5=t3-ido;
35898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6=t4-ido;
35998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        for(k=0;k<l1;k++){
36098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t5+=ido;
36198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t6+=ido;
36298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t5-1]=ch[t5-1]+ch[t6-1];
36398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t6-1]=ch[t5]-ch[t6];
36498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t5]=ch[t5]+ch[t6];
36598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t6]=ch[t6-1]-ch[t5-1];
36698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        }
36798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
36898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
36998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }else{
37098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=1;j<ipph;j++){
37198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t1+=t0;
37298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2-=t0;
37398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3=t1;
37498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4=t2;
37598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
37698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5=t3;
37798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6=t4;
37898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        for(i=2;i<ido;i+=2){
37998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t5+=2;
38098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          t6+=2;
38198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t5-1]=ch[t5-1]+ch[t6-1];
38298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t6-1]=ch[t5]-ch[t6];
38398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t5]=ch[t5]+ch[t6];
38498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project          c1[t6]=ch[t6-1]-ch[t5-1];
38598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        }
38698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3+=ido;
38798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t4+=ido;
38898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
38998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
39098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
39198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
39298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectL119:
39398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
39498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
39598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
39698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*idl1;
39798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
39898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
39998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
40098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1-ido;
40198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2-ido;
40298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
40398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=ido;
40498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=ido;
40598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      c1[t3]=ch[t3]+ch[t4];
40698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      c1[t4]=ch[t4]-ch[t3];
40798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
40898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
40998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
41098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ar1=1.f;
41198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ai1=0.f;
41298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
41398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*idl1;
41498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=(ip-1)*idl1;
41598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(l=1;l<ipph;l++){
41698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=idl1;
41798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=idl1;
41898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar1h=dcp*ar1-dsp*ai1;
41998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ai1=dcp*ai1+dsp*ar1;
42098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar1=ar1h;
42198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t1;
42298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t2;
42398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t3;
42498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=idl1;
42598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
42698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(ik=0;ik<idl1;ik++){
42798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch2[t4++]=c2[ik]+ar1*c2[t7++];
42898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch2[t5++]=ai1*c2[t6++];
42998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
43098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
43198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dc2=ar1;
43298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ds2=ai1;
43398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar2=ar1;
43498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ai2=ai1;
43598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
43698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=idl1;
43798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=(ipp2-1)*idl1;
43898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=2;j<ipph;j++){
43998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=idl1;
44098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5-=idl1;
44198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
44298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ar2h=dc2*ar2-ds2*ai2;
44398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ai2=dc2*ai2+ds2*ar2;
44498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ar2=ar2h;
44598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
44698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=t1;
44798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7=t2;
44898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8=t4;
44998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9=t5;
45098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(ik=0;ik<idl1;ik++){
45198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch2[t6++]+=ar2*c2[t8++];
45298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch2[t7++]+=ai2*c2[t9++];
45398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
45498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
45598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
45698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
45798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
45898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
45998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=idl1;
46098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
46198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++];
46298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
46398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
46498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<l1)goto L132;
46598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
46698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
46798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=0;
46898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
46998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
47098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
47198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=0;i<ido;i++)cc[t4++]=ch[t3++];
47298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
47398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=t10;
47498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
47598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
47698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  goto L135;
47798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
47898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L132:
47998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(i=0;i<ido;i++){
48098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1=i;
48198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=i;
48298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
48398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cc[t2]=ch[t1];
48498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t1+=ido;
48598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=t10;
48698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
48798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
48898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
48998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L135:
49098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
49198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ido<<1;
49298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=0;
49398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=ipp2*t0;
49498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
49598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
49698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t2;
49798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=t0;
49898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4-=t0;
49998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
50098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t1;
50198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t3;
50298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=t4;
50398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
50498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
50598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cc[t5-1]=ch[t6];
50698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cc[t5]=ch[t7];
50798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5+=t10;
50898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=ido;
50998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7+=ido;
51098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
51198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
51298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
51398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==1)return;
51498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd<l1)goto L141;
51598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
51698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=-ido;
51798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=0;
51898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=0;
51998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t5=ipp2*t0;
52098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
52198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t2;
52298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=t2;
52398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4+=t0;
52498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5-=t0;
52598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t1;
52698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=t3;
52798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t8=t4;
52898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t9=t5;
52998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
53098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
53198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ic=idp2-i;
53298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1];
53398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1];
53498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[i+t7]=ch[i+t8]+ch[i+t9];
53598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[ic+t6]=ch[i+t9]-ch[i+t8];
53698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
53798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=t10;
53898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7+=t10;
53998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8+=ido;
54098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9+=ido;
54198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
54298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
54398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  return;
54498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
54598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L141:
54698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
54798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=-ido;
54898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=0;
54998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=0;
55098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t5=ipp2*t0;
55198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
55298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t2;
55398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=t2;
55498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4+=t0;
55598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5-=t0;
55698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
55798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=idp2+t1-i;
55898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7=i+t3;
55998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8=i+t4;
56098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9=i+t5;
56198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
56298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[t7-1]=ch[t8-1]+ch[t9-1];
56398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[t6-1]=ch[t8-1]-ch[t9-1];
56498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[t7]=ch[t8]+ch[t9];
56598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        cc[t6]=ch[t9]-ch[t8];
56698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6+=t10;
56798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t7+=t10;
56898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t8+=ido;
56998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t9+=ido;
57098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
57198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
57298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
57398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
57498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
57598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
57698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k1,l1,l2;
57798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int na,kh,nf;
57898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int ip,iw,ido,idl1,ix2,ix3;
57998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
58098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nf=ifac[1];
58198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  na=1;
58298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l2=n;
58398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  iw=n;
58498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
58598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k1=0;k1<nf;k1++){
58698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    kh=nf-k1;
58798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ip=ifac[kh+1];
58898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l1=l2/ip;
58998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ido=n/l2;
59098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    idl1=ido*l1;
59198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    iw-=(ip-1)*ido;
59298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1-na;
59398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
59498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ip!=4)goto L102;
59598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
59698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix2=iw+ido;
59798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix3=ix2+ido;
59898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
59998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
60098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
60198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
60298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L110;
60398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
60498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L102:
60598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ip!=2)goto L104;
60698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)goto L103;
60798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
60898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dradf2(ido,l1,c,ch,wa+iw-1);
60998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L110;
61098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
61198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L103:
61298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dradf2(ido,l1,ch,c,wa+iw-1);
61398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L110;
61498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
61598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L104:
61698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ido==1)na=1-na;
61798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)goto L109;
61898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
61998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
62098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1;
62198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L110;
62298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
62398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L109:
62498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
62598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=0;
62698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
62798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L110:
62898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l2=l1;
62998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
63098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
63198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(na==1)return;
63298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
63398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(i=0;i<n;i++)c[i]=ch[i];
63498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
63598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
63698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
63798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k,t0,t1,t2,t3,t4,t5,t6;
63898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float ti2,tr2;
63998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
64098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
64198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
64298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
64398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=0;
64498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=(ido<<1)-1;
64598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
64698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1]=cc[t2]+cc[t3+t2];
64798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1+t0]=cc[t2]-cc[t3+t2];
64898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=(t1+=ido)<<1;
64998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
65098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
65198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<2)return;
65298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==2)goto L105;
65398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
65498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
65598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=0;
65698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
65798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
65898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=(t4=t2)+(ido<<1);
65998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t0+t1;
66098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
66198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=2;
66298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=2;
66398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5-=2;
66498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=2;
66598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t3-1]=cc[t4-1]+cc[t5-1];
66698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr2=cc[t4-1]-cc[t5-1];
66798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t3]=cc[t4]-cc[t5];
66898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti2=cc[t4]+cc[t5];
66998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2;
67098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2;
67198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
67298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=(t1+=ido)<<1;
67398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
67498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
67598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido%2==1)return;
67698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
67798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectL105:
67898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=ido-1;
67998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ido-1;
68098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
68198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1]=cc[t2]+cc[t2];
68298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1+t0]=-(cc[t2+1]+cc[t2+1]);
68398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
68498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=ido<<1;
68598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
68698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
68798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
68898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
68998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project                          float *wa2){
69098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float taur = -.5f;
69198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float taui = .8660254037844386f;
69298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
69398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2;
69498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
69598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
69698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
69798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=t0<<1;
69898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=ido<<1;
69998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=ido+(ido<<1);
70098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t5=0;
70198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
70298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr2=cc[t3-1]+cc[t3-1];
70398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    cr2=cc[t5]+(taur*tr2);
70498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1]=cc[t5]+tr2;
70598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ci3=taui*(cc[t3]+cc[t3]);
70698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1+t0]=cr2-ci3;
70798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t1+t2]=cr2+ci3;
70898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
70998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=t4;
71098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5+=t4;
71198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
71298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
71398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==1)return;
71498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
71598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
71698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=ido<<1;
71798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
71898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=t1+(t1<<1);
71998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=(t5=t7+t3);
72098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t8=t1;
72198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t10=(t9=t1+t0)+t0;
72298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
72398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
72498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5+=2;
72598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6-=2;
72698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7+=2;
72798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8+=2;
72898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9+=2;
72998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t10+=2;
73098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr2=cc[t5-1]+cc[t6-1];
73198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr2=cc[t7-1]+(taur*tr2);
73298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t8-1]=cc[t7-1]+tr2;
73398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti2=cc[t5]-cc[t6];
73498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci2=cc[t7]+(taur*ti2);
73598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t8]=cc[t7]+ti2;
73698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr3=taui*(cc[t5-1]-cc[t6-1]);
73798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci3=taui*(cc[t5]+cc[t6]);
73898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dr2=cr2-ci3;
73998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dr3=cr2+ci3;
74098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      di2=ci2+cr3;
74198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      di3=ci2-cr3;
74298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2;
74398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2;
74498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3;
74598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3;
74698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
74798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
74898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
74998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
75098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
75198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
75298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project			  float *wa2,float *wa3){
75398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float sqrt2=1.414213562373095f;
75498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8;
75598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
75698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
75798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
75898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
75998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ido<<2;
76098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=0;
76198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t6=ido<<1;
76298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
76398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t3+t6;
76498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t1;
76598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr3=cc[t4-1]+cc[t4-1];
76698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr4=cc[t4]+cc[t4];
76798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr1=cc[t3]-cc[(t4+=t6)-1];
76898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr2=cc[t3]+cc[t4-1];
76998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5]=tr2+tr3;
77098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=tr1-tr4;
77198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=tr2-tr3;
77298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=tr1+tr4;
77398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
77498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=t2;
77598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
77698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
77798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<2)return;
77898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==2)goto L105;
77998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
78098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
78198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
78298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=(t4=(t3=(t2=t1<<2)+t6))+t6;
78398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=t1;
78498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
78598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=2;
78698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=2;
78798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4-=2;
78898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5-=2;
78998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7+=2;
79098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti1=cc[t2]+cc[t5];
79198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti2=cc[t2]-cc[t5];
79298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti3=cc[t3]-cc[t4];
79398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr4=cc[t3]+cc[t4];
79498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr1=cc[t2-1]-cc[t5-1];
79598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr2=cc[t2-1]+cc[t5-1];
79698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ti4=cc[t3-1]-cc[t4-1];
79798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      tr3=cc[t3-1]+cc[t4-1];
79898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t7-1]=tr2+tr3;
79998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr3=tr2-tr3;
80098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t7]=ti2+ti3;
80198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci3=ti2-ti3;
80298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr2=tr1-tr4;
80398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      cr4=tr1+tr4;
80498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci2=ti1+ti4;
80598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ci4=ti1-ti4;
80698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
80798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2;
80898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2;
80998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3;
81098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3;
81198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4;
81298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4;
81398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
81498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
81598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
81698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
81798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido%2 == 1)return;
81898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
81998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L105:
82098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
82198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=ido;
82298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ido<<2;
82398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=ido-1;
82498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t4=ido+(ido<<1);
82598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
82698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t3;
82798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ti1=cc[t1]+cc[t4];
82898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ti2=cc[t4]-cc[t1];
82998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr1=cc[t1-1]-cc[t4-1];
83098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    tr2=cc[t1-1]+cc[t4-1];
83198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5]=tr2+tr2;
83298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=sqrt2*(tr1-ti1);
83398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=ti2+ti2;
83498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ch[t5+=t0]=-sqrt2*(tr1+ti1);
83598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
83698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3+=ido;
83798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t2;
83898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4+=t2;
83998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
84098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
84198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
84298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
84398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project            float *c2,float *ch,float *ch2,float *wa){
84498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  static float tpi=6.283185307179586f;
84598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
84698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t11,t12;
84798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float dc2,ai1,ai2,ar1,ar2,ds2;
84898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int nbd;
84998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  float dcp,arg,dsp,ar1h,ar2h;
85098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int ipp2;
85198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
85298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t10=ip*ido;
85398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t0=l1*ido;
85498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  arg=tpi/(float)ip;
85598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  dcp=cos(arg);
85698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  dsp=sin(arg);
85798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nbd=(ido-1)>>1;
85898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ipp2=ip;
85998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ipph=(ip+1)>>1;
86098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido<l1)goto L103;
86198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
86298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
86398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=0;
86498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k=0;k<l1;k++){
86598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
86698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
86798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=0;i<ido;i++){
86898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t3]=cc[t4];
86998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3++;
87098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4++;
87198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
87298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=ido;
87398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2+=t10;
87498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
87598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  goto L106;
87698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
87798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L103:
87898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
87998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(i=0;i<ido;i++){
88098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
88198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
88298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
88398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t2]=cc[t3];
88498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=ido;
88598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=t10;
88698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
88798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1++;
88898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
88998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
89098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L106:
89198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
89298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
89398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t7=(t5=ido<<1);
89498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
89598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
89698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
89798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
89898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
89998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=t5;
90098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
90198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t3]=cc[t6-1]+cc[t6-1];
90298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4]=cc[t6]+cc[t6];
90398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=ido;
90498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=ido;
90598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=t10;
90698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
90798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5+=t7;
90898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
90998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
91098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if (ido == 1)goto L116;
91198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd<l1)goto L112;
91298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
91398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
91498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
91598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t7=0;
91698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
91798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
91898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
91998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
92098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
92198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
92298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7+=(ido<<1);
92398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t8=t7;
92498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
92598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5=t3;
92698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=t4;
92798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9=t8;
92898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t11=t8;
92998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
93098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5+=2;
93198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6+=2;
93298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t9+=2;
93398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t11-=2;
93498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5-1]=cc[t9-1]+cc[t11-1];
93598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6-1]=cc[t9-1]-cc[t11-1];
93698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5]=cc[t9]-cc[t11];
93798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6]=cc[t9]+cc[t11];
93898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
93998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=ido;
94098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=ido;
94198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8+=t10;
94298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
94398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
94498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  goto L116;
94598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
94698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L112:
94798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
94898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
94998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t7=0;
95098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
95198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
95298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
95398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
95498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
95598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7+=(ido<<1);
95698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t8=t7;
95798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t9=t7;
95898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
95998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=2;
96098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=2;
96198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t8+=2;
96298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t9-=2;
96398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5=t3;
96498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=t4;
96598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t11=t8;
96698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t12=t9;
96798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
96898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5-1]=cc[t11-1]+cc[t12-1];
96998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6-1]=cc[t11-1]-cc[t12-1];
97098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5]=cc[t11]-cc[t12];
97198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6]=cc[t11]+cc[t12];
97298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5+=ido;
97398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6+=ido;
97498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t11+=t10;
97598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t12+=t10;
97698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
97798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
97898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
97998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
98098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectL116:
98198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ar1=1.f;
98298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  ai1=0.f;
98398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
98498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t9=(t2=ipp2*idl1);
98598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t3=(ip-1)*idl1;
98698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(l=1;l<ipph;l++){
98798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=idl1;
98898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=idl1;
98998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
99098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar1h=dcp*ar1-dsp*ai1;
99198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ai1=dcp*ai1+dsp*ar1;
99298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar1=ar1h;
99398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t1;
99498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t5=t2;
99598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=0;
99698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=idl1;
99798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t8=t3;
99898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(ik=0;ik<idl1;ik++){
99998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      c2[t4++]=ch2[t6++]+ar1*ch2[t7++];
100098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      c2[t5++]=ai1*ch2[t8++];
100198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
100298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    dc2=ar1;
100398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ds2=ai1;
100498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ar2=ar1;
100598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ai2=ai1;
100698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
100798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t6=idl1;
100898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t7=t9-idl1;
100998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(j=2;j<ipph;j++){
101098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6+=idl1;
101198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t7-=idl1;
101298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ar2h=dc2*ar2-ds2*ai2;
101398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ai2=dc2*ai2+ds2*ar2;
101498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ar2=ar2h;
101598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4=t1;
101698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5=t2;
101798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t11=t6;
101898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t12=t7;
101998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(ik=0;ik<idl1;ik++){
102098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c2[t4++]+=ar2*ch2[t11++];
102198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c2[t5++]+=ai2*ch2[t12++];
102298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
102398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
102498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
102598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
102698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
102798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
102898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=idl1;
102998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
103098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++];
103198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
103298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
103398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
103498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
103598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
103698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
103798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
103898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
103998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
104098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
104198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t3]=c1[t3]-c1[t4];
104298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      ch[t4]=c1[t3]+c1[t4];
104398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=ido;
104498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=ido;
104598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
104698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
104798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
104898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==1)goto L132;
104998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd<l1)goto L128;
105098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
105198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
105298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
105398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
105498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
105598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
105698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
105798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
105898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
105998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5=t3;
106098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=t4;
106198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
106298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5+=2;
106398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6+=2;
106498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5-1]=c1[t5-1]-c1[t6];
106598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6-1]=c1[t5-1]+c1[t6];
106698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5]=c1[t5]+c1[t6-1];
106798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6]=c1[t5]-c1[t6-1];
106898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
106998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=ido;
107098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=ido;
107198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
107298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
107398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  goto L132;
107498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
107598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L128:
107698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
107798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t2=ipp2*t0;
107898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ipph;j++){
107998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
108098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2-=t0;
108198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t3=t1;
108298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t4=t2;
108398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
108498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3+=2;
108598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t4+=2;
108698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t5=t3;
108798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t6=t4;
108898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
108998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5-1]=c1[t5-1]-c1[t6];
109098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6-1]=c1[t5-1]+c1[t6];
109198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t5]=c1[t5]+c1[t6-1];
109298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        ch[t6]=c1[t5]-c1[t6-1];
109398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t5+=ido;
109498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t6+=ido;
109598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
109698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
109798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
109898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
109998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectL132:
110098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(ido==1)return;
110198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
110298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
110398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
110498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
110598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ip;j++){
110698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=(t1+=t0);
110798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
110898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      c1[t2]=ch[t2];
110998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=ido;
111098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
111198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
111298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
111398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(nbd>l1)goto L139;
111498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
111598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  is= -ido-1;
111698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
111798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ip;j++){
111898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    is+=ido;
111998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
112098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    idij=is;
112198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
112298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(i=2;i<ido;i+=2){
112398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=2;
112498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      idij+=2;
112598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3=t2;
112698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(k=0;k<l1;k++){
112798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
112898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
112998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3+=ido;
113098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
113198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
113298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
113398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  return;
113498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
113598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project L139:
113698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  is= -ido-1;
113798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  t1=0;
113898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(j=1;j<ip;j++){
113998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    is+=ido;
114098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t1+=t0;
114198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    t2=t1;
114298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    for(k=0;k<l1;k++){
114398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      idij=is;
114498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t3=t2;
114598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      for(i=2;i<ido;i+=2){
114698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        idij+=2;
114798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        t3+=2;
114898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
114998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project        c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
115098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      }
115198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      t2+=ido;
115298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    }
115398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
115498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
115598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
115698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectstatic void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
115798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int i,k1,l1,l2;
115898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int na;
115998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  int nf,ip,iw,ix2,ix3,ido,idl1;
116098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
116198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  nf=ifac[1];
116298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  na=0;
116398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l1=1;
116498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  iw=1;
116598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
116698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(k1=0;k1<nf;k1++){
116798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ip=ifac[k1 + 2];
116898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l2=ip*l1;
116998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ido=n/l2;
117098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    idl1=ido*l1;
117198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ip!=4)goto L103;
117298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix2=iw+ido;
117398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix3=ix2+ido;
117498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
117598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
117698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
117798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
117898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
117998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1-na;
118098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L115;
118198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
118298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L103:
118398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ip!=2)goto L106;
118498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
118598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
118698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb2(ido,l1,ch,c,wa+iw-1);
118798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
118898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb2(ido,l1,c,ch,wa+iw-1);
118998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1-na;
119098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L115;
119198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
119298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L106:
119398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ip!=3)goto L109;
119498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
119598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix2=iw+ido;
119698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
119798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1);
119898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
119998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1);
120098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1-na;
120198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L115;
120298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
120398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L109:
120498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/*    The radix five case can be translated later..... */
120598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/*    if(ip!=5)goto L112;
120698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
120798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix2=iw+ido;
120898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix3=ix2+ido;
120998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    ix4=ix3+ido;
121098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
121198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
121298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
121398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
121498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    na=1-na;
121598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    goto L115;
121698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
121798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L112:*/
121898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(na!=0)
121998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
122098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    else
122198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
122298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(ido==1)na=1-na;
122398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
122498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  L115:
122598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    l1=l2;
122698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    iw+=(ip-1)*ido;
122798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
122898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
122998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(na==0)return;
123098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
123198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  for(i=0;i<n;i++)c[i]=ch[i];
123298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
123398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
123498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid spx_drft_forward(struct drft_lookup *l,float *data){
123598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(l->n==1)return;
123698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
123798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
123898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
123998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid spx_drft_backward(struct drft_lookup *l,float *data){
124098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if (l->n==1)return;
124198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
124298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
124398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
124498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid spx_drft_init(struct drft_lookup *l,int n)
124598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project{
124698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l->n=n;
124798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l->trigcache=(float*)speex_alloc(3*n*sizeof(*l->trigcache));
124898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  l->splitcache=(int*)speex_alloc(32*sizeof(*l->splitcache));
124998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  fdrffti(n, l->trigcache, l->splitcache);
125098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
125198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
125298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid spx_drft_clear(struct drft_lookup *l)
125398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project{
125498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  if(l)
125598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  {
125698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(l->trigcache)
125798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      speex_free(l->trigcache);
125898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project    if(l->splitcache)
125998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project      speex_free(l->splitcache);
126098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project  }
126198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project}
1262