summaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-11-28 19:52:17 -0800
committerChris Robinson <[email protected]>2010-11-28 19:52:17 -0800
commitda4f5c6f96b04094bf37e5c7ac393a7bfbfbb681 (patch)
treef467c94351e81f7ede5f3ac4847a8cbbe117b516 /Alc
parentf09ae196a83c8a64fdd29e60b30dc51a367cb1c9 (diff)
Uninline some functions
Also add -Winline to the compiler command line to watch for future inline problems
Diffstat (limited to 'Alc')
-rw-r--r--Alc/ALc.c20
-rw-r--r--Alc/ALu.c106
-rw-r--r--Alc/panning.c14
3 files changed, 140 insertions, 0 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index d2bdf144..2463ab12 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -757,6 +757,26 @@ void RemoveUIntMapKey(UIntMap *map, ALuint key)
}
}
+ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key)
+{
+ if(map->size > 0)
+ {
+ ALsizei low = 0;
+ ALsizei high = map->size - 1;
+ while(low < high)
+ {
+ ALsizei mid = low + (high-low)/2;
+ if(map->array[mid].key < key)
+ low = mid + 1;
+ else
+ high = mid;
+ }
+ if(map->array[low].key == key)
+ return map->array[low].value;
+ }
+ return NULL;
+}
+
/*
IsDevice
diff --git a/Alc/ALu.c b/Alc/ALu.c
index 83571f50..03e1f6ca 100644
--- a/Alc/ALu.c
+++ b/Alc/ALu.c
@@ -37,6 +37,112 @@
#include "bs2b.h"
+ALuint aluBytesFromFormat(ALenum format)
+{
+ switch(format)
+ {
+ case AL_FORMAT_MONO8:
+ case AL_FORMAT_STEREO8:
+ case AL_FORMAT_QUAD8_LOKI:
+ case AL_FORMAT_QUAD8:
+ case AL_FORMAT_REAR8:
+ case AL_FORMAT_51CHN8:
+ case AL_FORMAT_61CHN8:
+ case AL_FORMAT_71CHN8:
+ return 1;
+
+ case AL_FORMAT_MONO16:
+ case AL_FORMAT_STEREO16:
+ case AL_FORMAT_QUAD16_LOKI:
+ case AL_FORMAT_QUAD16:
+ case AL_FORMAT_REAR16:
+ case AL_FORMAT_51CHN16:
+ case AL_FORMAT_61CHN16:
+ case AL_FORMAT_71CHN16:
+ return 2;
+
+ case AL_FORMAT_MONO_FLOAT32:
+ case AL_FORMAT_STEREO_FLOAT32:
+ case AL_FORMAT_QUAD32:
+ case AL_FORMAT_REAR32:
+ case AL_FORMAT_51CHN32:
+ case AL_FORMAT_61CHN32:
+ case AL_FORMAT_71CHN32:
+ return 4;
+
+ case AL_FORMAT_MONO_DOUBLE_EXT:
+ case AL_FORMAT_STEREO_DOUBLE_EXT:
+ return 8;
+
+ case AL_FORMAT_MONO_MULAW:
+ case AL_FORMAT_STEREO_MULAW:
+ case AL_FORMAT_QUAD_MULAW:
+ case AL_FORMAT_REAR_MULAW:
+ case AL_FORMAT_51CHN_MULAW:
+ case AL_FORMAT_61CHN_MULAW:
+ case AL_FORMAT_71CHN_MULAW:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+ALuint aluChannelsFromFormat(ALenum format)
+{
+ switch(format)
+ {
+ case AL_FORMAT_MONO8:
+ case AL_FORMAT_MONO16:
+ case AL_FORMAT_MONO_FLOAT32:
+ case AL_FORMAT_MONO_DOUBLE_EXT:
+ case AL_FORMAT_MONO_MULAW:
+ return 1;
+
+ case AL_FORMAT_STEREO8:
+ case AL_FORMAT_STEREO16:
+ case AL_FORMAT_STEREO_FLOAT32:
+ case AL_FORMAT_STEREO_DOUBLE_EXT:
+ case AL_FORMAT_STEREO_MULAW:
+ return 2;
+
+ case AL_FORMAT_QUAD8_LOKI:
+ case AL_FORMAT_QUAD16_LOKI:
+ case AL_FORMAT_QUAD8:
+ case AL_FORMAT_QUAD16:
+ case AL_FORMAT_QUAD32:
+ case AL_FORMAT_QUAD_MULAW:
+ return 4;
+
+ case AL_FORMAT_REAR8:
+ case AL_FORMAT_REAR16:
+ case AL_FORMAT_REAR32:
+ case AL_FORMAT_REAR_MULAW:
+ return 2;
+
+ case AL_FORMAT_51CHN8:
+ case AL_FORMAT_51CHN16:
+ case AL_FORMAT_51CHN32:
+ case AL_FORMAT_51CHN_MULAW:
+ return 6;
+
+ case AL_FORMAT_61CHN8:
+ case AL_FORMAT_61CHN16:
+ case AL_FORMAT_61CHN32:
+ case AL_FORMAT_61CHN_MULAW:
+ return 7;
+
+ case AL_FORMAT_71CHN8:
+ case AL_FORMAT_71CHN16:
+ case AL_FORMAT_71CHN32:
+ case AL_FORMAT_71CHN_MULAW:
+ return 8;
+
+ default:
+ return 0;
+ }
+}
+
+
static __inline ALvoid aluCrossproduct(const ALfloat *inVector1, const ALfloat *inVector2, ALfloat *outVector)
{
outVector[0] = inVector1[1]*inVector2[2] - inVector1[2]*inVector2[1];
diff --git a/Alc/panning.c b/Alc/panning.c
index 5c0f68fd..43c55cad 100644
--- a/Alc/panning.c
+++ b/Alc/panning.c
@@ -146,6 +146,20 @@ static ALfloat aluLUTpos2Angle(ALint pos)
return aluAtan((ALfloat)(pos - 3 * QUADRANT_NUM) / (ALfloat)(4 * QUADRANT_NUM - pos)) - M_PI_2;
}
+ALint aluCart2LUTpos(ALfloat re, ALfloat im)
+{
+ ALint pos = 0;
+ ALfloat denom = aluFabs(re) + aluFabs(im);
+ if(denom > 0.0f)
+ pos = (ALint)(QUADRANT_NUM*aluFabs(im) / denom + 0.5);
+
+ if(re < 0.0)
+ pos = 2 * QUADRANT_NUM - pos;
+ if(im < 0.0)
+ pos = LUT_NUM - pos;
+ return pos%LUT_NUM;
+}
+
ALvoid aluInitPanning(ALCdevice *Device)
{
ALfloat SpeakerAngle[OUTPUTCHANNELS];