From a005d5248c2634e62b181d8a7be870863e9a11b0 Mon Sep 17 00:00:00 2001 From: hackbard Date: Wed, 14 Sep 2005 17:31:46 +0000 Subject: [PATCH] fftw3 support --- dft.c | 64 ++++++++++++++++++++++++++++++++++++++++++++------------ dft.h | 8 ++++++- makefile | 2 +- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/dft.c b/dft.c index 1d26cee..848e6e5 100644 --- a/dft.c +++ b/dft.c @@ -5,17 +5,25 @@ * */ +//#define USE_FFTW3 + #include "dft.h" int main(int argc,char **argv) { +#ifdef USE_FFTW3 + fftw_plan plan; + fftw_complex *in,*out; +#else t_fourier fourier; +#endif t_bmp src; t_bmp dst; t_bmp cut; int x,y; int offy,offt; - int scale; + double scale; + int size; double max; double *mag; @@ -27,9 +35,11 @@ int main(int argc,char **argv) { strcpy(src.file,argv[1]); strcpy(dst.file,argv[2]); +#ifndef USE_FFTW3 fourier_init(&fourier,1); fourier.type=DFT|FWD; fourier.dim=2; +#endif bmp_read_file(&src); @@ -39,37 +49,60 @@ int main(int argc,char **argv) { dst.height=cut.height; bmp_alloc_map(&dst); + size=cut.width*cut.height; + +#ifndef USE_FFTW3 fourier.data_len[0]=cut.width; fourier.data_len[1]=cut.height; fourier_alloc_data(&fourier); +#else + in=fftw_malloc(sizeof(fftw_complex)*size); + memset(in,0,size*sizeof(fftw_complex)); + out=fftw_malloc(sizeof(fftw_complex)*size); + memset(out,0,size*sizeof(fftw_complex)); + if(in==NULL||out==NULL) { + printf("fftw alloc error!\n"); + return -23; + } + plan=fftw_plan_dft_2d(cut.width,cut.height,in,out,FFTW_FORWARD,FFTW_ESTIMATE); +#endif - mag=(double *)malloc(fourier.data_len[0]*fourier.data_len[1]*sizeof(double)); + mag=(double *)malloc(size*sizeof(double)); if(mag==NULL) { printf("unable to alloc mag memory\n"); return -1; } // copy the data - offy=0; - for(y=0;ymax) max=mag[offt]; offt+=1; } @@ -77,11 +110,11 @@ int main(int argc,char **argv) { printf("found max: %f\n",max); - if(max!=0) scale=(int)255/max; + if(max!=0) scale=255.0/max; else scale=0; if(scale!=0) { - printf("scaling image intensity: %d\n",scale); + printf("scaling image intensity: %f\n",scale); offt=0; for(y=0;y #include -#include "fourier.h" +#ifdef USE_FFTW3 + #include + #include +#else + #include "fourier.h" +#endif + #include "bmp.h" diff --git a/makefile b/makefile index 3f5b43d..9ecc4f4 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ INCLUDEDIR = /usr/include CFLAGS = -O3 -Wall -LIBS = -lncurses -lm +LIBS = -lncurses -lm -lfftw3 OBJS = network.o event.o input.o display.o audio.o fourier.o bmp.o -- 2.20.1