mmdevapi: Add initial audioclient stub.
[wine/multimedia.git] / dlls / mmdevapi / mmdevapi.h
blob2cb93856175914df2707d37c9cdf6f4f3adae3de
1 /*
2 * Copyright 2009 Maarten Lankhorst
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #ifndef __WINE_CONFIG_H
20 # error You must include config.h to use this header
21 #endif
23 extern HRESULT MMDevEnum_Create(REFIID riid, void **ppv);
24 extern void MMDevEnum_Free(void);
26 extern HRESULT MMDevice_GetPropValue(const GUID *devguid, DWORD flow, REFPROPERTYKEY key, PROPVARIANT *pv);
27 extern HRESULT MMDevice_SetPropValue(const GUID *devguid, DWORD flow, REFPROPERTYKEY key, REFPROPVARIANT pv);
29 typedef struct MMDevice {
30 const IMMDeviceVtbl *lpVtbl;
31 const IMMEndpointVtbl *lpEndpointVtbl;
32 LONG ref;
34 CRITICAL_SECTION crst;
36 EDataFlow flow;
37 DWORD state;
38 GUID devguid;
39 WCHAR *alname;
40 void *device, *ctx;
41 } MMDevice;
43 extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv);
45 #ifdef HAVE_OPENAL
47 #include "alext.h"
49 /* All openal functions */
50 extern int openal_loaded;
51 #ifdef SONAME_LIBOPENAL
52 extern LPALCCREATECONTEXT palcCreateContext;
53 extern LPALCMAKECONTEXTCURRENT palcMakeContextCurrent;
54 extern LPALCPROCESSCONTEXT palcProcessContext;
55 extern LPALCSUSPENDCONTEXT palcSuspendContext;
56 extern LPALCDESTROYCONTEXT palcDestroyContext;
57 extern LPALCGETCURRENTCONTEXT palcGetCurrentContext;
58 extern LPALCGETCONTEXTSDEVICE palcGetContextsDevice;
59 extern LPALCOPENDEVICE palcOpenDevice;
60 extern LPALCCLOSEDEVICE palcCloseDevice;
61 extern LPALCGETERROR palcGetError;
62 extern LPALCISEXTENSIONPRESENT palcIsExtensionPresent;
63 extern LPALCGETPROCADDRESS palcGetProcAddress;
64 extern LPALCGETENUMVALUE palcGetEnumValue;
65 extern LPALCGETSTRING palcGetString;
66 extern LPALCGETINTEGERV palcGetIntegerv;
67 extern LPALCCAPTUREOPENDEVICE palcCaptureOpenDevice;
68 extern LPALCCAPTURECLOSEDEVICE palcCaptureCloseDevice;
69 extern LPALCCAPTURESTART palcCaptureStart;
70 extern LPALCCAPTURESTOP palcCaptureStop;
71 extern LPALCCAPTURESAMPLES palcCaptureSamples;
72 extern LPALENABLE palEnable;
73 extern LPALDISABLE palDisable;
74 extern LPALISENABLED palIsEnabled;
75 extern LPALGETSTRING palGetString;
76 extern LPALGETBOOLEANV palGetBooleanv;
77 extern LPALGETINTEGERV palGetIntegerv;
78 extern LPALGETFLOATV palGetFloatv;
79 extern LPALGETDOUBLEV palGetDoublev;
80 extern LPALGETBOOLEAN palGetBoolean;
81 extern LPALGETINTEGER palGetInteger;
82 extern LPALGETFLOAT palGetFloat;
83 extern LPALGETDOUBLE palGetDouble;
84 extern LPALGETERROR palGetError;
85 extern LPALISEXTENSIONPRESENT palIsExtensionPresent;
86 extern LPALGETPROCADDRESS palGetProcAddress;
87 extern LPALGETENUMVALUE palGetEnumValue;
88 extern LPALLISTENERF palListenerf;
89 extern LPALLISTENER3F palListener3f;
90 extern LPALLISTENERFV palListenerfv;
91 extern LPALLISTENERI palListeneri;
92 extern LPALLISTENER3I palListener3i;
93 extern LPALLISTENERIV palListeneriv;
94 extern LPALGETLISTENERF palGetListenerf;
95 extern LPALGETLISTENER3F palGetListener3f;
96 extern LPALGETLISTENERFV palGetListenerfv;
97 extern LPALGETLISTENERI palGetListeneri;
98 extern LPALGETLISTENER3I palGetListener3i;
99 extern LPALGETLISTENERIV palGetListeneriv;
100 extern LPALGENSOURCES palGenSources;
101 extern LPALDELETESOURCES palDeleteSources;
102 extern LPALISSOURCE palIsSource;
103 extern LPALSOURCEF palSourcef;
104 extern LPALSOURCE3F palSource3f;
105 extern LPALSOURCEFV palSourcefv;
106 extern LPALSOURCEI palSourcei;
107 extern LPALSOURCE3I palSource3i;
108 extern LPALSOURCEIV palSourceiv;
109 extern LPALGETSOURCEF palGetSourcef;
110 extern LPALGETSOURCE3F palGetSource3f;
111 extern LPALGETSOURCEFV palGetSourcefv;
112 extern LPALGETSOURCEI palGetSourcei;
113 extern LPALGETSOURCE3I palGetSource3i;
114 extern LPALGETSOURCEIV palGetSourceiv;
115 extern LPALSOURCEPLAYV palSourcePlayv;
116 extern LPALSOURCESTOPV palSourceStopv;
117 extern LPALSOURCEREWINDV palSourceRewindv;
118 extern LPALSOURCEPAUSEV palSourcePausev;
119 extern LPALSOURCEPLAY palSourcePlay;
120 extern LPALSOURCESTOP palSourceStop;
121 extern LPALSOURCEREWIND palSourceRewind;
122 extern LPALSOURCEPAUSE palSourcePause;
123 extern LPALSOURCEQUEUEBUFFERS palSourceQueueBuffers;
124 extern LPALSOURCEUNQUEUEBUFFERS palSourceUnqueueBuffers;
125 extern LPALGENBUFFERS palGenBuffers;
126 extern LPALDELETEBUFFERS palDeleteBuffers;
127 extern LPALISBUFFER palIsBuffer;
128 extern LPALBUFFERF palBufferf;
129 extern LPALBUFFER3F palBuffer3f;
130 extern LPALBUFFERFV palBufferfv;
131 extern LPALBUFFERI palBufferi;
132 extern LPALBUFFER3I palBuffer3i;
133 extern LPALBUFFERIV palBufferiv;
134 extern LPALGETBUFFERF palGetBufferf;
135 extern LPALGETBUFFER3F palGetBuffer3f;
136 extern LPALGETBUFFERFV palGetBufferfv;
137 extern LPALGETBUFFERI palGetBufferi;
138 extern LPALGETBUFFER3I palGetBuffer3i;
139 extern LPALGETBUFFERIV palGetBufferiv;
140 extern LPALBUFFERDATA palBufferData;
141 extern LPALDOPPLERFACTOR palDopplerFactor;
142 extern LPALDOPPLERVELOCITY palDopplerVelocity;
143 extern LPALDISTANCEMODEL palDistanceModel;
144 extern LPALSPEEDOFSOUND palSpeedOfSound;
145 #else
146 #define palcCreateContext alcCreateContext
147 #define palcMakeContextCurrent alcMakeContextCurrent
148 #define palcProcessContext alcProcessContext
149 #define palcSuspendContext alcSuspendContext
150 #define palcDestroyContext alcDestroyContext
151 #define palcGetCurrentContext alcGetCurrentContext
152 #define palcGetContextsDevice alcGetContextsDevice
153 #define palcOpenDevice alcOpenDevice
154 #define palcCloseDevice alcCloseDevice
155 #define palcGetError alcGetError
156 #define palcIsExtensionPresent alcIsExtensionPresent
157 #define palcGetProcAddress alcGetProcAddress
158 #define palcGetEnumValue alcGetEnumValue
159 #define palcGetString alcGetString
160 #define palcGetIntegerv alcGetIntegerv
161 #define palcCaptureOpenDevice alcCaptureOpenDevice
162 #define palcCaptureCloseDevice alcCaptureCloseDevice
163 #define palcCaptureStart alcCaptureStart
164 #define palcCaptureStop alcCaptureStop
165 #define palcCaptureSamples alcCaptureSamples
166 #define palEnable alEnable
167 #define palDisable alDisable
168 #define palIsEnabled alIsEnabled
169 #define palGetString alGetString
170 #define palGetBooleanv alGetBooleanv
171 #define palGetIntegerv alGetIntegerv
172 #define palGetFloatv alGetFloatv
173 #define palGetDoublev alGetDoublev
174 #define palGetBoolean alGetBoolean
175 #define palGetInteger alGetInteger
176 #define palGetFloat alGetFloat
177 #define palGetDouble alGetDouble
178 #define palGetError alGetError
179 #define palIsExtensionPresent alIsExtensionPresent
180 #define palGetProcAddress alGetProcAddress
181 #define palGetEnumValue alGetEnumValue
182 #define palListenerf alListenerf
183 #define palListener3f alListener3f
184 #define palListenerfv alListenerfv
185 #define palListeneri alListeneri
186 #define palListener3i alListener3i
187 #define palListeneriv alListeneriv
188 #define palGetListenerf alGetListenerf
189 #define palGetListener3f alGetListener3f
190 #define palGetListenerfv alGetListenerfv
191 #define palGetListeneri alGetListeneri
192 #define palGetListener3i alGetListener3i
193 #define palGetListeneriv alGetListeneriv
194 #define palGenSources alGenSources
195 #define palDeleteSources alDeleteSources
196 #define palIsSource alIsSource
197 #define palSourcef alSourcef
198 #define palSource3f alSource3f
199 #define palSourcefv alSourcefv
200 #define palSourcei alSourcei
201 #define palSource3i alSource3i
202 #define palSourceiv alSourceiv
203 #define palGetSourcef alGetSourcef
204 #define palGetSource3f alGetSource3f
205 #define palGetSourcefv alGetSourcefv
206 #define palGetSourcei alGetSourcei
207 #define palGetSource3i alGetSource3i
208 #define palGetSourceiv alGetSourceiv
209 #define palSourcePlayv alSourcePlayv
210 #define palSourceStopv alSourceStopv
211 #define palSourceRewindv alSourceRewindv
212 #define palSourcePausev alSourcePausev
213 #define palSourcePlay alSourcePlay
214 #define palSourceStop alSourceStop
215 #define palSourceRewind alSourceRewind
216 #define palSourcePause alSourcePause
217 #define palSourceQueueBuffers alSourceQueueBuffers
218 #define palSourceUnqueueBuffers alSourceUnqueueBuffers
219 #define palGenBuffers alGenBuffers
220 #define palDeleteBuffers alDeleteBuffers
221 #define palIsBuffer alIsBuffer
222 #define palBufferf alBufferf
223 #define palBuffer3f alBuffer3f
224 #define palBufferfv alBufferfv
225 #define palBufferi alBufferi
226 #define palBuffer3i alBuffer3i
227 #define palBufferiv alBufferiv
228 #define palGetBufferf alGetBufferf
229 #define palGetBuffer3f alGetBuffer3f
230 #define palGetBufferfv alGetBufferfv
231 #define palGetBufferi alGetBufferi
232 #define palGetBuffer3i alGetBuffer3i
233 #define palGetBufferiv alGetBufferiv
234 #define palBufferData alBufferData
235 #define palDopplerFactor alDopplerFactor
236 #define palDopplerVelocity alDopplerVelocity
237 #define palDistanceModel alDistanceModel
238 #define palSpeedOfSound alSpeedOfSound
239 #endif
241 /* OpenAL only allows for 1 single access to the device at the same time */
242 extern CRITICAL_SECTION openal_crst;
243 extern int local_contexts;
244 extern typeof(alcGetCurrentContext) *get_context;
245 extern typeof(alcMakeContextCurrent) *set_context;
247 #define getALError() \
248 do { \
249 ALenum err = palGetError(); \
250 if(err != AL_NO_ERROR) \
252 ERR(">>>>>>>>>>>> Received AL error %#x on context %p, %s:%u\n", err, get_context(), __FUNCTION__, __LINE__); \
254 } while (0)
256 #define getALCError(dev) \
257 do { \
258 ALenum err = palcGetError(dev); \
259 if(err != ALC_NO_ERROR) \
261 ERR(">>>>>>>>>>>> Received ALC error %#x on device %p, %s:%u\n", err, dev, __FUNCTION__, __LINE__); \
263 } while(0)
265 #define setALContext(actx) \
266 do { \
267 ALCcontext *__old_ctx, *cur_ctx = actx ; \
268 if (!local_contexts) EnterCriticalSection(&openal_crst); \
269 __old_ctx = get_context(); \
270 if (__old_ctx != cur_ctx && set_context(cur_ctx) == ALC_FALSE) {\
271 ERR("Couldn't set current context!!\n"); \
272 getALCError(palcGetContextsDevice(cur_ctx)); \
275 /* Only restore a NULL context if using global contexts, for TLS contexts always restore */
276 #define popALContext() \
277 if (__old_ctx != cur_ctx \
278 && (local_contexts || __old_ctx) \
279 && set_context(__old_ctx) == ALC_FALSE) { \
280 ERR("Couldn't restore old context!!\n"); \
281 getALCError(palcGetContextsDevice(__old_ctx)); \
283 if (!local_contexts) LeaveCriticalSection(&openal_crst); \
284 } while (0)
286 #endif