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 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 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 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 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 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 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