[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