diff --git a/sdrbase/dsp/fftcorr.cpp b/sdrbase/dsp/fftcorr.cpp index 4da63c18a..82888fc26 100644 --- a/sdrbase/dsp/fftcorr.cpp +++ b/sdrbase/dsp/fftcorr.cpp @@ -20,14 +20,18 @@ #include +#include "dsp/dspengine.h" +#include "dsp/fftfactory.h" #include "dsp/fftengine.h" #include "fftcorr.h" void fftcorr::init_fft() { - fftA->configure(flen, false); - fftB->configure(flen, false); - fftInvA->configure(flen, true); + FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); + fftASequence = fftFactory->getEngine(flen, false, &fftA); + fftBSequence = fftFactory->getEngine(flen, false, &fftB); + fftInvASequence = fftFactory->getEngine(flen, true, &fftInvA); + m_window.create(FFTWindow::Hanning, flen); dataA = new cmplx[flen]; @@ -46,17 +50,22 @@ void fftcorr::init_fft() fftcorr::fftcorr(int len) : flen(len), flen2(len>>1), - fftA(FFTEngine::create(QString(""))), // TODO: use factory - fftB(FFTEngine::create(QString(""))), // TODO: use factory - fftInvA(FFTEngine::create(QString(""))) // TODO: use factory + fftA(nullptr), + fftB(nullptr), + fftInvA(nullptr), + fftASequence(0), + fftBSequence(0), + fftInvASequence(0) { init_fft(); } fftcorr::~fftcorr() { - delete fftA; - delete fftB; + FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); + fftFactory->releaseEngine(flen, false, fftASequence); + fftFactory->releaseEngine(flen, false, fftBSequence); + fftFactory->releaseEngine(flen, true, fftInvASequence); delete[] dataA; delete[] dataB; delete[] dataBj; diff --git a/sdrbase/dsp/fftcorr.h b/sdrbase/dsp/fftcorr.h index 528927ead..d7a473867 100644 --- a/sdrbase/dsp/fftcorr.h +++ b/sdrbase/dsp/fftcorr.h @@ -44,6 +44,9 @@ private: FFTEngine *fftA; FFTEngine *fftB; FFTEngine *fftInvA; + unsigned int fftASequence; + unsigned int fftBSequence; + unsigned int fftInvASequence; FFTWindow m_window; cmplx *dataA; // from A input cmplx *dataB; // from B input