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/OpenAL | |
parent | 8ff0c2e10720bd6e583a6b133b75e7bdff27a5f8 (diff) |
3D Audio GSoC:
Changed Readers to top-down architecture instead of bottom-up.
Diffstat (limited to 'intern/audaspace/OpenAL')
-rw-r--r-- | intern/audaspace/OpenAL/AUD_OpenALDevice.cpp | 23 | ||||
-rw-r--r-- | intern/audaspace/OpenAL/AUD_OpenALDevice.h | 6 |
2 files changed, 19 insertions, 10 deletions
diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp index a3b0bff316e..2780f108cda 100644 --- a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp +++ b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp @@ -130,7 +130,6 @@ void AUD_OpenALDevice::updateStreams() AUD_OpenALHandle* sound; int length; - sample_t* buffer; ALint info; AUD_DeviceSpecs specs = m_specs; @@ -161,6 +160,8 @@ void AUD_OpenALDevice::updateStreams() if(info) { specs.specs = sound->reader->getSpecs(); + if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)) + m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)); // for all empty buffers while(info--) @@ -170,7 +171,7 @@ void AUD_OpenALDevice::updateStreams() { // read data length = m_buffersize; - sound->reader->read(length, buffer); + sound->reader->read(length, m_buffer.getBuffer()); // looping necessary? if(length == 0 && sound->loopcount) @@ -181,7 +182,7 @@ void AUD_OpenALDevice::updateStreams() sound->reader->seek(0); length = m_buffersize; - sound->reader->read(length, buffer); + sound->reader->read(length, m_buffer.getBuffer()); } // read nothing? @@ -204,7 +205,7 @@ void AUD_OpenALDevice::updateStreams() // fill with new data alBufferData(sound->buffers[sound->current], sound->format, - buffer, length * + m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate); @@ -581,14 +582,15 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_Reference<AUD_IReader> reader, bool keep) try { - sample_t* buf; + if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)) + m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)); int length; for(int i = 0; i < AUD_OPENAL_CYCLE_BUFFERS; i++) { length = m_buffersize; - reader->read(length, buf); - alBufferData(sound->buffers[i], sound->format, buf, + reader->read(length, m_buffer.getBuffer()); + alBufferData(sound->buffers[i], sound->format, m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate); if(alGetError() != AL_NO_ERROR) @@ -879,17 +881,18 @@ bool AUD_OpenALDevice::seek(AUD_Handle* handle, float position) ALenum err; if((err = alGetError()) == AL_NO_ERROR) { - sample_t* buf; int length; AUD_DeviceSpecs specs = m_specs; specs.specs = alhandle->reader->getSpecs(); + if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)) + m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs)); for(int i = 0; i < AUD_OPENAL_CYCLE_BUFFERS; i++) { length = m_buffersize; - alhandle->reader->read(length, buf); + alhandle->reader->read(length, m_buffer.getBuffer()); alBufferData(alhandle->buffers[i], alhandle->format, - buf, + m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate); diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.h b/intern/audaspace/OpenAL/AUD_OpenALDevice.h index 3bca47f1805..d5db5989fe7 100644 --- a/intern/audaspace/OpenAL/AUD_OpenALDevice.h +++ b/intern/audaspace/OpenAL/AUD_OpenALDevice.h @@ -34,6 +34,7 @@ #include "AUD_IDevice.h" #include "AUD_I3DDevice.h" +#include "AUD_Buffer.h" struct AUD_OpenALHandle; struct AUD_OpenALBufferedFactory; @@ -104,6 +105,11 @@ private: int m_buffersize; /** + * Device buffer. + */ + AUD_Buffer m_buffer; + + /** * Starts the streaming thread. */ void start(); |