Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/audaspace/intern/AUD_StreamBufferFactory.cpp')
-rw-r--r--intern/audaspace/intern/AUD_StreamBufferFactory.cpp25
1 files changed, 11 insertions, 14 deletions
diff --git a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp b/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
index c25442b6f26..ff966c86025 100644
--- a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
+++ b/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
@@ -35,17 +35,17 @@
#include <cstring>
-AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_IFactory* factory) :
+AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_Reference<AUD_IFactory> factory) :
m_buffer(new AUD_Buffer())
{
- AUD_IReader* reader = factory->createReader();
+ AUD_Reference<AUD_IReader> reader = factory->createReader();
m_specs = reader->getSpecs();
int sample_size = AUD_SAMPLE_SIZE(m_specs);
int length;
int index = 0;
- sample_t* buffer;
+ bool eos = false;
// get an approximated size if possible
int size = reader->getLength();
@@ -55,27 +55,24 @@ AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_IFactory* factory) :
else
size += m_specs.rate;
- // as long as we fill our buffer to the end
- while(index == m_buffer.get()->getSize() / sample_size)
+ // as long as the end of the stream is not reached
+ while(!eos)
{
// increase
- m_buffer.get()->resize(size*sample_size, true);
+ m_buffer->resize(size*sample_size, true);
// read more
length = size-index;
- reader->read(length, buffer);
- memcpy(m_buffer.get()->getBuffer() + index * m_specs.channels,
- buffer,
- length * sample_size);
- size += AUD_BUFFER_RESIZE_BYTES / sample_size;
+ reader->read(length, eos, m_buffer->getBuffer() + index * m_specs.channels);
+ if(index == m_buffer->getSize() / sample_size)
+ size += AUD_BUFFER_RESIZE_BYTES / sample_size;
index += length;
}
- m_buffer.get()->resize(index * sample_size, true);
- delete reader;
+ m_buffer->resize(index * sample_size, true);
}
-AUD_IReader* AUD_StreamBufferFactory::createReader() const
+AUD_Reference<AUD_IReader> AUD_StreamBufferFactory::createReader()
{
return new AUD_BufferReader(m_buffer, m_specs);
}