diff --git a/modules/img/alg/src/fft.cc b/modules/img/alg/src/fft.cc index 3f3f90f5a4e56c32462feca268469b8278512b26..84ac57b19bed1eda916653ca4a44b355c908892f 100644 --- a/modules/img/alg/src/fft.cc +++ b/modules/img/alg/src/fft.cc @@ -64,6 +64,10 @@ FFTFnc::FFTFnc(bool f): ori_flag_(f) OST_FFTW_fftw_init_threads(); } +FFTFnc::~FFTFnc() +{ + OST_FFTW_fftw_cleanup(); +} // real spatial -> complex half-frequency template <> diff --git a/modules/img/alg/src/fft.hh b/modules/img/alg/src/fft.hh index e554716336ff908ed3d567676bda2fd378a94cec..c8b3ccfc97cdba8aa430f0d927e50a018f67e06e 100644 --- a/modules/img/alg/src/fft.hh +++ b/modules/img/alg/src/fft.hh @@ -37,7 +37,7 @@ struct DLLEXPORT FFTException: public Error { struct DLLEXPORT_IMG_ALG FFTFnc { FFTFnc(); FFTFnc(bool); - + ~FFTFnc(); template <typename T, class D> ImageStateBasePtr VisitState(const ImageStateImpl<T,D>& s) const; diff --git a/modules/img/alg/src/fftw_helper.hh b/modules/img/alg/src/fftw_helper.hh index 365eb6d66da3af9235a5fa864dbeaa51589a5ee8..b1b6066aaf71d91282cf8bde70d8201b7bde2456 100644 --- a/modules/img/alg/src/fftw_helper.hh +++ b/modules/img/alg/src/fftw_helper.hh @@ -72,15 +72,22 @@ Author: Juergen Haas #if OST_FFT_USE_THREADS #if OST_DOUBLE_PRECISION #define OST_FFTW_fftw_init_threads fftw_init_threads + #define OST_FFTW_fftw_cleanup fftw_cleanup_threads #define OST_FFTW_fftw_plan_with_nthreads fftw_plan_with_nthreads #else #define OST_FFTW_fftw_init_threads fftwf_init_threads + #define OST_FFTW_fftw_cleanup fftwf_cleanup_threads #define OST_FFTW_fftw_plan_with_nthreads fftwf_plan_with_nthreads #endif #else void fftw_noop(unsigned int i=0){} #define OST_FFTW_fftw_init_threads fftw_noop #define OST_FFTW_fftw_plan_with_nthreads fftw_noop + #if OST_DOUBLE_PRECISION + #define OST_FFTW_fftw_cleanup fftw_cleanup + #else + #define OST_FFTW_fftw_cleanup fftwf_cleanup + #endif #endif #endif