diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c index 40538e42f7e..02caf316330 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c @@ -920,16 +920,8 @@ static HRESULT WINAPI DSCF_CreateInstance( IsEqualGUID( &IID_IDirectSoundCapture8, riid ) ) { return DirectSoundCaptureCreate8(0,(LPDIRECTSOUNDCAPTURE8*)ppobj,pOuter); } - /* DxDiag tries to create this */ if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) { - FIXME("(%p,%p,%s,%p) IID_IKsPropertySet not implemented\n", - This,pOuter,debugstr_guid(riid),ppobj); - /* FIXME: what is DxDiag looking for here? */ -#if 0 return IKsPropertySetImpl_Create(0,(IKsPropertySetImpl**)ppobj); -#else - return E_NOINTERFACE; -#endif } FIXME("(%p,%p,%s,%p) Interface not found!\n",This,pOuter,debugstr_guid(riid),ppobj); diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c index f4d87568ac2..c050c1d4171 100644 --- a/dlls/dsound/propset.c +++ b/dlls/dsound/propset.c @@ -38,12 +38,14 @@ #include "winerror.h" #include "mmsystem.h" #include "winternl.h" +#include "winnls.h" #include "mmddk.h" #include "wine/windef16.h" #include "wine/debug.h" #include "dsound.h" #include "dsdriver.h" #include "dsound_private.h" +#include "dsconf.h" WINE_DEFAULT_DEBUG_CHANNEL(dsound); @@ -83,6 +85,349 @@ static ULONG WINAPI IKsPropertySetImpl_Release(LPKSPROPERTYSET iface) { return 0; } +static HRESULT WINAPI DSPROPERTY_WaveDeviceMappingA( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA ppd; + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) not implemented!\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + + ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA) pPropData; + + if (!ppd) { + WARN("invalid parameter: pPropData\n"); + return DSERR_INVALIDPARAM; + } + + FIXME("DeviceName=%s\n",ppd->DeviceName); + FIXME("DataFlow=%s\n", + ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "DIRECTSOUNDDEVICE_DATAFLOW_RENDER" : + ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? "DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE" : "UNKNOWN"); + + /* FIXME: match the name to a wave device somehow. */ + ppd->DeviceId = GUID_NULL; + + if (pcbReturned) { + *pcbReturned = cbPropData; + FIXME("*pcbReturned=%ld\n", *pcbReturned); + } + + return S_OK; +} + +static HRESULT WINAPI DSPROPERTY_WaveDeviceMappingW( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd; + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) not implemented!\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + + ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA) pPropData; + + if (!ppd) { + WARN("invalid parameter: pPropData\n"); + return DSERR_INVALIDPARAM; + } + + FIXME("DeviceName=%s\n",debugstr_w(ppd->DeviceName)); + FIXME("DataFlow=%s\n", + ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "DIRECTSOUNDDEVICE_DATAFLOW_RENDER" : + ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? "DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE" : "UNKNOWN"); + + /* FIXME: match the name to a wave device somehow. */ + ppd->DeviceId = GUID_NULL; + + if (pcbReturned) { + *pcbReturned = cbPropData; + FIXME("*pcbReturned=%ld\n", *pcbReturned); + } + + return S_OK; +} + +static HRESULT WINAPI DSPROPERTY_Description1( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + HRESULT err; + GUID guid, dev_guid; + PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA ppd; + TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + + ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA) pPropData; + + if (!ppd) { + WARN("invalid parameter: pPropData\n"); + return DSERR_INVALIDPARAM; + } + + TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId)); + if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) { + /* default device of type specified by ppd->DataFlow */ + if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) { + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); + } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) { + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); + } else { + TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow); + } + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; + } else { + GetDeviceID(&ppd->DeviceId, &dev_guid); + + if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) || + IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoicePlayback) ) { + ULONG wod; + int wodn; + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); + ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER; + wodn = waveOutGetNumDevs(); + for (wod = 0; wod < wodn; wod++) { + err = mmErr(waveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDGUID,(DWORD)(&guid),0)); + if (err == DS_OK) { + if (IsEqualGUID( &dev_guid, &guid) ) { + DSDRIVERDESC desc; + ppd->WaveDeviceId = wod; + ppd->Devnode = wod; + err = mmErr(waveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD)&(desc),0)); + if (err == DS_OK) { + strncpy(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA) - 1); + strncpy(ppd->ModuleA, desc.szDrvName, sizeof(ppd->ModuleA) - 1); + MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, desc.szDrvName, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); + break; + } else { + WARN("waveOutMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else { + WARN("waveOutMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) || + IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) { + ULONG wid; + int widn; + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); + ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE; + widn = waveInGetNumDevs(); + for (wid = 0; wid < widn; wid++) { + err = mmErr(waveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDGUID,(DWORD)(&guid),0)); + if (err == DS_OK) { + if (IsEqualGUID( &dev_guid, &guid) ) { + DSDRIVERDESC desc; + ppd->WaveDeviceId = wid; + ppd->Devnode = wid; + err = mmErr(waveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD)&(desc),0)); + if (err == DS_OK) { + strncpy(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA) - 1); + strncpy(ppd->ModuleA, desc.szDrvName, sizeof(ppd->ModuleA) - 1); + MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, desc.szDrvName, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); + break; + } else { + WARN("waveInMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + break; + } + } else { + WARN("waveInMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else { + FIXME("DeviceId=Unknown\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + + ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED; + + if (pcbReturned) { + *pcbReturned = cbPropData; + TRACE("*pcbReturned=%ld\n", *pcbReturned); + } + + return S_OK; +} + +static HRESULT WINAPI DSPROPERTY_DescriptionA( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; +} + +static HRESULT WINAPI DSPROPERTY_DescriptionW( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA) pPropData; + HRESULT err; + GUID guid, dev_guid; + TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + + TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId)); + if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) { + /* default device of type specified by ppd->DataFlow */ + if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) { + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); + } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) { + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); + } else { + TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow); + } + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; + } else { + GetDeviceID(&ppd->DeviceId, &dev_guid); + + if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) || + IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoicePlayback) ) { + ULONG wod; + int wodn; + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); + ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER; + wodn = waveOutGetNumDevs(); + for (wod = 0; wod < wodn; wod++) { + err = mmErr(waveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDGUID,(DWORD)(&guid),0)); + if (err == DS_OK) { + if (IsEqualGUID( &dev_guid, &guid) ) { + DSDRIVERDESC desc; + ppd->WaveDeviceId = wod; + err = mmErr(waveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD)&(desc),0)); + if (err == DS_OK) { + /* FIXME: this is a memory leak */ + WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200); + WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200); + WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200); + + MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100 ); + MultiByteToWideChar( CP_ACP, 0, desc.szDrvName, -1, wModule, 0x100 ); + MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 ); + + ppd->Description = wDescription; + ppd->Module = wModule; + ppd->Interface = wInterface; + break; + } else { + WARN("waveOutMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else { + WARN("waveOutMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else if (IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) || + IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) { + ULONG wid; + int widn; + TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); + ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE; + widn = waveInGetNumDevs(); + for (wid = 0; wid < widn; wid++) { + err = mmErr(waveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDGUID,(DWORD)(&guid),0)); + if (err == DS_OK) { + if (IsEqualGUID( &dev_guid, &guid) ) { + DSDRIVERDESC desc; + ppd->WaveDeviceId = wid; + err = mmErr(waveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD)&(desc),0)); + if (err == DS_OK) { + /* FIXME: this is a memory leak */ + WCHAR * wDescription = HeapAlloc(GetProcessHeap(),0,0x200); + WCHAR * wModule = HeapAlloc(GetProcessHeap(),0,0x200); + WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,0x200); + + MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, wDescription, 0x100 ); + MultiByteToWideChar( CP_ACP, 0, desc.szDrvName, -1, wModule, 0x100 ); + MultiByteToWideChar( CP_ACP, 0, "Interface", -1, wInterface, 0x100 ); + + ppd->Description = wDescription; + ppd->Module = wModule; + ppd->Interface = wInterface; + break; + } else { + WARN("waveInMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + break; + } + } else { + WARN("waveInMessage failed\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + } else { + FIXME("DeviceId=Unknown\n"); + return E_PROP_ID_UNSUPPORTED; + } + } + + ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED; + if (pcbReturned) { + *pcbReturned = cbPropData; + TRACE("*pcbReturned=%ld\n", *pcbReturned); + } + return S_OK; +} + +static HRESULT WINAPI DSPROPERTY_Enumerate1( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; +} + +static HRESULT WINAPI DSPROPERTY_EnumerateA( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; +} + +static HRESULT WINAPI DSPROPERTY_EnumerateW( + REFGUID guidPropSet, + LPVOID pPropData, + ULONG cbPropData, + PULONG pcbReturned ) +{ + FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); + return E_PROP_ID_UNSUPPORTED; +} + static HRESULT WINAPI IKsPropertySetImpl_Get(LPKSPROPERTYSET iface, REFGUID guidPropSet, ULONG dwPropID, LPVOID pInstanceData, ULONG cbInstanceData, @@ -90,8 +435,40 @@ static HRESULT WINAPI IKsPropertySetImpl_Get(LPKSPROPERTYSET iface, PULONG pcbReturned ) { ICOM_THIS(IKsPropertySetImpl,iface); + TRACE("(iface=%p,guidPropSet=%s,dwPropID=%ld,pInstanceData=%p,cbInstanceData=%ld,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", + This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned); + + if ( IsEqualGUID( &DSPROPSETID_DirectSoundDevice, guidPropSet) ) { + switch (dwPropID) { + case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: + return DSPROPERTY_WaveDeviceMappingA(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: + return DSPROPERTY_Description1(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: + return DSPROPERTY_Enumerate1(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: + return DSPROPERTY_WaveDeviceMappingW(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: + return DSPROPERTY_DescriptionA(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: + return DSPROPERTY_DescriptionW(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: + return DSPROPERTY_EnumerateA(guidPropSet,pPropData,cbPropData,pcbReturned); + case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: + return DSPROPERTY_EnumerateW(guidPropSet,pPropData,cbPropData,pcbReturned); + default: + FIXME("unsupported ID: %ld\n",dwPropID); + break; + } + } else { + FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet)); + } + + if (pcbReturned) { + *pcbReturned = 0; + FIXME("*pcbReturned=%ld\n", *pcbReturned); + } - FIXME("(%p,%s,%ld,%p,%ld,%p,%ld,%p), stub!\n",This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned); return E_PROP_ID_UNSUPPORTED; } diff --git a/include/Makefile.in b/include/Makefile.in index 39cd9a9aada..070f20d5783 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -54,6 +54,7 @@ WINDOWS_INCLUDES = \ docobj.h \ dplay.h \ dplobby.h \ + dsconf.h \ dsdriver.h \ dshow.h \ dsound.h \ diff --git a/include/dsconf.h b/include/dsconf.h new file mode 100644 index 00000000000..2df46d685bb --- /dev/null +++ b/include/dsconf.h @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2003 Robert Reif + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_DSCONF_H +#define __WINE_DSCONF_H + +#include "dsound.h" + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +/***************************************************************************** + * Predeclare the interfaces + */ +DEFINE_GUID(CLSID_DirectSoundPrivate, 0x11ab3ec0,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca); + +DEFINE_GUID(DSPROPSETID_DirectSoundDevice, 0x84624f82,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca); + +typedef enum +{ + DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A = 1, + DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 = 2, + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 = 3, + DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W = 4, + DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A = 5, + DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W = 6, + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A = 7, + DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W = 8, +} DSPROPERTY_DIRECTSOUNDDEVICE; + +#ifdef UNICODE +#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W +#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W +#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W +#else +#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A +#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A +#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A +#endif + +typedef enum +{ + DIRECTSOUNDDEVICE_TYPE_EMULATED, + DIRECTSOUNDDEVICE_TYPE_VXD, + DIRECTSOUNDDEVICE_TYPE_WDM +} DIRECTSOUNDDEVICE_TYPE; + +typedef enum +{ + DIRECTSOUNDDEVICE_DATAFLOW_RENDER, + DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE +} DIRECTSOUNDDEVICE_DATAFLOW; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA +{ + LPSTR DeviceName; + DIRECTSOUNDDEVICE_DATAFLOW DataFlow; + GUID DeviceId; +} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA +{ + LPWSTR DeviceName; + DIRECTSOUNDDEVICE_DATAFLOW DataFlow; + GUID DeviceId; +} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA; + +#ifdef UNICODE +#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA +#else +#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA +#endif + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA +{ + GUID DeviceId; + CHAR DescriptionA[0x100]; + WCHAR DescriptionW[0x100]; + CHAR ModuleA[MAX_PATH]; + WCHAR ModuleW[MAX_PATH]; + DIRECTSOUNDDEVICE_TYPE Type; + DIRECTSOUNDDEVICE_DATAFLOW DataFlow; + ULONG WaveDeviceId; + ULONG Devnode; +} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA +{ + DIRECTSOUNDDEVICE_TYPE Type; + DIRECTSOUNDDEVICE_DATAFLOW DataFlow; + GUID DeviceId; + LPSTR Description; + LPSTR Module; + LPSTR Interface; + ULONG WaveDeviceId; +} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA +{ + DIRECTSOUNDDEVICE_TYPE Type; + DIRECTSOUNDDEVICE_DATAFLOW DataFlow; + GUID DeviceId; + LPWSTR Description; + LPWSTR Module; + LPWSTR Interface; + ULONG WaveDeviceId; +} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA; + +#ifdef UNICODE +#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA +#else +#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA +#endif + +typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, LPVOID); +typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, LPVOID); +typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, LPVOID); + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA +{ + LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1 Callback; + LPVOID Context; +} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA +{ + LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA Callback; + LPVOID Context; +} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA; + +typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA +{ + LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW Callback; + LPVOID Context; +} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA; + +#ifdef UNICODE +#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA +#else +#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA +#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_DSCONF_H */ diff --git a/libs/uuid/dxguid.c b/libs/uuid/dxguid.c index 3f4ff8aef90..3e2d5ab6168 100644 --- a/libs/uuid/dxguid.c +++ b/libs/uuid/dxguid.c @@ -34,6 +34,7 @@ #include "ddraw.h" #include "dsound.h" #include "dsdriver.h" +#include "dsconf.h" #include "dmusicc.h" #include "dmusici.h" #include "dmusics.h"