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:
authorJoerg Mueller <nexyon@gmail.com>2011-06-14 16:13:19 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-06-14 16:13:19 +0400
commitd8974a60f6811faa2872b55eda41b03387614ed1 (patch)
treea517f14ea860a1c0111fe758c293d9471dca7496 /intern/audaspace/OpenAL
parent8ff0c2e10720bd6e583a6b133b75e7bdff27a5f8 (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.cpp23
-rw-r--r--intern/audaspace/OpenAL/AUD_OpenALDevice.h6
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();