[MN-dev] [mndiff]: r212 - trunk/noe/gfft.c

michael subversion at mplayerhq.hu
Fri Jul 23 00:20:22 CEST 2010


Author: michael
Date: Fri Jul 23 00:20:22 2010
New Revision: 212

Log:
ifft16()

Modified:
   trunk/noe/gfft.c

Modified: trunk/noe/gfft.c
==============================================================================
--- trunk/noe/gfft.c	Fri Jul 23 00:20:21 2010	(r211)
+++ trunk/noe/gfft.c	Fri Jul 23 00:20:22 2010	(r212)
@@ -265,18 +265,43 @@ static inline void ifft8(GFF4Element *p)
     ifft4(p+1,2);
 }
 
+static void ifft16(GFF4Element *p){
+    int n;
+    const int size= 1<<(4-2);
+
+    ifft8(p);
+    ifft4(p+8 ,1);
+    ifft4(p+12,1);
+
+    for(n=0; n<size; n++){
+        const unsigned int w1= EXT(exp)[ MINUS1 - ( n       <<(SHIFT-4)) ];
+        const unsigned int wx= EXT(exp)[ MINUS1 - ((3*n    )<<(SHIFT-4)) ];
+        const unsigned int a=        p[n         ];
+        const unsigned int b=        p[n +   size] + SIZE + (SIZE<<(SHIFT/2));
+              unsigned int c= reduce(p[n + 2*size]*w1);
+        const unsigned int t= reduce(p[n + 3*size]*wx);
+        unsigned int d= (c - t)<<(SHIFT/2);
+        c= sum (c, t);
+
+        p[n         ]= sum(a, c);
+        p[n + 2*size]= sum(a, SIZE - c);
+        p[n + 1*size]= reduce(b + d);
+        p[n + 3*size]= reduce(b - d);
+    }
+}
+
 static void ifftn(GFF4Element *p, int logSize){
     int n;
     const int size= 1<<(logSize-2);
 
-    if(logSize==4){
-        ifft8(p);
-        ifft4(p+8 ,1);
-        ifft4(p+12,1);
-    } else if(logSize==5){
-        ifftn(p       , logSize-1);
+    if(logSize==5){
+        ifft16(p);
         ifft8(p+16);
         ifft8(p+24);
+    } else if(logSize==6){
+        ifftn(p       , logSize-1);
+        ifft16(p+32);
+        ifft16(p+48);
     }else{
         ifftn(p       , logSize-1);
         ifftn(p+2*size, logSize-2);


More information about the Mndiff-dev mailing list