diff options
author | Joerg Mueller <nexyon@gmail.com> | 2011-06-14 16:13:19 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2011-06-14 16:13:19 +0400 |
commit | d8974a60f6811faa2872b55eda41b03387614ed1 (patch) | |
tree | a517f14ea860a1c0111fe758c293d9471dca7496 /intern/audaspace/FX/AUD_ReverseReader.cpp | |
parent | 8ff0c2e10720bd6e583a6b133b75e7bdff27a5f8 (diff) |
3D Audio GSoC:
Changed Readers to top-down architecture instead of bottom-up.
Diffstat (limited to 'intern/audaspace/FX/AUD_ReverseReader.cpp')
-rw-r--r-- | intern/audaspace/FX/AUD_ReverseReader.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/intern/audaspace/FX/AUD_ReverseReader.cpp b/intern/audaspace/FX/AUD_ReverseReader.cpp index 8ca9f8609bb..030896d2eae 100644 --- a/intern/audaspace/FX/AUD_ReverseReader.cpp +++ b/intern/audaspace/FX/AUD_ReverseReader.cpp @@ -60,7 +60,7 @@ int AUD_ReverseReader::getPosition() const return m_position; } -void AUD_ReverseReader::read(int & length, sample_t* & buffer) +void AUD_ReverseReader::read(int & length, sample_t* buffer) { // first correct the length if(m_position + length > m_length) @@ -72,36 +72,34 @@ void AUD_ReverseReader::read(int & length, sample_t* & buffer) return; } - AUD_Specs specs = getSpecs(); - int samplesize = AUD_SAMPLE_SIZE(specs); + const AUD_Specs specs = getSpecs(); + const int samplesize = AUD_SAMPLE_SIZE(specs); - // resize buffer if needed - if(m_buffer.getSize() < length * samplesize) - m_buffer.resize(length * samplesize); + sample_t temp[specs.channels]; - buffer = m_buffer.getBuffer(); - - sample_t* buf; int len = length; // read from reader m_reader->seek(m_length - m_position - len); - m_reader->read(len, buf); + m_reader->read(len, buffer); // set null if reader didn't give enough data if(len < length) - { memset(buffer, 0, (length - len) * samplesize); - buffer += (length - len) * specs.channels; - } // copy the samples reverted - for(int i = 0; i < len; i++) + for(int i = 0; i < length / 2; i++) + { + memcpy(temp, + buffer + (len - 1 - i) * specs.channels, + samplesize); + memcpy(buffer + (len - 1 - i) * specs.channels, + buffer + i * specs.channels, + samplesize); memcpy(buffer + i * specs.channels, - buf + (len - 1 - i) * specs.channels, + temp, samplesize); + } m_position += length; - - buffer = m_buffer.getBuffer(); } |