csvorbis.Drft.dradf4 C# (CSharp) Method

dradf4() static private method

static private dradf4 ( int ido, int l1, float cc, float ch, float wa1, int index1, float wa2, int index2, float wa3, int index3 ) : void
ido int
l1 int
cc float
ch float
wa1 float
index1 int
wa2 float
index2 int
wa3 float
index3 int
return void
        static void dradf4(int ido,int l1,float[] cc, float[] ch, 
			float[] wa1, int index1,
			float[] wa2, int index2,
			float[] wa3, int index3)
        {
            int i,k,t0,t1,t2,t3,t4,t5,t6;
            float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
            t0=l1*ido;

            t1=t0;
            t4=t1<<1;
            t2=t1+(t1<<1);
            t3=0;

            for(k=0;k<l1;k++)
            {
                tr1=cc[t1]+cc[t2];
                tr2=cc[t3]+cc[t4];

                ch[t5=t3<<2]=tr1+tr2;
                ch[(ido<<2)+t5-1]=tr2-tr1;
                ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
                ch[t5]=cc[t2]-cc[t1];

                t1+=ido;
                t2+=ido;
                t3+=ido;
                t4+=ido;
            }
            if(ido<2)return;

            if(ido==2) goto L105;

            t1=0;
            for(k=0;k<l1;k++)
            {
                t2=t1;
                t4=t1<<2;
                t5=(t6=ido<<1)+t4;
                for(i=2;i<ido;i+=2)
                {
                    t3=(t2+=2);
                    t4+=2;
                    t5-=2;

                    t3+=t0;
                    cr2=wa1[index1+i-2]*cc[t3-1]+wa1[index1+i-1]*cc[t3];
                    ci2=wa1[index1+i-2]*cc[t3]-wa1[index1+i-1]*cc[t3-1];
                    t3+=t0;
                    cr3=wa2[index2+i-2]*cc[t3-1]+wa2[index2+i-1]*cc[t3];
                    ci3=wa2[index2+i-2]*cc[t3]-wa2[index2+i-1]*cc[t3-1];
                    t3+=t0;
                    cr4=wa3[index3+i-2]*cc[t3-1]+wa3[index3+i-1]*cc[t3];
                    ci4=wa3[index3+i-2]*cc[t3]-wa3[index3+i-1]*cc[t3-1];

                    tr1=cr2+cr4;
                    tr4=cr4-cr2;
                    ti1=ci2+ci4;
                    ti4=ci2-ci4;

                    ti2=cc[t2]+ci3;
                    ti3=cc[t2]-ci3;
                    tr2=cc[t2-1]+cr3;
                    tr3=cc[t2-1]-cr3;

                    ch[t4-1]=tr1+tr2;
                    ch[t4]=ti1+ti2;

                    ch[t5-1]=tr3-ti4;
                    ch[t5]=tr4-ti3;

                    ch[t4+t6-1]=ti4+tr3;
                    ch[t4+t6]=tr4+ti3;

                    ch[t5+t6-1]=tr2-tr1;
                    ch[t5+t6]=ti1-ti2;
                }
                t1+=ido;
            }
            if((ido&1)!=0)return;

            L105: t2=(t1=t0+ido-1)+(t0<<1);
            t3=ido<<2;
            t4=ido;
            t5=ido<<1;
            t6=ido;

            for(k=0;k<l1;k++)
            {
                ti1=-hsqt2*(cc[t1]+cc[t2]);
                tr1=hsqt2*(cc[t1]-cc[t2]);

                ch[t4-1]=tr1+cc[t6-1];
                ch[t4+t5-1]=cc[t6-1]-tr1;

                ch[t4]=ti1-cc[t1+t0];
                ch[t4+t5]=ti1+cc[t1+t0];

                t1+=ido;
                t2+=ido;
                t4+=t3;
                t6+=ido;
            }
        }