[DSOUND] fully implement WAVEDEVICEMAPPING property set
Robert Reif
reif at earthlink.net
Tue Apr 12 09:14:46 CDT 2005
Fully implement WAVEDEVICEMAPPING property set.
-------------- next part --------------
Index: dlls/dsound/propset.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/propset.c,v
retrieving revision 1.37
diff -u -p -r1.37 propset.c
--- dlls/dsound/propset.c 28 Mar 2005 14:17:52 -0000 1.37
+++ dlls/dsound/propset.c 12 Apr 2005 14:07:00 -0000
@@ -272,9 +272,10 @@ static HRESULT WINAPI DSPROPERTY_WaveDev
ULONG cbPropData,
PULONG pcbReturned )
{
+ HRESULT hr = DSERR_INVALIDPARAM;
PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA ppd;
- FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) not implemented!\n",
- debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);
+ TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) not implemented!\n",
+ debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);
ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA) pPropData;
@@ -283,20 +284,50 @@ static HRESULT WINAPI DSPROPERTY_WaveDev
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 (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) {
+ ULONG wod;
+ unsigned int wodn;
+ TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n");
+ wodn = waveOutGetNumDevs();
+ for (wod = 0; wod < wodn; wod++) {
+ WAVEOUTCAPSA capsA;
+ MMRESULT res;
+ res = waveOutGetDevCapsA(wod, &capsA, sizeof(capsA));
+ if (res == MMSYSERR_NOERROR) {
+ if (lstrcmpA(capsA.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);
+ 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++) {
+ WAVEINCAPSA capsA;
+ MMRESULT res;
+ res = waveInGetDevCapsA(wid, &capsA, sizeof(capsA));
+ if (res == MMSYSERR_NOERROR) {
+ if (lstrcmpA(capsA.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;
+ break;
+ }
+ }
+ }
+ }
- if (pcbReturned) {
+ if (pcbReturned)
*pcbReturned = cbPropData;
- FIXME("*pcbReturned=%ld\n", *pcbReturned);
- }
- return S_OK;
+ return hr;
}
static HRESULT WINAPI DSPROPERTY_WaveDeviceMappingW(
@@ -305,9 +336,10 @@ static HRESULT WINAPI DSPROPERTY_WaveDev
ULONG cbPropData,
PULONG pcbReturned )
{
+ HRESULT hr = DSERR_INVALIDPARAM;
PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd;
- FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) not implemented!\n",
- debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);
+ TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n",
+ debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned);
ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA) pPropData;
@@ -316,20 +348,50 @@ static HRESULT WINAPI DSPROPERTY_WaveDev
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);
+ 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;
+ }
+ }
+ }
}
- return S_OK;
+ if (pcbReturned)
+ *pcbReturned = cbPropData;
+
+ return hr;
}
static HRESULT WINAPI DSPROPERTY_Description1(
More information about the wine-patches
mailing list