Make the filter functions global inline, and use it for echo
[openal-soft.git] / OpenAL32 / Include / alFilter.h
blobc0a05d6a633d9a32895d57b90d0759b80f6fe33a
1 #ifndef _AL_FILTER_H_
2 #define _AL_FILTER_H_
4 #include "AL/al.h"
5 #include "alu.h"
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
11 typedef struct {
12 ALfloat coeff;
13 ALfloat history[0];
14 } FILTER;
16 static __inline ALfloat lpFilter4P(FILTER *iir, ALuint offset, ALfloat input)
18 ALfloat *history = &iir->history[offset];
19 ALfloat a = iir->coeff;
20 ALfloat output = input;
22 output = output + (history[0]-output)*a;
23 history[0] = output;
24 output = output + (history[1]-output)*a;
25 history[1] = output;
26 output = output + (history[2]-output)*a;
27 history[2] = output;
28 output = output + (history[3]-output)*a;
29 history[3] = output;
31 return output;
34 static __inline ALfloat lpFilter2P(FILTER *iir, ALuint offset, ALfloat input)
36 ALfloat *history = &iir->history[offset];
37 ALfloat a = iir->coeff;
38 ALfloat output = input;
40 output = output + (history[0]-output)*a;
41 history[0] = output;
42 output = output + (history[1]-output)*a;
43 history[1] = output;
45 return output;
49 #define AL_FILTER_TYPE 0x8001
51 #define AL_FILTER_NULL 0x0000
52 #define AL_FILTER_LOWPASS 0x0001
53 #define AL_FILTER_HIGHPASS 0x0002
54 #define AL_FILTER_BANDPASS 0x0003
56 #define AL_LOWPASS_GAIN 0x0001
57 #define AL_LOWPASS_GAINHF 0x0002
60 typedef struct ALfilter_struct
62 // Filter type (AL_FILTER_NULL, ...)
63 ALenum type;
65 ALfloat Gain;
66 ALfloat GainHF;
68 // Index to itself
69 ALuint filter;
71 struct ALfilter_struct *next;
72 } ALfilter;
74 ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters);
75 ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, ALuint *filters);
76 ALboolean AL_APIENTRY alIsFilter(ALuint filter);
78 ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue);
79 ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, ALint *piValues);
80 ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue);
81 ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
83 ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue);
84 ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues);
85 ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue);
86 ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
88 ALvoid ReleaseALFilters(ALvoid);
90 #ifdef __cplusplus
92 #endif
94 #endif