summaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-11-26 23:42:30 -0800
committerChris Robinson <[email protected]>2010-11-26 23:42:30 -0800
commit6abb9d151eef04d5770bbdd584cd7cdc565f970d (patch)
treee1c7ffc1602c755729b9c1d95b0d1e2f8f3e8c99 /OpenAL32
parent08827efae3bd6e095087507b0f9e65881832a8d1 (diff)
Use enums when selecting the mixer
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/Include/alBuffer.h106
-rw-r--r--OpenAL32/alBuffer.c10
2 files changed, 116 insertions, 0 deletions
diff --git a/OpenAL32/Include/alBuffer.h b/OpenAL32/Include/alBuffer.h
index e11fe210..06823ace 100644
--- a/OpenAL32/Include/alBuffer.h
+++ b/OpenAL32/Include/alBuffer.h
@@ -7,6 +7,109 @@
extern "C" {
#endif
+enum FmtType {
+ FmtUByte,
+ FmtShort,
+ FmtFloat,
+};
+
+enum FmtChannels {
+ FmtMono,
+ FmtStereo,
+ FmtQuad,
+ Fmt51ChanWFX,
+ Fmt61ChanWFX,
+ Fmt71ChanWFX,
+};
+
+
+static __inline void DecompFormat(ALenum format, enum FmtType *type,
+ enum FmtChannels *order)
+{
+ switch(format)
+ {
+ case AL_FORMAT_MONO8:
+ *type = FmtUByte;
+ *order = FmtMono;
+ break;
+ case AL_FORMAT_MONO16:
+ *type = FmtShort;
+ *order = FmtMono;
+ break;
+ case AL_FORMAT_MONO_FLOAT32:
+ *type = FmtFloat;
+ *order = FmtMono;
+ break;
+ case AL_FORMAT_STEREO8:
+ *type = FmtUByte;
+ *order = FmtStereo;
+ break;
+ case AL_FORMAT_STEREO16:
+ *type = FmtShort;
+ *order = FmtStereo;
+ break;
+ case AL_FORMAT_STEREO_FLOAT32:
+ *type = FmtFloat;
+ *order = FmtStereo;
+ break;
+ case AL_FORMAT_QUAD8_LOKI:
+ case AL_FORMAT_QUAD8:
+ *type = FmtUByte;
+ *order = FmtQuad;
+ break;
+ case AL_FORMAT_QUAD16_LOKI:
+ case AL_FORMAT_QUAD16:
+ *type = FmtShort;
+ *order = FmtQuad;
+ break;
+ case AL_FORMAT_QUAD32:
+ *type = FmtFloat;
+ *order = FmtQuad;
+ break;
+ case AL_FORMAT_51CHN8:
+ *type = FmtUByte;
+ *order = Fmt51ChanWFX;
+ break;
+ case AL_FORMAT_51CHN16:
+ *type = FmtShort;
+ *order = Fmt51ChanWFX;
+ break;
+ case AL_FORMAT_51CHN32:
+ *type = FmtFloat;
+ *order = Fmt51ChanWFX;
+ break;
+ case AL_FORMAT_61CHN8:
+ *type = FmtUByte;
+ *order = Fmt61ChanWFX;
+ break;
+ case AL_FORMAT_61CHN16:
+ *type = FmtShort;
+ *order = Fmt61ChanWFX;
+ break;
+ case AL_FORMAT_61CHN32:
+ *type = FmtFloat;
+ *order = Fmt61ChanWFX;
+ break;
+ case AL_FORMAT_71CHN8:
+ *type = FmtUByte;
+ *order = Fmt71ChanWFX;
+ break;
+ case AL_FORMAT_71CHN16:
+ *type = FmtShort;
+ *order = Fmt71ChanWFX;
+ break;
+ case AL_FORMAT_71CHN32:
+ *type = FmtFloat;
+ *order = Fmt71ChanWFX;
+ break;
+
+ default:
+ AL_PRINT("Unhandled format specified: 0x%X\n", format);
+ abort();
+ }
+}
+
+
typedef struct ALbuffer
{
ALvoid *data;
@@ -22,6 +125,9 @@ typedef struct ALbuffer
ALsizei LoopStart;
ALsizei LoopEnd;
+ enum FmtType FmtType;
+ enum FmtChannels FmtChannels;
+
ALuint refcount; // Number of sources using this buffer (deletion can only occur when this is 0)
// Index to itself
diff --git a/OpenAL32/alBuffer.c b/OpenAL32/alBuffer.c
index ed03df00..c923819d 100644
--- a/OpenAL32/alBuffer.c
+++ b/OpenAL32/alBuffer.c
@@ -361,6 +361,8 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels / NewBytes;
+ DecompFormat(NewFormat, &ALBuf->FmtType, &ALBuf->FmtChannels);
+
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = OrigBytes * 2;
}
@@ -409,6 +411,8 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / Channels / NewBytes;
+ DecompFormat(NewFormat, &ALBuf->FmtType, &ALBuf->FmtChannels);
+
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 36 * Channels;
}
@@ -462,6 +466,8 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / Channels / NewBytes;
+ DecompFormat(NewFormat, &ALBuf->FmtType, &ALBuf->FmtChannels);
+
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 1 * Channels;
}
@@ -503,6 +509,8 @@ AL_API ALvoid AL_APIENTRY alBufferData(ALuint buffer,ALenum format,const ALvoid
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels / NewBytes;
+ DecompFormat(NewFormat, &ALBuf->FmtType, &ALBuf->FmtChannels);
+
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = 1 * 2;
}
@@ -1085,6 +1093,8 @@ static ALenum LoadData(ALbuffer *ALBuf, const ALvoid *data, ALsizei size, ALuint
ALBuf->LoopStart = 0;
ALBuf->LoopEnd = newsize / NewChannels / NewBytes;
+ DecompFormat(NewFormat, &ALBuf->FmtType, &ALBuf->FmtChannels);
+
ALBuf->OriginalSize = size;
ALBuf->OriginalAlign = OrigBytes * OrigChannels;