mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-24 19:22:27 -04:00
FFT factory: reuse flag
This commit is contained in:
parent
37082ce41d
commit
30694b4be7
@ -16,6 +16,8 @@ public:
|
|||||||
virtual Complex* in() = 0;
|
virtual Complex* in() = 0;
|
||||||
virtual Complex* out() = 0;
|
virtual Complex* out() = 0;
|
||||||
|
|
||||||
|
virtual void setReuse(bool reuse) = 0;
|
||||||
|
|
||||||
static FFTEngine* create(const QString& fftWisdomFileName);
|
static FFTEngine* create(const QString& fftWisdomFileName);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ void FFTFactory::preallocate(
|
|||||||
{
|
{
|
||||||
fftEngines.push_back(AllocatedEngine());
|
fftEngines.push_back(AllocatedEngine());
|
||||||
fftEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
fftEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
||||||
|
fftEngines.back().m_engine->setReuse(false);
|
||||||
fftEngines.back().m_engine->configure(fftSize, false);
|
fftEngines.back().m_engine->configure(fftSize, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +61,7 @@ void FFTFactory::preallocate(
|
|||||||
{
|
{
|
||||||
invFFTEngines.push_back(AllocatedEngine());
|
invFFTEngines.push_back(AllocatedEngine());
|
||||||
invFFTEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
invFFTEngines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
||||||
|
fftEngines.back().m_engine->setReuse(false);
|
||||||
invFFTEngines.back().m_engine->configure(fftSize, true);
|
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.push_back(AllocatedEngine());
|
||||||
engines.back().m_inUse = true;
|
engines.back().m_inUse = true;
|
||||||
engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
||||||
|
engines.back().m_engine->setReuse(false);
|
||||||
engines.back().m_engine->configure(fftSize, true);
|
engines.back().m_engine->configure(fftSize, true);
|
||||||
*engine = engines.back().m_engine;
|
*engine = engines.back().m_engine;
|
||||||
return 0;
|
return 0;
|
||||||
@ -108,6 +111,7 @@ unsigned int FFTFactory::getEngine(unsigned int fftSize, bool inverse, FFTEngine
|
|||||||
engines.push_back(AllocatedEngine());
|
engines.push_back(AllocatedEngine());
|
||||||
engines.back().m_inUse = true;
|
engines.back().m_inUse = true;
|
||||||
engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
engines.back().m_engine = FFTEngine::create(m_fftwWisdomFileName);
|
||||||
|
engines.back().m_engine->setReuse(false);
|
||||||
engines.back().m_engine->configure(fftSize, true);
|
engines.back().m_engine->configure(fftSize, true);
|
||||||
*engine = engines.back().m_engine;
|
*engine = engines.back().m_engine;
|
||||||
return engines.size() - 1;
|
return engines.size() - 1;
|
||||||
|
@ -4,7 +4,12 @@
|
|||||||
FFTWEngine::FFTWEngine(const QString& fftWisdomFileName) :
|
FFTWEngine::FFTWEngine(const QString& fftWisdomFileName) :
|
||||||
m_fftWisdomFileName(fftWisdomFileName),
|
m_fftWisdomFileName(fftWisdomFileName),
|
||||||
m_plans(),
|
m_plans(),
|
||||||
|
<<<<<<< ours
|
||||||
m_currentPlan(NULL)
|
m_currentPlan(NULL)
|
||||||
|
=======
|
||||||
|
m_currentPlan(nullptr),
|
||||||
|
m_reuse(true)
|
||||||
|
>>>>>>> theirs
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,12 +20,26 @@ FFTWEngine::~FFTWEngine()
|
|||||||
|
|
||||||
void FFTWEngine::configure(int n, bool inverse)
|
void FFTWEngine::configure(int n, bool inverse)
|
||||||
{
|
{
|
||||||
|
<<<<<<< ours
|
||||||
for(Plans::const_iterator it = m_plans.begin(); it != m_plans.end(); ++it) {
|
for(Plans::const_iterator it = m_plans.begin(); it != m_plans.end(); ++it) {
|
||||||
if(((*it)->n == n) && ((*it)->inverse == inverse)) {
|
if(((*it)->n == n) && ((*it)->inverse == inverse)) {
|
||||||
m_currentPlan = *it;
|
m_currentPlan = *it;
|
||||||
return;
|
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 = new Plan;
|
||||||
m_currentPlan->n = n;
|
m_currentPlan->n = n;
|
||||||
|
@ -12,13 +12,15 @@
|
|||||||
class SDRBASE_API FFTWEngine : public FFTEngine {
|
class SDRBASE_API FFTWEngine : public FFTEngine {
|
||||||
public:
|
public:
|
||||||
FFTWEngine(const QString& fftWisdomFileName);
|
FFTWEngine(const QString& fftWisdomFileName);
|
||||||
~FFTWEngine();
|
virtual ~FFTWEngine();
|
||||||
|
|
||||||
void configure(int n, bool inverse);
|
virtual void configure(int n, bool inverse);
|
||||||
void transform();
|
virtual void transform();
|
||||||
|
|
||||||
Complex* in();
|
virtual Complex* in();
|
||||||
Complex* out();
|
virtual Complex* out();
|
||||||
|
|
||||||
|
virtual void setReuse(bool reuse) { m_reuse = reuse; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static QMutex m_globalPlanMutex;
|
static QMutex m_globalPlanMutex;
|
||||||
@ -34,6 +36,7 @@ protected:
|
|||||||
typedef std::list<Plan*> Plans;
|
typedef std::list<Plan*> Plans;
|
||||||
Plans m_plans;
|
Plans m_plans;
|
||||||
Plan* m_currentPlan;
|
Plan* m_currentPlan;
|
||||||
|
bool m_reuse;
|
||||||
|
|
||||||
void freeAll();
|
void freeAll();
|
||||||
};
|
};
|
||||||
|
@ -23,3 +23,8 @@ Complex* KissEngine::out()
|
|||||||
{
|
{
|
||||||
return &m_out[0];
|
return &m_out[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KissEngine::setReuse(bool reuse)
|
||||||
|
{
|
||||||
|
(void) reuse;
|
||||||
|
}
|
@ -7,11 +7,13 @@
|
|||||||
|
|
||||||
class SDRBASE_API KissEngine : public FFTEngine {
|
class SDRBASE_API KissEngine : public FFTEngine {
|
||||||
public:
|
public:
|
||||||
void configure(int n, bool inverse);
|
virtual void configure(int n, bool inverse);
|
||||||
void transform();
|
virtual void transform();
|
||||||
|
|
||||||
Complex* in();
|
virtual Complex* in();
|
||||||
Complex* out();
|
virtual Complex* out();
|
||||||
|
|
||||||
|
virtual void setReuse(bool reuse);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef kissfft<Real, Complex> KissFFT;
|
typedef kissfft<Real, Complex> KissFFT;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user