diff options
Diffstat (limited to 'intern/audaspace/FX/AUD_LoopReader.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_LoopReader.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/intern/audaspace/FX/AUD_LoopReader.cpp b/intern/audaspace/FX/AUD_LoopReader.cpp index 0efee5b55c0..de67a445ab2 100644 --- a/intern/audaspace/FX/AUD_LoopReader.cpp +++ b/intern/audaspace/FX/AUD_LoopReader.cpp @@ -68,21 +68,20 @@ int AUD_LoopReader::getPosition() const return m_reader->getPosition() * (m_count < 0 ? 1 : m_count); } -void AUD_LoopReader::read(int & length, sample_t* buffer) +void AUD_LoopReader::read(int& length, bool& eos, sample_t* buffer) { - AUD_Specs specs = m_reader->getSpecs(); + const AUD_Specs specs = m_reader->getSpecs(); int len = length; - m_reader->read(len, buffer); + m_reader->read(length, eos, buffer); - if(len < length && m_left) + if(length < len && eos && m_left) { - int pos = 0; - - pos += len; + int pos = length; + length = len; - while(pos < length && m_left) + while(pos < length && eos && m_left) { if(m_left > 0) m_left--; @@ -90,7 +89,7 @@ void AUD_LoopReader::read(int & length, sample_t* buffer) m_reader->seek(0); len = length - pos; - m_reader->read(len, buffer + pos * specs.channels); + m_reader->read(len, eos, buffer + pos * specs.channels); // prevent endless loop if(!len) @@ -101,6 +100,4 @@ void AUD_LoopReader::read(int & length, sample_t* buffer) length = pos; } - else - length = len; } |