[DSOUND] property set callback type fix
Robert Reif
reif at earthlink.net
Mon May 2 02:30:43 CDT 2005
Set driver type properly.
-------------- next part --------------
Index: dlls/dsound/propset.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/propset.c,v
retrieving revision 1.38
diff -u -p -r1.38 propset.c
--- dlls/dsound/propset.c 13 Apr 2005 14:39:49 -0000 1.38
+++ dlls/dsound/propset.c 2 May 2005 07:26:31 -0000
@@ -1063,6 +1063,7 @@ static HRESULT WINAPI DSPROPERTY_Enumera
for (wod = 0; wod < devs; ++wod) {
err = mmErr(waveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD)&desc,0));
if (err == DS_OK) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
data.WaveDeviceId = wod;
@@ -1073,6 +1074,13 @@ static HRESULT WINAPI DSPROPERTY_Enumera
MultiByteToWideChar( CP_ACP, 0, data.DescriptionA, -1, data.DescriptionW, sizeof(data.DescriptionW) );
MultiByteToWideChar( CP_ACP, 0, data.ModuleA, -1, data.ModuleW, sizeof(data.ModuleW) );
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
@@ -1082,16 +1090,24 @@ static HRESULT WINAPI DSPROPERTY_Enumera
for (wid = 0; wid < devs; ++wid) {
err = mmErr(waveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD)&desc,0));
if (err == DS_OK) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
- data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
- data.WaveDeviceId = wod;
- data.DeviceId = DSOUND_renderer_guids[wod];
+ data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
+ data.WaveDeviceId = wid;
+ data.DeviceId = DSOUND_capture_guids[wid];
lstrcpynA(data.DescriptionA, desc.szDesc, sizeof(data.DescriptionA));
lstrcpynA(data.ModuleA, desc.szDrvname, sizeof(data.ModuleA));
MultiByteToWideChar( CP_ACP, 0, data.DescriptionA, -1, data.DescriptionW, sizeof(data.DescriptionW) );
MultiByteToWideChar( CP_ACP, 0, data.ModuleA, -1, data.ModuleW, sizeof(data.ModuleW) );
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveInMessage((HWAVEIN)wid, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
@@ -1143,6 +1159,7 @@ static HRESULT WINAPI DSPROPERTY_Enumera
if (err == DS_OK) {
CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,size/sizeof(WCHAR));
if (szInterface) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
data.WaveDeviceId = wod;
@@ -1152,6 +1169,13 @@ static HRESULT WINAPI DSPROPERTY_Enumera
WideCharToMultiByte( CP_ACP, 0, nameW, size/sizeof(WCHAR), szInterface, size/sizeof(WCHAR), NULL, NULL );
data.Interface = szInterface;
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
@@ -1176,6 +1200,7 @@ static HRESULT WINAPI DSPROPERTY_Enumera
if (err == DS_OK) {
CHAR * szInterface = HeapAlloc(GetProcessHeap(),0,size/sizeof(WCHAR));
if (szInterface) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
data.WaveDeviceId = wid;
@@ -1185,6 +1210,13 @@ static HRESULT WINAPI DSPROPERTY_Enumera
WideCharToMultiByte( CP_ACP, 0, nameW, size/sizeof(WCHAR), szInterface, size/sizeof(WCHAR), NULL, NULL );
data.Interface = szInterface;
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveInMessage((HWAVEIN)wid, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
@@ -1243,6 +1275,7 @@ static HRESULT WINAPI DSPROPERTY_Enumera
if (wInterface) {
err = mmErr(waveOutMessage((HWAVEOUT)wod, DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wInterface, size));
if (err == DS_OK) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER;
data.WaveDeviceId = wod;
@@ -1255,6 +1288,13 @@ static HRESULT WINAPI DSPROPERTY_Enumera
data.Module = wModule;
data.Interface = wInterface;
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
@@ -1279,8 +1319,9 @@ static HRESULT WINAPI DSPROPERTY_Enumera
if (err == DS_OK) {
WCHAR * wInterface = HeapAlloc(GetProcessHeap(),0,size);
if (wInterface) {
- err = mmErr(waveInMessage((HWAVEIN)wod, DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wInterface, size));
+ err = mmErr(waveInMessage((HWAVEIN)wid, DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wInterface, size));
if (err == DS_OK) {
+ PIDSCDRIVER drv;
ZeroMemory(&data, sizeof(data));
data.DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE;
data.WaveDeviceId = wid;
@@ -1292,6 +1333,13 @@ static HRESULT WINAPI DSPROPERTY_Enumera
data.Description = wDescription;
data.Module = wModule;
data.Interface = wInterface;
+ data.Type = DIRECTSOUNDDEVICE_TYPE_EMULATED;
+ err = mmErr(waveInMessage((HWAVEIN)wid, DRV_QUERYDSOUNDIFACE, (DWORD)&drv, 0));
+ if (err == DS_OK && drv)
+ data.Type = DIRECTSOUNDDEVICE_TYPE_VXD;
+ else
+ WARN("waveInMessage(DRV_QUERYDSOUNDIFACE) failed\n");
+
TRACE("calling Callback(%p,%p)\n", &data, ppd->Context);
(ppd->Callback)(&data, ppd->Context);
}
More information about the wine-patches
mailing list