Mercurial > hg > vamp-plugin-sdk
changeset 274:33feff966de3
* Fix an infinite loop that occurs with some features
| author | cannam | 
|---|---|
| date | Fri, 12 Dec 2008 14:28:42 +0000 | 
| parents | de3e865f92c8 | 
| children | ecfb41a370aa | 
| files | src/vamp-hostsdk/PluginSummarisingAdapter.cpp | 
| diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] | 
line wrap: on
 line diff
--- a/src/vamp-hostsdk/PluginSummarisingAdapter.cpp Fri Dec 05 16:25:58 2008 +0000 +++ b/src/vamp-hostsdk/PluginSummarisingAdapter.cpp Fri Dec 12 14:28:42 2008 +0000 @@ -613,6 +613,10 @@ SegmentBoundaries::iterator boundaryitr = m_boundaries.begin(); RealTime segmentStart = RealTime::zeroTime; +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER_SEGMENT + std::cerr << "segment: starting" << std::endl; +#endif + for (OutputAccumulatorMap::iterator i = m_accumulators.begin(); i != m_accumulators.end(); ++i) { @@ -645,9 +649,24 @@ RealTime segmentStart = RealTime::zeroTime; RealTime segmentEnd = resultEnd - RealTime(1, 0); + RealTime prevSegmentStart = segmentStart - RealTime(1, 0); + while (segmentEnd < resultEnd) { +#ifdef DEBUG_PLUGIN_SUMMARISING_ADAPTER_SEGMENT + std::cerr << "segment end " << segmentEnd << " < result end " + << resultEnd << " (with result start " << resultStart << ")" << std::endl; +#endif + findSegmentBounds(resultStart, segmentStart, segmentEnd); + + if (segmentStart == prevSegmentStart) { + // This can happen when we reach the end of the + // input, if a feature's end time overruns the + // input audio end time + break; + } + prevSegmentStart = segmentStart; RealTime chunkStart = resultStart; if (chunkStart < segmentStart) chunkStart = segmentStart;
