diff options
author | Chris Robinson <[email protected]> | 2010-11-26 23:42:30 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-11-26 23:42:30 -0800 |
commit | 6abb9d151eef04d5770bbdd584cd7cdc565f970d (patch) | |
tree | e1c7ffc1602c755729b9c1d95b0d1e2f8f3e8c99 /OpenAL32 | |
parent | 08827efae3bd6e095087507b0f9e65881832a8d1 (diff) |
Use enums when selecting the mixer
Diffstat (limited to 'OpenAL32')
-rw-r--r-- | OpenAL32/Include/alBuffer.h | 106 | ||||
-rw-r--r-- | OpenAL32/alBuffer.c | 10 |
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; |