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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #ifndef __WINE_DSDRIVER_H
23 #define __WINE_DSDRIVER_H
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
*PIDSDRIVER
;
35 DEFINE_GUID(IID_IDsDriverBuffer
, 0x8C4233C1l
, 0xB4CC, 0x11CE, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
36 typedef struct IDsDriverBuffer
*PIDSDRIVERBUFFER
;
38 DEFINE_GUID(IID_IDsDriverPropertySet
, 0x0F6F2E8E0, 0xD842, 0x11D0, 0x8F, 0x75, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA);
39 typedef struct IDsDriverPropertySet
*PIDSDRIVERPROPERTYSET
;
41 DEFINE_GUID(IID_IDsDriverNotify
, 0x00363EF44, 0x3B57, 0x11D3, 0xAC, 0x79, 0x00, 0x10, 0x5A, 0x01, 0x7f, 0xe1);
42 typedef struct IDsDriverNotify
*PIDSDRIVERNOTIFY
;
44 DEFINE_GUID(IID_IDsCaptureDriver
, 0x03DD10C47, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
45 typedef struct IDsCaptureDriver
*PIDSCDRIVER
;
47 DEFINE_GUID(IID_IDsCaptureDriverBuffer
, 0x03DD10C48, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
48 typedef struct 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
55 #define DSDDESC_DONTNEEDWRITELEAD 0x00000020
57 #define DSDHEAP_NOHEAP 0
58 #define DSDHEAP_CREATEHEAP 1
59 #define DSDHEAP_USEDIRECTDRAWHEAP 2
60 #define DSDHEAP_PRIVATEHEAP 3
62 typedef struct _DSDRIVERDESC
72 LPVOID pvDirectDrawHeap
;
73 DWORD dwMemStartAddress
;
74 DWORD dwMemEndAddress
;
75 DWORD dwMemAllocExtra
;
78 } DSDRIVERDESC
,*PDSDRIVERDESC
;
80 typedef struct _DSDRIVERCAPS
83 DWORD dwMinSecondarySampleRate
;
84 DWORD dwMaxSecondarySampleRate
;
85 DWORD dwPrimaryBuffers
;
86 DWORD dwMaxHwMixingAllBuffers
;
87 DWORD dwMaxHwMixingStaticBuffers
;
88 DWORD dwMaxHwMixingStreamingBuffers
;
89 DWORD dwFreeHwMixingAllBuffers
;
90 DWORD dwFreeHwMixingStaticBuffers
;
91 DWORD dwFreeHwMixingStreamingBuffers
;
92 DWORD dwMaxHw3DAllBuffers
;
93 DWORD dwMaxHw3DStaticBuffers
;
94 DWORD dwMaxHw3DStreamingBuffers
;
95 DWORD dwFreeHw3DAllBuffers
;
96 DWORD dwFreeHw3DStaticBuffers
;
97 DWORD dwFreeHw3DStreamingBuffers
;
98 DWORD dwTotalHwMemBytes
;
99 DWORD dwFreeHwMemBytes
;
100 DWORD dwMaxContigFreeHwMemBytes
;
101 } DSDRIVERCAPS
,*PDSDRIVERCAPS
;
103 typedef struct _DSVOLUMEPAN
105 DWORD dwTotalLeftAmpFactor
;
106 DWORD dwTotalRightAmpFactor
;
108 DWORD dwVolAmpFactor
;
110 DWORD dwPanLeftAmpFactor
;
111 DWORD dwPanRightAmpFactor
;
112 } DSVOLUMEPAN
,*PDSVOLUMEPAN
;
114 typedef union _DSPROPERTY
123 } DSPROPERTY
,*PDSPROPERTY
;
125 typedef struct _DSCDRIVERCAPS
131 } DSCDRIVERCAPS
,*PDSCDRIVERCAPS
;
133 /*****************************************************************************
134 * IDsDriver interface
136 #define INTERFACE IDsDriver
137 DECLARE_INTERFACE_(IDsDriver
,IUnknown
)
139 /*** IUnknown methods ***/
140 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
141 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
142 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
143 /*** IDsDriver methods ***/
144 STDMETHOD(GetDriverDesc
)(THIS_ PDSDRIVERDESC pDsDriverDesc
) PURE
;
145 STDMETHOD(Open
)(THIS
) PURE
;
146 STDMETHOD(Close
)(THIS
) PURE
;
147 STDMETHOD(GetCaps
)(THIS_ PDSDRIVERCAPS pDsDrvCaps
) PURE
;
148 STDMETHOD(CreateSoundBuffer
)(THIS_ LPWAVEFORMATEX pwfx
,DWORD dwFlags
,DWORD dwCardAddress
,LPDWORD pdwcbBufferSize
,LPBYTE
*ppbBuffer
,LPVOID
*ppvObj
) PURE
;
149 STDMETHOD(DuplicateSoundBuffer
)(THIS_ PIDSDRIVERBUFFER pIDsDriverBuffer
,LPVOID
*ppvObj
) PURE
;
153 #if !defined (__cplusplus) || defined(CINTERFACE)
154 /*** IUnknown methods ***/
155 #define IDsDriver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
156 #define IDsDriver_AddRef(p) (p)->lpVtbl->AddRef(p)
157 #define IDsDriver_Release(p) (p)->lpVtbl->Release(p)
158 /*** IDsDriver methods ***/
159 #define IDsDriver_GetDriverDesc(p,a) (p)->lpVtbl->GetDriverDesc(p,a)
160 #define IDsDriver_Open(p) (p)->lpVtbl->Open(p)
161 #define IDsDriver_Close(p) (p)->lpVtbl->Close(p)
162 #define IDsDriver_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
163 #define IDsDriver_CreateSoundBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c,d,e,f)
164 #define IDsDriver_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
167 /*****************************************************************************
168 * IDsDriverBuffer interface
170 #define INTERFACE IDsDriverBuffer
171 DECLARE_INTERFACE_(IDsDriverBuffer
,IUnknown
)
173 /*** IUnknown methods ***/
174 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
175 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
176 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
177 /*** IDsDriverBuffer methods ***/
178 STDMETHOD(Lock
)(THIS_ LPVOID
*ppvAudio1
,LPDWORD pdwLen1
,LPVOID
*pdwAudio2
,LPDWORD pdwLen2
,DWORD dwWritePosition
,DWORD dwWriteLen
,DWORD dwFlags
) PURE
;
179 STDMETHOD(Unlock
)(THIS_ LPVOID pvAudio1
,DWORD dwLen1
,LPVOID pvAudio2
,DWORD dwLen2
) PURE
;
180 STDMETHOD(SetFormat
)(THIS_ LPWAVEFORMATEX pwfxToSet
) PURE
;
181 STDMETHOD(SetFrequency
)(THIS_ DWORD dwFrequency
) PURE
;
182 STDMETHOD(SetVolumePan
)(THIS_ PDSVOLUMEPAN pDsVolumePan
) PURE
;
183 STDMETHOD(SetPosition
)(THIS_ DWORD dwNewPosition
) PURE
;
184 STDMETHOD(GetPosition
)(THIS_ LPDWORD lpdwCurrentPlayCursor
,LPDWORD lpdwCurrentWriteCursor
) PURE
;
185 STDMETHOD(Play
)(THIS_ DWORD dwReserved1
,DWORD dwReserved2
,DWORD dwFlags
) PURE
;
186 STDMETHOD(Stop
)(THIS
) PURE
;
190 #if !defined (__cplusplus) || defined(CINTERFACE)
191 /*** IUnknown methods ***/
192 #define IDsDriverBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
193 #define IDsDriverBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
194 #define IDsDriverBuffer_Release(p) (p)->lpVtbl->Release(p)
195 /*** IDsDriverBuffer methods ***/
196 #define IDsDriverBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
197 #define IDsDriverBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
198 #define IDsDriverBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
199 #define IDsDriverBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
200 #define IDsDriverBuffer_SetVolumePan(p,a) (p)->lpVtbl->SetVolumePan(p,a)
201 #define IDsDriverBuffer_SetPosition(p,a) (p)->lpVtbl->SetPosition(p,a)
202 #define IDsDriverBuffer_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
203 #define IDsDriverBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
204 #define IDsDriverBuffer_Stop(p) (p)->lpVtbl->Stop(p)
207 /*****************************************************************************
208 * IDsDriverPropertySet interface
210 #define INTERFACE IDsDriverPropertySet
211 DECLARE_INTERFACE_(IDsDriverPropertySet
,IUnknown
)
213 /*** IUnknown methods ***/
214 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
215 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
216 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
217 /*** IDsDriverPropertySet methods ***/
218 STDMETHOD(Get
)(THIS_ PDSPROPERTY pDsProperty
,LPVOID pPropertyParams
,ULONG cbPropertyParams
,LPVOID pPropertyData
,ULONG cbPropertyData
,PULONG pcbReturnedData
) PURE
;
219 STDMETHOD(Set
)(THIS_ PDSPROPERTY pDsProperty
,LPVOID pPropertyParams
,ULONG cbPropertyParams
,LPVOID pPropertyData
,ULONG cbPropertyData
) PURE
;
220 STDMETHOD(QuerySupport
)(THIS_ REFGUID PropertySetId
,ULONG PropertyId
,PULONG pSupport
) PURE
;
224 #if !defined (__cplusplus) || defined(CINTERFACE)
225 /*** IUnknown methods ***/
226 #define IDsDriverPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
227 #define IDsDriverPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p)
228 #define IDsDriverPropertySet_Release(p) (p)->lpVtbl->Release(p)
229 /*** IDsDriverPropertySet methods ***/
230 #define IDsDriverPropertySet_Get(p,a,b,c,d,e,f) (p)->lpVtbl->Get(p,a,b,c,d,e,f)
231 #define IDsDriverPropertySet_Set(p,a,b,c,d,e) (p)->lpVtbl->Set(p,a,b,c,d,e)
232 #define IDsDriverPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c)
235 /* Defined property sets */
236 DEFINE_GUID(DSPROPSETID_DirectSound3DListener
, 0x6D047B40, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
239 DSPROPERTY_DIRECTSOUND3DLISTENER_ALL
,
240 DSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
,
241 DSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
,
242 DSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
,
243 DSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
,
244 DSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
,
245 DSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
,
246 DSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
,
247 DSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
248 } DSPROPERTY_DIRECTSOUND3DLISTENER
;
250 DEFINE_GUID(DSPROPSETID_DirectSound3DBuffer
, 0x6D047B41, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
253 DSPROPERTY_DIRECTSOUND3DBUFFER_ALL
,
254 DSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
,
255 DSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
,
256 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
,
257 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
,
258 DSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
,
259 DSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
,
260 DSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
,
261 DSPROPERTY_DIRECTSOUND3DBUFFER_MODE
262 } DSPROPERTY_DIRECTSOUND3DBUFFER
;
264 DEFINE_GUID(DSPROPSETID_DirectSoundSpeakerConfig
, 0x6D047B42, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
267 DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG_SPEAKERCONFIG
268 } DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG
;
270 /*****************************************************************************
271 * IDsDriverNotify interface
273 #define INTERFACE IDsDriverNotify
274 DECLARE_INTERFACE_(IDsDriverNotify
,IUnknown
)
276 /*** IUnknown methods ***/
277 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
278 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
279 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
280 /*** IDsDriverNotify methods ***/
281 STDMETHOD(SetNotificationPositions
)(THIS_ DWORD dwPositionNotifies
,LPCDSBPOSITIONNOTIFY pcPositionNotifies
) PURE
;
285 #if !defined (__cplusplus) || defined(CINTERFACE)
286 /*** IUnknown methods ***/
287 #define IDsDriverNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
288 #define IDsDriverNotify_AddRef(p) (p)->lpVtbl->AddRef(p)
289 #define IDsDriverNotify_Release(p) (p)->lpVtbl->Release(p)
290 /*** IDsDriverNotify methods ***/
291 #define IDsDriverNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
294 /*****************************************************************************
295 * IDsCaptureDriver interface
297 #define INTERFACE IDsCaptureDriver
298 DECLARE_INTERFACE_(IDsCaptureDriver
,IUnknown
)
300 /*** IUnknown methods ***/
301 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
302 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
303 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
304 /*** IDsCaptureDriver methods ***/
305 STDMETHOD(GetDriverDesc
)(THIS_ PDSDRIVERDESC pDsDriverDesc
) PURE
;
306 STDMETHOD(Open
)(THIS
) PURE
;
307 STDMETHOD(Close
)(THIS
) PURE
;
308 STDMETHOD(GetCaps
)(THIS_ PDSCDRIVERCAPS pDsDrvCaps
) PURE
;
309 STDMETHOD(CreateCaptureBuffer
)(THIS_ LPWAVEFORMATEX pwfx
,DWORD dwFlags
,DWORD dwCardAddress
,LPDWORD pdwcbBufferSize
,LPBYTE
*ppbBuffer
,LPVOID
*ppvObj
) PURE
;
313 #if !defined (__cplusplus) || defined(CINTERFACE)
314 /*** IUnknown methods ***/
315 #define IDsCaptureDriver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
316 #define IDsCaptureDriver_AddRef(p) (p)->lpVtbl->AddRef(p)
317 #define IDsCaptureDriver_Release(p) (p)->lpVtbl->Release(p)
318 /*** IDsCaptureDriver methods ***/
319 #define IDsCaptureDriver_GetDriverDesc(p,a) (p)->lpVtbl->GetDriverDesc(p,a)
320 #define IDsCaptureDriver_Open(p) (p)->lpVtbl->Open(p)
321 #define IDsCaptureDriver_Close(p) (p)->lpVtbl->Close(p)
322 #define IDsCaptureDriver_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
323 #define IDsCaptureDriver_CreateCaptureBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c,d,e,f)
326 /*****************************************************************************
327 * IDsCaptureDriverBuffer interface
329 #define INTERFACE IDsCaptureDriverBuffer
330 DECLARE_INTERFACE_(IDsCaptureDriverBuffer
,IUnknown
)
332 /*** IUnknown methods ***/
333 STDMETHOD_(HRESULT
,QueryInterface
)(THIS_ REFIID riid
, void** ppvObject
) PURE
;
334 STDMETHOD_(ULONG
,AddRef
)(THIS
) PURE
;
335 STDMETHOD_(ULONG
,Release
)(THIS
) PURE
;
336 /*** IDsCaptureDriverBuffer methods ***/
337 STDMETHOD(Lock
)(THIS_ LPVOID
*ppvAudio1
,LPDWORD pdwLen1
,LPVOID
*ppvAudio2
,LPDWORD pdwLen2
,DWORD dwWritePosition
,DWORD dwWriteLen
,DWORD dwFlags
) PURE
;
338 STDMETHOD(Unlock
)(THIS_ LPVOID pvAudio1
,DWORD dwLen1
,LPVOID pvAudio2
,DWORD dwLen2
) PURE
;
339 STDMETHOD(SetFormat
)(THIS_ LPWAVEFORMATEX pwfxToSet
) PURE
;
340 STDMETHOD(GetPosition
)(THIS_ LPDWORD lpdwCurrentPlayCursor
,LPDWORD lpdwCurrentWriteCursor
) PURE
;
341 STDMETHOD(GetStatus
)(THIS_ LPDWORD lpdwStatus
) PURE
;
342 STDMETHOD(Start
)(THIS_ DWORD dwFlags
) PURE
;
343 STDMETHOD(Stop
)(THIS
) PURE
;
347 #if !defined (__cplusplus) || defined(CINTERFACE)
348 /*** IUnknown methods ***/
349 #define IDsCaptureDriverBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
350 #define IDsCaptureDriverBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
351 #define IDsCaptureDriverBuffer_Release(p) (p)->lpVtbl->Release(p)
352 /*** IDsCaptureDriverBuffer methods ***/
353 #define IDsCaptureDriverBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
354 #define IDsCaptureDriverBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
355 #define IDsCaptureDriverBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
356 #define IDsCaptureDriverBuffer_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
357 #define IDsCaptureDriverBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
358 #define IDsCaptureDriverBuffer_Start(p,a) (p)->lpVtbl->Start(p,a)
359 #define IDsCaptureDriverBuffer_Stop(p) (p)->lpVtbl->Stop(p)
366 #endif /* __WINE_DSDRIVER_H */