* Share dblbuf with FFT object to avoid a copy; fix reset(); add spectral

difference audio curve; some tidying; add FLOAT_ONLY FFT option
This commit is contained in:
Chris Cannam
2007-12-10 15:47:06 +00:00
parent 2b1693aa3f
commit d4ff782668
14 changed files with 266 additions and 94 deletions

View File

@@ -33,7 +33,8 @@ namespace RubberBand {
RubberBandStretcher::Impl::ProcessThread::ProcessThread(Impl *s, size_t c) :
m_s(s),
m_channel(c),
m_dataAvailable(std::string("data ") + char('A' + c))
m_dataAvailable(std::string("data ") + char('A' + c)),
m_abandoning(false)
{ }
void
@@ -61,11 +62,18 @@ RubberBandStretcher::Impl::ProcessThread::run()
if (any) m_s->m_spaceAvailable.signal();
m_dataAvailable.lock();
if (!m_s->testInbufReadSpace(m_channel)) {
if (!m_s->testInbufReadSpace(m_channel) && !m_abandoning) {
m_dataAvailable.wait();
} else {
m_dataAvailable.unlock();
}
if (m_abandoning) {
if (m_s->m_debugLevel > 1) {
cerr << "thread " << m_channel << " abandoning" << endl;
}
return;
}
}
bool any = false, last = false;
@@ -83,6 +91,12 @@ RubberBandStretcher::Impl::ProcessThread::signalDataAvailable()
m_dataAvailable.signal();
}
void
RubberBandStretcher::Impl::ProcessThread::abandon()
{
m_abandoning = true;
}
void
RubberBandStretcher::Impl::processChunks(size_t c, bool &any, bool &last)
{