diff options
Diffstat (limited to 'intern/audaspace/FX/AUD_DelayReader.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_DelayReader.cpp | 36 |
1 files changed, 8 insertions, 28 deletions
diff --git a/intern/audaspace/FX/AUD_DelayReader.cpp b/intern/audaspace/FX/AUD_DelayReader.cpp index 374b876455d..7d58b3dae4f 100644 --- a/intern/audaspace/FX/AUD_DelayReader.cpp +++ b/intern/audaspace/FX/AUD_DelayReader.cpp @@ -33,11 +33,10 @@ #include <cstring> -AUD_DelayReader::AUD_DelayReader(AUD_IReader* reader, float delay) : +AUD_DelayReader::AUD_DelayReader(AUD_Reference<AUD_IReader> reader, float delay) : AUD_EffectReader(reader), m_delay(int(delay * reader->getSpecs().rate)), - m_remdelay(int(delay * reader->getSpecs().rate)), - m_empty(true) + m_remdelay(int(delay * reader->getSpecs().rate)) { } @@ -70,49 +69,30 @@ int AUD_DelayReader::getPosition() const return m_reader->getPosition() + m_delay; } -void AUD_DelayReader::read(int & length, sample_t* & buffer) +void AUD_DelayReader::read(int& length, bool& eos, sample_t* buffer) { if(m_remdelay > 0) { AUD_Specs specs = m_reader->getSpecs(); int samplesize = AUD_SAMPLE_SIZE(specs); - if(m_buffer.getSize() < length * samplesize) - { - m_buffer.resize(length * samplesize); - m_empty = false; - } - - buffer = m_buffer.getBuffer(); - if(length > m_remdelay) { - if(!m_empty) - memset(buffer, 0, m_remdelay * samplesize); + memset(buffer, 0, m_remdelay * samplesize); int len = length - m_remdelay; - sample_t* buf; - m_reader->read(len, buf); - - memcpy(buffer + m_remdelay * specs.channels, - buf, len * samplesize); + m_reader->read(len, eos, buffer + m_remdelay * specs.channels); - if(len < length-m_remdelay) - length = m_remdelay + len; + length = m_remdelay + len; m_remdelay = 0; - m_empty = false; } else { - if(!m_empty) - { - memset(buffer, 0, length * samplesize); - m_empty = true; - } + memset(buffer, 0, length * samplesize); m_remdelay -= length; } } else - m_reader->read(length, buffer); + m_reader->read(length, eos, buffer); } |