diff options
author | Christian Daniel <cd@maintech.de> | 2013-09-24 16:28:57 +0200 |
---|---|---|
committer | Christian Daniel <cd@maintech.de> | 2013-09-24 16:28:57 +0200 |
commit | c3d0a654afe2be8f8dae0d6bbcba5a06f5e407f8 (patch) | |
tree | 211933afa43a010e9fc7872c6956004543dbb687 /sdrbase/dsp | |
parent | 9b9036cdf24fc3a5562209e3ee8e54a2c4f47c6a (diff) |
fix FFTW initialisation crash
Diffstat (limited to 'sdrbase/dsp')
-rw-r--r-- | sdrbase/dsp/fftwengine.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sdrbase/dsp/fftwengine.cpp b/sdrbase/dsp/fftwengine.cpp index a19d113..76b189e 100644 --- a/sdrbase/dsp/fftwengine.cpp +++ b/sdrbase/dsp/fftwengine.cpp @@ -28,26 +28,35 @@ void FFTWEngine::configure(int n, bool inverse) m_currentPlan->out = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * n); QTime t; t.start(); + m_globalPlanMutex.lock(); m_currentPlan->plan = fftwf_plan_dft_1d(n, m_currentPlan->in, m_currentPlan->out, inverse ? FFTW_BACKWARD : FFTW_FORWARD, FFTW_PATIENT); + m_globalPlanMutex.unlock(); qDebug("FFT: creating FFTW plan (n=%d,%s) took %dms", n, inverse ? "inverse" : "forward", t.elapsed()); m_plans.push_back(m_currentPlan); } void FFTWEngine::transform() { - fftwf_execute(m_currentPlan->plan); + if(m_currentPlan != NULL) + fftwf_execute(m_currentPlan->plan); } Complex* FFTWEngine::in() { - return reinterpret_cast<Complex*>(m_currentPlan->in); + if(m_currentPlan != NULL) + return reinterpret_cast<Complex*>(m_currentPlan->in); + else return NULL; } Complex* FFTWEngine::out() { - return reinterpret_cast<Complex*>(m_currentPlan->out); + if(m_currentPlan != NULL) + return reinterpret_cast<Complex*>(m_currentPlan->out); + else return NULL; } +QMutex FFTWEngine::m_globalPlanMutex; + void FFTWEngine::freeAll() { for(Plans::iterator it = m_plans.begin(); it != m_plans.end(); ++it) { |