diff --git a/sdrbase/dsp/fftengine.h b/sdrbase/dsp/fftengine.h index 8206a9657..320eb3c84 100644 --- a/sdrbase/dsp/fftengine.h +++ b/sdrbase/dsp/fftengine.h @@ -16,6 +16,8 @@ public: virtual Complex* in() = 0; virtual Complex* out() = 0; + virtual void setReuse(bool reuse) = 0; + static FFTEngine* create(const QString& fftWisdomFileName); }; diff --git a/sdrbase/dsp/fftfactory.cpp b/sdrbase/dsp/fftfactory.cpp index 531f0b96e..b3bfc89aa 100644 --- a/sdrbase/dsp/fftfactory.cpp +++ b/sdrbase/dsp/fftfactory.cpp @@ -53,6 +53,7 @@ void FFTFactory::preallocate( { fftEngines.push_back(AllocatedEngine()); fftEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName); + fftEngines.back().m_engine->setReuse(false); fftEngines.back().m_engine->configure(fftSize, false); } @@ -60,6 +61,7 @@ void FFTFactory::preallocate( { invFFTEngines.push_back(AllocatedEngine()); invFFTEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName); + fftEngines.back().m_engine->setReuse(false); invFFTEngines.back().m_engine->configure(fftSize, true); } } @@ -79,6 +81,7 @@ unsigned int FFTFactory::getEngine(unsigned int fftSize, bool inverse, FFTEngine engines.push_back(AllocatedEngine()); engines.back().m_inUse = true; engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName); + engines.back().m_engine->setReuse(false); engines.back().m_engine->configure(fftSize, true); *engine = engines.back().m_engine; return 0; @@ -108,6 +111,7 @@ unsigned int FFTFactory::getEngine(unsigned int fftSize, bool inverse, FFTEngine engines.push_back(AllocatedEngine()); engines.back().m_inUse = true; engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName); + engines.back().m_engine->setReuse(false); engines.back().m_engine->configure(fftSize, true); *engine = engines.back().m_engine; return engines.size() - 1; diff --git a/sdrbase/dsp/fftwengine.cpp b/sdrbase/dsp/fftwengine.cpp index 6dc5f9632..391e98b69 100644 --- a/sdrbase/dsp/fftwengine.cpp +++ b/sdrbase/dsp/fftwengine.cpp @@ -4,7 +4,12 @@ FFTWEngine::FFTWEngine(const QString& fftWisdomFileName) : m_fftWisdomFileName(fftWisdomFileName), m_plans(), +<<<<<<< ours m_currentPlan(NULL) +======= + m_currentPlan(nullptr), + m_reuse(true) +>>>>>>> theirs { } @@ -15,12 +20,26 @@ FFTWEngine::~FFTWEngine() void FFTWEngine::configure(int n, bool inverse) { +<<<<<<< ours for(Plans::const_iterator it = m_plans.begin(); it != m_plans.end(); ++it) { if(((*it)->n == n) && ((*it)->inverse == inverse)) { m_currentPlan = *it; return; } } +======= + if (m_reuse) + { + for (Plans::const_iterator it = m_plans.begin(); it != m_plans.end(); ++it) + { + if (((*it)->n == n) && ((*it)->inverse == inverse)) + { + m_currentPlan = *it; + return; + } + } + } +>>>>>>> theirs m_currentPlan = new Plan; m_currentPlan->n = n; diff --git a/sdrbase/dsp/fftwengine.h b/sdrbase/dsp/fftwengine.h index 303879e84..67f789e6d 100644 --- a/sdrbase/dsp/fftwengine.h +++ b/sdrbase/dsp/fftwengine.h @@ -12,13 +12,15 @@ class SDRBASE_API FFTWEngine : public FFTEngine { public: FFTWEngine(const QString& fftWisdomFileName); - ~FFTWEngine(); + virtual ~FFTWEngine(); - void configure(int n, bool inverse); - void transform(); + virtual void configure(int n, bool inverse); + virtual void transform(); - Complex* in(); - Complex* out(); + virtual Complex* in(); + virtual Complex* out(); + + virtual void setReuse(bool reuse) { m_reuse = reuse; } protected: static QMutex m_globalPlanMutex; @@ -34,6 +36,7 @@ protected: typedef std::list Plans; Plans m_plans; Plan* m_currentPlan; + bool m_reuse; void freeAll(); }; diff --git a/sdrbase/dsp/kissengine.cpp b/sdrbase/dsp/kissengine.cpp index 5649128ed..6491a6fea 100644 --- a/sdrbase/dsp/kissengine.cpp +++ b/sdrbase/dsp/kissengine.cpp @@ -23,3 +23,8 @@ Complex* KissEngine::out() { return &m_out[0]; } + +void KissEngine::setReuse(bool reuse) +{ + (void) reuse; +} \ No newline at end of file diff --git a/sdrbase/dsp/kissengine.h b/sdrbase/dsp/kissengine.h index 0b8faba38..418abc569 100644 --- a/sdrbase/dsp/kissengine.h +++ b/sdrbase/dsp/kissengine.h @@ -7,11 +7,13 @@ class SDRBASE_API KissEngine : public FFTEngine { public: - void configure(int n, bool inverse); - void transform(); + virtual void configure(int n, bool inverse); + virtual void transform(); - Complex* in(); - Complex* out(); + virtual Complex* in(); + virtual Complex* out(); + + virtual void setReuse(bool reuse); protected: typedef kissfft KissFFT;