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