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