aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/Include/alBuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'OpenAL32/Include/alBuffer.h')
-rw-r--r--OpenAL32/Include/alBuffer.h106
1 files changed, 106 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