Index: trunk/psLib/src/fft/psImageFFT.c
===================================================================
--- trunk/psLib/src/fft/psImageFFT.c	(revision 20547)
+++ trunk/psLib/src/fft/psImageFFT.c	(revision 20566)
@@ -6,6 +6,6 @@
 /// @author Robert DeSonia, MHPCC
 ///
-/// @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
-/// @date $Date: 2008-08-14 03:23:13 $
+/// @version $Revision: 1.28 $ $Name: not supported by cvs2svn $
+/// @date $Date: 2008-11-06 23:36:20 $
 ///
 /// Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -20,4 +20,5 @@
 #include <complex.h>
 #include <fftw3.h>
+#include <limits.h>
 #include <pthread.h>
 
@@ -32,4 +33,6 @@
 #include "psFFT.h"
 #include "psImageFFT.h"
+
+#define FFT_CONVOLVE_BINARY_SIZE 1               // Scale up to next binary size
 
 // Lock FFTW access
@@ -340,6 +343,24 @@
         return NULL;
     }
+
     int paddedCols = numCols + PS_MAX(-xMin, xMax); // Number of columns in padded image
     int paddedRows = numRows + PS_MAX(-yMin, yMax); // Number of rows in padded image
+
+#if CONVOLVE_FFT_BINARY_SIZE
+    // Make the size an integer power of two
+    {
+        int twoCols, twoRows;           // Size that is a factor of two
+        for (twoCols = 1; twoCols <= paddedCols && twoCols < INT_MAX - 1; twoCols <<= 1); // No action
+        for (twoRows = 1; twoRows <= paddedRows && twoRows < INT_MAX - 1; twoRows <<= 1); // No action
+        if (paddedCols > twoCols || paddedRows > twoRows) {
+            psError(PS_ERR_BAD_PARAMETER_SIZE, true, "Unable to scale size (%dx%d) up to factor of two",
+                    paddedCols, paddedRows);
+            return NULL;
+        }
+        paddedCols = twoCols;
+        paddedRows = twoRows;
+    }
+#endif
+
     int numPadded = paddedCols * paddedRows; // Number of pixels in padded image
 
