diff options
Diffstat (limited to 'intern/audaspace/FX/AUD_FaderReader.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_FaderReader.cpp | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/intern/audaspace/FX/AUD_FaderReader.cpp b/intern/audaspace/FX/AUD_FaderReader.cpp index 4e919fff323..2292fa06102 100644 --- a/intern/audaspace/FX/AUD_FaderReader.cpp +++ b/intern/audaspace/FX/AUD_FaderReader.cpp @@ -24,7 +24,6 @@ */ #include "AUD_FaderReader.h" -#include "AUD_Buffer.h" #include <cstring> @@ -33,19 +32,9 @@ AUD_FaderReader::AUD_FaderReader(AUD_IReader* reader, AUD_FadeType type, AUD_EffectReader(reader), m_type(type), m_start(start), - m_length(length) + m_length(length), + m_empty(true) { - m_buffer = new AUD_Buffer(); AUD_NEW("buffer") -} - -AUD_FaderReader::~AUD_FaderReader() -{ - delete m_buffer; AUD_DELETE("buffer") -} - -bool AUD_FaderReader::notify(AUD_Message &message) -{ - return m_reader->notify(message); } void AUD_FaderReader::read(int & length, sample_t* & buffer) @@ -56,28 +45,50 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer) m_reader->read(length, buffer); - if(m_buffer->getSize() < length * samplesize) - m_buffer->resize(length * samplesize); - if((position + length) / (float)specs.rate <= m_start) { if(m_type != AUD_FADE_OUT) { - buffer = m_buffer->getBuffer(); - memset(buffer, 0, length * samplesize); + if(m_buffer.getSize() < length * samplesize) + { + m_buffer.resize(length * samplesize); + m_empty = false; + } + + buffer = m_buffer.getBuffer(); + + if(!m_empty) + { + memset(buffer, 0, length * samplesize); + m_empty = true; + } } } else if(position / (float)specs.rate >= m_start+m_length) { if(m_type == AUD_FADE_OUT) { - buffer = m_buffer->getBuffer(); - memset(buffer, 0, length * samplesize); + if(m_buffer.getSize() < length * samplesize) + { + m_buffer.resize(length * samplesize); + m_empty = false; + } + + buffer = m_buffer.getBuffer(); + + if(!m_empty) + { + memset(buffer, 0, length * samplesize); + m_empty = true; + } } } else { - sample_t* buf = m_buffer->getBuffer(); + if(m_buffer.getSize() < length * samplesize) + m_buffer.resize(length * samplesize); + + sample_t* buf = m_buffer.getBuffer(); float volume = 1.0f; for(int i = 0; i < length * specs.channels; i++) @@ -98,5 +109,6 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer) } buffer = buf; + m_empty = false; } } |