Maarten Lankhorst : dsound: Implement DSPROPERTY_WaveDeviceMappingA on top of *W.

Alexandre Julliard julliard at winehq.org
Thu Dec 10 10:01:00 CST 2009


Module: wine
Branch: master
Commit: 0d34e5c6a42b17b77b76d52c8279b5e58909163c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0d34e5c6a42b17b77b76d52c8279b5e58909163c

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Wed Dec  9 16:57:58 2009 +0100

dsound: Implement DSPROPERTY_WaveDeviceMappingA on top of *W.

---

 dlls/dsound/propset.c |   92 +++++++++++++++++--------------------------------
 1 files changed, 32 insertions(+), 60 deletions(-)

diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c
index 3cf65e5..f2c66ca 100644
--- a/dlls/dsound/propset.c
+++ b/dlls/dsound/propset.c
@@ -88,13 +88,13 @@ static ULONG WINAPI IKsPrivatePropertySetImpl_Release(LPKSPROPERTYSET iface)
     return ref;
 }
 
-static HRESULT DSPROPERTY_WaveDeviceMappingA(
+static HRESULT DSPROPERTY_WaveDeviceMappingW(
     LPVOID pPropData,
     ULONG cbPropData,
     PULONG pcbReturned )
 {
     HRESULT hr = DSERR_INVALIDPARAM;
-    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA ppd;
+    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd;
     TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
 	  pPropData,cbPropData,pcbReturned);
 
@@ -111,15 +111,15 @@ static HRESULT DSPROPERTY_WaveDeviceMappingA(
         TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
         wodn = waveOutGetNumDevs();
         for (wod = 0; wod < wodn; wod++) {
-            WAVEOUTCAPSA capsA;
+            WAVEOUTCAPSW capsW;
             MMRESULT res;
-            res = waveOutGetDevCapsA(wod, &capsA, sizeof(capsA));
+            res = waveOutGetDevCapsW(wod, &capsW, sizeof(capsW));
             if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpA(capsA.szPname, ppd->DeviceName) == 0) {
+                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
                     ppd->DeviceId = DSOUND_renderer_guids[wod];
                     hr = DS_OK;
                     TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          ppd->DeviceName);
+                          debugstr_w(ppd->DeviceName));
                     break;
                 }
             }
@@ -130,15 +130,15 @@ static HRESULT DSPROPERTY_WaveDeviceMappingA(
         TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
         widn = waveInGetNumDevs();
         for (wid = 0; wid < widn; wid++) {
-            WAVEINCAPSA capsA;
+            WAVEINCAPSW capsW;
             MMRESULT res;
-            res = waveInGetDevCapsA(wid, &capsA, sizeof(capsA));
+            res = waveInGetDevCapsW(wid, &capsW, sizeof(capsW));
             if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpA(capsA.szPname, ppd->DeviceName) == 0) {
+                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
                     ppd->DeviceId = DSOUND_capture_guids[wid];
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          ppd->DeviceName);
                     hr = DS_OK;
+                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
+                          debugstr_w(ppd->DeviceName));
                     break;
                 }
             }
@@ -146,67 +146,39 @@ static HRESULT DSPROPERTY_WaveDeviceMappingA(
     }
 
     if (pcbReturned)
-	*pcbReturned = cbPropData;
+        *pcbReturned = cbPropData;
 
     return hr;
 }
 
-static HRESULT DSPROPERTY_WaveDeviceMappingW(
+static HRESULT DSPROPERTY_WaveDeviceMappingA(
     LPVOID pPropData,
     ULONG cbPropData,
     PULONG pcbReturned )
 {
-    HRESULT hr = DSERR_INVALIDPARAM;
-    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd;
-    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
-	  pPropData,cbPropData,pcbReturned);
+    DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA *ppd = pPropData;
+    DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA data;
+    DWORD len;
+    HRESULT hr;
 
-    ppd = pPropData;
+    TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n",
+      pPropData,cbPropData,pcbReturned);
 
-    if (!ppd) {
-	WARN("invalid parameter: pPropData\n");
-	return DSERR_INVALIDPARAM;
+    if (!ppd || !ppd->DeviceName) {
+        WARN("invalid parameter: ppd=%p\n", ppd);
+        return DSERR_INVALIDPARAM;
     }
 
-    if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
-        ULONG wod;
-        unsigned int wodn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
-        wodn = waveOutGetNumDevs();
-        for (wod = 0; wod < wodn; wod++) {
-            WAVEOUTCAPSW capsW;
-            MMRESULT res;
-            res = waveOutGetDevCapsW(wod, &capsW, sizeof(capsW));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_renderer_guids[wod];
-                    hr = DS_OK;
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          debugstr_w(ppd->DeviceName));
-                    break;
-                }
-            }
-        }
-    } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) {
-        ULONG wid;
-        unsigned int widn;
-        TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n");
-        widn = waveInGetNumDevs();
-        for (wid = 0; wid < widn; wid++) {
-            WAVEINCAPSW capsW;
-            MMRESULT res;
-            res = waveInGetDevCapsW(wid, &capsW, sizeof(capsW));
-            if (res == MMSYSERR_NOERROR) {
-                if (lstrcmpW(capsW.szPname, ppd->DeviceName) == 0) {
-                    ppd->DeviceId = DSOUND_capture_guids[wid];
-                    hr = DS_OK;
-                    TRACE("found %s for %s\n", debugstr_guid(&ppd->DeviceId),
-                          debugstr_w(ppd->DeviceName));
-                    break;
-                }
-            }
-        }
-    }
+    data.DataFlow = ppd->DataFlow;
+    len = MultiByteToWideChar(CP_ACP, 0, ppd->DeviceName, -1, NULL, 0);
+    data.DeviceName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+    if (!data.DeviceName)
+        return E_OUTOFMEMORY;
+    MultiByteToWideChar(CP_ACP, 0, ppd->DeviceName, -1, data.DeviceName, len);
+
+    hr = DSPROPERTY_WaveDeviceMappingW(&data, cbPropData, pcbReturned);
+    HeapFree(GetProcessHeap(), 0, data.DeviceName);
+    ppd->DeviceId = data.DeviceId;
 
     if (pcbReturned)
         *pcbReturned = cbPropData;




More information about the wine-cvs mailing list