Add base support for ALC_EXT_disconnect
[openal-soft.git] / OpenAL32 / Include / alu.h
blob4641a6981217c254fd2b1df5f2c34af975f8a37a
1 #ifndef _ALU_H_
2 #define _ALU_H_
4 #include "AL/al.h"
5 #include "AL/alc.h"
6 #include "AL/alext.h"
8 #ifdef HAVE_FLOAT_H
9 #include <float.h>
10 #endif
12 #ifndef M_PI
13 #define M_PI 3.14159265358979323846 /* pi */
14 #define M_PI_2 1.57079632679489661923 /* pi/2 */
15 #endif
17 #ifdef HAVE_SQRTF
18 #define aluSqrt(x) ((ALfloat)sqrtf((float)(x)))
19 #else
20 #define aluSqrt(x) ((ALfloat)sqrt((double)(x)))
21 #endif
23 #ifdef HAVE_ACOSF
24 #define aluAcos(x) ((ALfloat)acosf((float)(x)))
25 #else
26 #define aluAcos(x) ((ALfloat)acos((double)(x)))
27 #endif
29 #ifdef HAVE_ATANF
30 #define aluAtan(x) ((ALfloat)atanf((float)(x)))
31 #else
32 #define aluAtan(x) ((ALfloat)atan((double)(x)))
33 #endif
35 #ifdef HAVE_FABSF
36 #define aluFabs(x) ((ALfloat)fabsf((float)(x)))
37 #else
38 #define aluFabs(x) ((ALfloat)fabs((double)(x)))
39 #endif
41 // fixes for mingw32.
42 #if defined(max) && !defined(__max)
43 #define __max max
44 #endif
45 #if defined(min) && !defined(__min)
46 #define __min min
47 #endif
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
53 enum {
54 FRONT_LEFT = 0,
55 FRONT_RIGHT,
56 FRONT_CENTER,
57 SIDE_LEFT,
58 SIDE_RIGHT,
59 BACK_LEFT,
60 BACK_RIGHT,
61 BACK_CENTER,
62 LFE,
64 OUTPUTCHANNELS
67 #define BUFFERSIZE 24000
69 extern ALboolean DuplicateStereo;
71 /* NOTE: The AL_FORMAT_REAR* enums aren't handled here be cause they're
72 * converted to AL_FORMAT_QUAD* when loaded */
73 static __inline ALuint aluBytesFromFormat(ALenum format)
75 switch(format)
77 case AL_FORMAT_MONO8:
78 case AL_FORMAT_STEREO8:
79 case AL_FORMAT_QUAD8_LOKI:
80 case AL_FORMAT_QUAD8:
81 case AL_FORMAT_51CHN8:
82 case AL_FORMAT_61CHN8:
83 case AL_FORMAT_71CHN8:
84 return 1;
86 case AL_FORMAT_MONO16:
87 case AL_FORMAT_STEREO16:
88 case AL_FORMAT_QUAD16_LOKI:
89 case AL_FORMAT_QUAD16:
90 case AL_FORMAT_51CHN16:
91 case AL_FORMAT_61CHN16:
92 case AL_FORMAT_71CHN16:
93 return 2;
95 case AL_FORMAT_MONO_FLOAT32:
96 case AL_FORMAT_STEREO_FLOAT32:
97 case AL_FORMAT_QUAD32:
98 case AL_FORMAT_51CHN32:
99 case AL_FORMAT_61CHN32:
100 case AL_FORMAT_71CHN32:
101 return 4;
103 default:
104 return 0;
107 static __inline ALuint aluChannelsFromFormat(ALenum format)
109 switch(format)
111 case AL_FORMAT_MONO8:
112 case AL_FORMAT_MONO16:
113 case AL_FORMAT_MONO_FLOAT32:
114 return 1;
116 case AL_FORMAT_STEREO8:
117 case AL_FORMAT_STEREO16:
118 case AL_FORMAT_STEREO_FLOAT32:
119 return 2;
121 case AL_FORMAT_QUAD8_LOKI:
122 case AL_FORMAT_QUAD16_LOKI:
123 case AL_FORMAT_QUAD8:
124 case AL_FORMAT_QUAD16:
125 case AL_FORMAT_QUAD32:
126 return 4;
128 case AL_FORMAT_51CHN8:
129 case AL_FORMAT_51CHN16:
130 case AL_FORMAT_51CHN32:
131 return 6;
133 case AL_FORMAT_61CHN8:
134 case AL_FORMAT_61CHN16:
135 case AL_FORMAT_61CHN32:
136 return 7;
138 case AL_FORMAT_71CHN8:
139 case AL_FORMAT_71CHN16:
140 case AL_FORMAT_71CHN32:
141 return 8;
143 default:
144 return 0;
148 ALvoid aluInitPanning(ALCcontext *Context);
149 ALvoid aluMixData(ALCcontext *context,ALvoid *buffer,ALsizei size,ALenum format);
150 ALvoid aluHandleDisconnect(ALCdevice *device);
152 #ifdef __cplusplus
154 #endif
156 #endif