Get rid of the ICOM_MSVTABLE_COMPAT support, g++ no longer requires
[wine/multimedia.git] / include / dsdriver.h
blob34f8679095c1921c660162f5e1ab21d8df581808
1 /*
2 * DirectSound driver
3 * (DirectX 5 version)
5 * Copyright (C) 2000 Ove Kaaven
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #ifndef __WINE_DSDRIVER_H
23 #define __WINE_DSDRIVER_H
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
29 /*****************************************************************************
30 * Predeclare the interfaces
32 DEFINE_GUID(IID_IDsDriver, 0x8C4233C0l, 0xB4CC, 0x11CE, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
33 typedef struct IDsDriver IDsDriver,*PIDSDRIVER;
35 DEFINE_GUID(IID_IDsDriverBuffer, 0x8C4233C1l, 0xB4CC, 0x11CE, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
36 typedef struct IDsDriverBuffer IDsDriverBuffer,*PIDSDRIVERBUFFER;
38 DEFINE_GUID(IID_IDsDriverPropertySet, 0x0F6F2E8E0, 0xD842, 0x11D0, 0x8F, 0x75, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA);
39 typedef struct IDsDriverPropertySet IDsDriverPropertySet,*PIDSDRIVERPROPERTYSET;
41 DEFINE_GUID(IID_IDsDriverNotify, 0x00363EF44, 0x3B57, 0x11D3, 0xAC, 0x79, 0x00, 0x10, 0x5A, 0x01, 0x7f, 0xe1);
42 typedef struct IDsDriverNotify IDsDriverNotify,*PIDSDRIVERNOTIFY;
44 DEFINE_GUID(IID_IDsCaptureDriver, 0x03DD10C47, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
45 typedef struct IDsCaptureDriver IDsCaptureDriver,*PIDSCDRIVER;
47 DEFINE_GUID(IID_IDsCaptureDriverBuffer, 0x03DD10C48, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
48 typedef struct IDsCaptureDriverBuffer IDsCaptureDriverBuffer,*PIDSCDRIVERBUFFER;
50 #define DSDDESC_DOMMSYSTEMOPEN 0x00000001
51 #define DSDDESC_DOMMSYSTEMSETFORMAT 0x00000002
52 #define DSDDESC_USESYSTEMMEMORY 0x00000004
53 #define DSDDESC_DONTNEEDPRIMARYLOCK 0x00000008
54 #define DSDDESC_DONTNEEDSECONDARYLOCK 0x00000010
56 #define DSDHEAP_NOHEAP 0
57 #define DSDHEAP_CREATEHEAP 1
58 #define DSDHEAP_USEDIRECTDRAWHEAP 2
59 #define DSDHEAP_PRIVATEHEAP 3
61 typedef struct _DSDRIVERDESC
63 DWORD dwFlags;
64 CHAR szDesc[256];
65 CHAR szDrvName[256];
66 DWORD dnDevNode;
67 WORD wVxdId;
68 WORD wReserved;
69 ULONG ulDeviceNum;
70 DWORD dwHeapType;
71 LPVOID pvDirectDrawHeap;
72 DWORD dwMemStartAddress;
73 DWORD dwMemEndAddress;
74 DWORD dwMemAllocExtra;
75 LPVOID pvReserved1;
76 LPVOID pvReserved2;
77 } DSDRIVERDESC,*PDSDRIVERDESC;
79 typedef struct _DSDRIVERCAPS
81 DWORD dwFlags;
82 DWORD dwMinSecondarySampleRate;
83 DWORD dwMaxSecondarySampleRate;
84 DWORD dwPrimaryBuffers;
85 DWORD dwMaxHwMixingAllBuffers;
86 DWORD dwMaxHwMixingStaticBuffers;
87 DWORD dwMaxHwMixingStreamingBuffers;
88 DWORD dwFreeHwMixingAllBuffers;
89 DWORD dwFreeHwMixingStaticBuffers;
90 DWORD dwFreeHwMixingStreamingBuffers;
91 DWORD dwMaxHw3DAllBuffers;
92 DWORD dwMaxHw3DStaticBuffers;
93 DWORD dwMaxHw3DStreamingBuffers;
94 DWORD dwFreeHw3DAllBuffers;
95 DWORD dwFreeHw3DStaticBuffers;
96 DWORD dwFreeHw3DStreamingBuffers;
97 DWORD dwTotalHwMemBytes;
98 DWORD dwFreeHwMemBytes;
99 DWORD dwMaxContigFreeHwMemBytes;
100 } DSDRIVERCAPS,*PDSDRIVERCAPS;
102 typedef struct _DSVOLUMEPAN
104 DWORD dwTotalLeftAmpFactor;
105 DWORD dwTotalRightAmpFactor;
106 LONG lVolume;
107 DWORD dwVolAmpFactor;
108 LONG lPan;
109 DWORD dwPanLeftAmpFactor;
110 DWORD dwPanRightAmpFactor;
111 } DSVOLUMEPAN,*PDSVOLUMEPAN;
113 typedef union _DSPROPERTY
115 struct {
116 GUID Set;
117 ULONG Id;
118 ULONG Flags;
119 ULONG InstanceId;
120 } DUMMYSTRUCTNAME;
121 ULONGLONG Alignment;
122 } DSPROPERTY,*PDSPROPERTY;
124 typedef struct _DSCDRIVERCAPS
126 DWORD dwSize;
127 DWORD dwFlags;
128 DWORD dwFormats;
129 DWORD dwChannels;
130 } DSCDRIVERCAPS,*PDSCDRIVERCAPS;
132 /*****************************************************************************
133 * IDsDriver interface
135 #define INTERFACE IDsDriver
136 #define IDsDriver_METHODS \
137 IUnknown_METHODS \
138 STDMETHOD(GetDriverDesc)(THIS_ PDSDRIVERDESC pDsDriverDesc) PURE; \
139 STDMETHOD(Open)(THIS) PURE; \
140 STDMETHOD(Close)(THIS) PURE; \
141 STDMETHOD(GetCaps)(THIS_ PDSDRIVERCAPS pDsDrvCaps) PURE; \
142 STDMETHOD(CreateSoundBuffer)(THIS_ LPWAVEFORMATEX pwfx,DWORD dwFlags,DWORD dwCardAddress,LPDWORD pdwcbBufferSize,LPBYTE *ppbBuffer,LPVOID *ppvObj) PURE; \
143 STDMETHOD(DuplicateSoundBuffer)(THIS_ PIDSDRIVERBUFFER pIDsDriverBuffer,LPVOID *ppvObj) PURE;
144 DECLARE_INTERFACE_(IDsDriver,IUnknown) { IDsDriver_METHODS };
145 #undef INTERFACE
147 #ifdef COBJMACROS
148 /*** IUnknown methods ***/
149 #define IDsDriver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
150 #define IDsDriver_AddRef(p) (p)->lpVtbl->AddRef(p)
151 #define IDsDriver_Release(p) (p)->lpVtbl->Release(p)
152 /*** IDsDriver methods ***/
153 #define IDsDriver_GetDriverDesc(p,a) (p)->lpVtbl->GetDriverDesc(p,a)
154 #define IDsDriver_Open(p) (p)->lpVtbl->Open(p)
155 #define IDsDriver_Close(p) (p)->lpVtbl->Close(p)
156 #define IDsDriver_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
157 #define IDsDriver_CreateSoundBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c,d,e,f)
158 #define IDsDriver_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
159 #endif
161 /*****************************************************************************
162 * IDsDriverBuffer interface
164 #define INTERFACE IDsDriverBuffer
165 #define IDsDriverBuffer_METHODS \
166 IUnknown_METHODS \
167 STDMETHOD(Lock)(THIS_ LPVOID *ppvAudio1,LPDWORD pdwLen1,LPVOID *pdwAudio2,LPDWORD pdwLen2,DWORD dwWritePosition,DWORD dwWriteLen,DWORD dwFlags) PURE; \
168 STDMETHOD(Unlock)(THIS_ LPVOID pvAudio1,DWORD dwLen1,LPVOID pvAudio2,DWORD dwLen2) PURE; \
169 STDMETHOD(SetFormat)(THIS_ LPWAVEFORMATEX pwfxToSet) PURE; \
170 STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE; \
171 STDMETHOD(SetVolumePan)(THIS_ PDSVOLUMEPAN pDsVolumePan) PURE; \
172 STDMETHOD(SetPosition)(THIS_ DWORD dwNewPosition) PURE; \
173 STDMETHOD(GetPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor,LPDWORD lpdwCurrentWriteCursor) PURE; \
174 STDMETHOD(Play)(THIS_ DWORD dwReserved1,DWORD dwReserved2,DWORD dwFlags) PURE; \
175 STDMETHOD(Stop)(THIS) PURE;
176 DECLARE_INTERFACE_(IDsDriverBuffer,IUnknown) { IDsDriverBuffer_METHODS };
177 #undef INTERFACE
179 #ifdef COBJMACROS
180 /*** IUnknown methods ***/
181 #define IDsDriverBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
182 #define IDsDriverBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
183 #define IDsDriverBuffer_Release(p) (p)->lpVtbl->Release(p)
184 /*** IDsDriverBuffer methods ***/
185 #define IDsDriverBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
186 #define IDsDriverBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
187 #define IDsDriverBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
188 #define IDsDriverBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
189 #define IDsDriverBuffer_SetVolumePan(p,a) (p)->lpVtbl->SetVolumePan(p,a)
190 #define IDsDriverBuffer_SetPosition(p,a) (p)->lpVtbl->SetPosition(p,a)
191 #define IDsDriverBuffer_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
192 #define IDsDriverBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
193 #define IDsDriverBuffer_Stop(p) (p)->lpVtbl->Stop(p)
194 #endif
196 /*****************************************************************************
197 * IDsDriverPropertySet interface
199 #define INTERFACE IDsDriverPropertySet
200 #define IDsDriverPropertySet_METHODS \
201 IUnknown_METHODS \
202 STDMETHOD(Get)(THIS_ PDSPROPERTY pDsProperty,LPVOID pPropertyParams,ULONG cbPropertyParams,LPVOID pPropertyData,ULONG cbPropertyData,PULONG pcbReturnedData) PURE; \
203 STDMETHOD(Set)(THIS_ PDSPROPERTY pDsProperty,LPVOID pPropertyParams,ULONG cbPropertyParams,LPVOID pPropertyData,ULONG cbPropertyData) PURE; \
204 STDMETHOD(QuerySupport)(THIS_ REFGUID PropertySetId,ULONG PropertyId,PULONG pSupport) PURE;
205 DECLARE_INTERFACE_(IDsDriverPropertySet,IUnknown) { IDsDriverPropertySet_METHODS };
206 #undef INTERFACE
208 #ifdef COBJMACROS
209 /*** IUnknown methods ***/
210 #define IDsDriverPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
211 #define IDsDriverPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p)
212 #define IDsDriverPropertySet_Release(p) (p)->lpVtbl->Release(p)
213 /*** IDsDriverPropertySet methods ***/
214 #define IDsDriverPropertySet_Get(p,a,b,c,d,e,f) (p)->lpVtbl->Get(p,a,b,c,d,e,f)
215 #define IDsDriverPropertySet_Set(p,a,b,c,d,e) (p)->lpVtbl->Set(p,a,b,c,d,e)
216 #define IDsDriverPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c)
217 #endif
219 /* Defined property sets */
220 DEFINE_GUID(DSPROPSETID_DirectSound3DListener, 0x6D047B40, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
221 typedef enum
223 DSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
224 DSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
225 DSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
226 DSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
227 DSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
228 DSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
229 DSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
230 DSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
231 DSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
232 } DSPROPERTY_DIRECTSOUND3DLISTENER;
234 DEFINE_GUID(DSPROPSETID_DirectSound3DBuffer, 0x6D047B41, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
235 typedef enum
237 DSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
238 DSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
239 DSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
240 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
241 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
242 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
243 DSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
244 DSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
245 DSPROPERTY_DIRECTSOUND3DBUFFER_MODE
246 } DSPROPERTY_DIRECTSOUND3DBUFFER;
248 DEFINE_GUID(DSPROPSETID_DirectSoundSpeakerConfig, 0x6D047B42, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
249 typedef enum
251 DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG_SPEAKERCONFIG
252 } DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG;
254 /*****************************************************************************
255 * IDsDriverNotify interface
257 #define INTERFACE IDsDriverNotify
258 #define IDsDriverNotify_METHODS \
259 IUnknown_METHODS \
260 STDMETHOD(SetNotificationPositions)(THIS_ DWORD dwPositionNotifies,LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE;
261 DECLARE_INTERFACE_(IDsDriverNotify,IUnknown) { IDsDriverNotify_METHODS };
262 #undef INTERFACE
264 #ifdef COBJMACROS
265 /*** IUnknown methods ***/
266 #define IDsDriverNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
267 #define IDsDriverNotify_AddRef(p) (p)->lpVtbl->AddRef(p)
268 #define IDsDriverNotify_Release(p) (p)->lpVtbl->Release(p)
269 /*** IDsDriverNotify methods ***/
270 #define IDsDriverNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
271 #endif
273 /*****************************************************************************
274 * IDsCaptureDriver interface
276 #define INTERFACE IDsCaptureDriver
277 #define IDsCaptureDriver_METHODS \
278 IUnknown_METHODS \
279 STDMETHOD(GetDriverDesc)(THIS_ PDSDRIVERDESC pDsDriverDesc) PURE; \
280 STDMETHOD(Open)(THIS) PURE; \
281 STDMETHOD(Close)(THIS) PURE; \
282 STDMETHOD(GetCaps)(THIS_ PDSCDRIVERCAPS pDsDrvCaps) PURE; \
283 STDMETHOD(CreateCaptureBuffer)(THIS_ LPWAVEFORMATEX pwfx,DWORD dwFlags,DWORD dwCardAddress,LPDWORD pdwcbBufferSize,LPBYTE *ppbBuffer,LPVOID *ppvObj) PURE;
284 DECLARE_INTERFACE_(IDsCaptureDriver,IUnknown) { IDsCaptureDriver_METHODS };
285 #undef INTERFACE
287 #ifdef COBJMACROS
288 /*** IUnknown methods ***/
289 #define IDsCaptureDriver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
290 #define IDsCaptureDriver_AddRef(p) (p)->lpVtbl->AddRef(p)
291 #define IDsCaptureDriver_Release(p) (p)->lpVtbl->Release(p)
292 /*** IDsCaptureDriver methods ***/
293 #define IDsCaptureDriver_GetDriverDesc(p,a) (p)->lpVtbl->GetDriverDesc(p,a)
294 #define IDsCaptureDriver_Open(p) (p)->lpVtbl->Open(p)
295 #define IDsCaptureDriver_Close(p) (p)->lpVtbl->Close(p)
296 #define IDsCaptureDriver_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
297 #define IDsCaptureDriver_CreateCaptureBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c,d,e,f)
298 #endif
300 /*****************************************************************************
301 * IDsCaptureDriverBuffer interface
303 #define INTERFACE IDsCaptureDriverBuffer
304 #define IDsCaptureDriverBuffer_METHODS \
305 IUnknown_METHODS \
306 STDMETHOD(Lock)(THIS_ LPVOID *ppvAudio1,LPDWORD pdwLen1,LPVOID *ppvAudio2,LPDWORD pdwLen2,DWORD dwWritePosition,DWORD dwWriteLen,DWORD dwFlags) PURE; \
307 STDMETHOD(Unlock)(THIS_ LPVOID pvAudio1,DWORD dwLen1,LPVOID pvAudio2,DWORD dwLen2) PURE; \
308 STDMETHOD(SetFormat)(THIS_ LPWAVEFORMATEX pwfxToSet) PURE; \
309 STDMETHOD(GetPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor,LPDWORD lpdwCurrentWriteCursor) PURE; \
310 STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE; \
311 STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE; \
312 STDMETHOD(Stop)(THIS) PURE;
313 DECLARE_INTERFACE_(IDsCaptureDriverBuffer,IUnknown) { IDsCaptureDriverBuffer_METHODS };
314 #undef INTERFACE
316 #ifdef COBJMACROS
317 /*** IUnknown methods ***/
318 #define IDsCaptureDriverBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
319 #define IDsCaptureDriverBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
320 #define IDsCaptureDriverBuffer_Release(p) (p)->lpVtbl->Release(p)
321 /*** IDsCaptureDriverBuffer methods ***/
322 #define IDsCaptureDriverBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
323 #define IDsCaptureDriverBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
324 #define IDsCaptureDriverBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
325 #define IDsCaptureDriverBuffer_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
326 #define IDsCaptureDriverBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
327 #define IDsCaptureDriverBuffer_Start(p,a) (p)->lpVtbl->Start(p,a)
328 #define IDsCaptureDriverBuffer_Stop(p) (p)->lpVtbl->Stop(p)
329 #endif
331 #ifdef __cplusplus
332 } /* extern "C" */
333 #endif
335 #endif /* __WINE_DSDRIVER_H */