* Avoid virtual method hiding warnings

* Avoid potential deadlock in thread join when processing has been abandoned
This commit is contained in:
Chris Cannam
2009-02-26 22:26:02 +00:00
parent c5a293da33
commit 00ff759247
12 changed files with 43 additions and 5 deletions

View File

@@ -43,5 +43,11 @@ ConstantAudioCurve::process(const float *R__, size_t)
return 1.f;
}
float
ConstantAudioCurve::processDouble(const double *R__, size_t)
{
return 1.f;
}
}

View File

@@ -29,6 +29,7 @@ public:
virtual void setWindowSize(size_t newSize);
virtual float process(const float *R__ mag, size_t increment);
virtual float processDouble(const double *R__ mag, size_t increment);
virtual void reset();
};

View File

@@ -51,5 +51,19 @@ HighFrequencyAudioCurve::process(const float *R__ mag, size_t increment)
return result;
}
float
HighFrequencyAudioCurve::processDouble(const double *R__ mag, size_t increment)
{
float result = 0.0;
const int sz = m_windowSize / 2;
for (int n = 0; n <= sz; ++n) {
result = result + (float)mag[n] * n;
}
return result;
}
}

View File

@@ -31,6 +31,7 @@ public:
virtual void setWindowSize(size_t newSize);
virtual float process(const float *R__ mag, size_t increment);
virtual float processDouble(const double *R__ mag, size_t increment);
virtual void reset();
};

View File

@@ -82,7 +82,7 @@ PercussiveAudioCurve::process(const float *R__ mag, size_t increment)
}
float
PercussiveAudioCurve::process(const double *R__ mag, size_t increment)
PercussiveAudioCurve::processDouble(const double *R__ mag, size_t increment)
{
Profiler profiler("PercussiveAudioCurve::process");

View File

@@ -30,7 +30,7 @@ public:
virtual void setWindowSize(size_t newSize);
virtual float process(const float *R__ mag, size_t increment);
virtual float process(const double *R__ mag, size_t increment);
virtual float processDouble(const double *R__ mag, size_t increment);
virtual void reset();
protected:

View File

@@ -53,7 +53,7 @@ SilentAudioCurve::process(const float *R__ mag, size_t)
}
float
SilentAudioCurve::process(const double *R__ mag, size_t)
SilentAudioCurve::processDouble(const double *R__ mag, size_t)
{
const int hs = m_windowSize / 2;
static double threshold = pow(10.0, -6);

View File

@@ -29,7 +29,7 @@ public:
virtual void setWindowSize(size_t newSize);
virtual float process(const float *R__ mag, size_t increment);
virtual float process(const double *R__ mag, size_t increment);
virtual float processDouble(const double *R__ mag, size_t increment);
virtual void reset();
};

View File

@@ -65,5 +65,19 @@ SpectralDifferenceAudioCurve::process(const float *R__ mag, size_t increment)
return result;
}
float
SpectralDifferenceAudioCurve::processDouble(const double *R__ mag, size_t increment)
{
float result = 0.0;
for (size_t n = 0; n <= m_windowSize / 2; ++n) {
result += sqrtf(fabsf((mag[n] * mag[n]) -
(m_prevMag[n] * m_prevMag[n])));
m_prevMag[n] = (float)mag[n];
}
return result;
}
}

View File

@@ -31,6 +31,7 @@ public:
virtual void setWindowSize(size_t newSize);
virtual float process(const float *R__ mag, size_t increment);
virtual float processDouble(const double *R__ mag, size_t increment);
virtual void reset();
protected:

View File

@@ -587,6 +587,7 @@ RubberBandStretcher::Impl::configure()
delete m_phaseResetAudioCurve;
m_phaseResetAudioCurve = new PercussiveAudioCurve
// m_phaseResetAudioCurve = new SpectralDifferenceAudioCurve
(m_sampleRate, m_windowSize);
delete m_silentAudioCurve;

View File

@@ -66,7 +66,7 @@ RubberBandStretcher::Impl::ProcessThread::run()
m_dataAvailable.lock();
if (!m_s->testInbufReadSpace(m_channel) && !m_abandoning) {
m_dataAvailable.wait();
m_dataAvailable.wait(50000); // bounded in case of abandonment
} else {
m_dataAvailable.unlock();
}