📄 propset.c
字号:
} } 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) *pcbReturned = cbPropData; return hr;}static HRESULT WINAPI DSPROPERTY_WaveDeviceMappingW( REFGUID guidPropSet, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ){ HRESULT hr = DSERR_INVALIDPARAM; PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA ppd; TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA) pPropData; if (!ppd) { WARN("invalid parameter: pPropData\n"); 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; } } } } if (pcbReturned) *pcbReturned = cbPropData; return hr;}static HRESULT WINAPI DSPROPERTY_Description1( REFGUID guidPropSet, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ){ HRESULT err; GUID guid, dev_guid; PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA ppd; TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA) pPropData; if (!ppd) { WARN("invalid parameter: pPropData\n"); return DSERR_INVALIDPARAM; } TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId)); if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) { /* default device of type specified by ppd->DataFlow */ if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) { TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) { TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); } else { TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow); } FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); return E_PROP_ID_UNSUPPORTED; } ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED; GetDeviceID(&ppd->DeviceId, &dev_guid); if ( IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultPlayback) || IsEqualGUID( &ppd->DeviceId, &DSDEVID_DefaultVoicePlayback) ) { ULONG wod; unsigned int wodn; TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER; wodn = waveOutGetNumDevs(); for (wod = 0; wod < wodn; wod++) { if (IsEqualGUID( &dev_guid, &DSOUND_renderer_guids[wod] ) ) { DSDRIVERDESC desc; ppd->WaveDeviceId = wod; ppd->Devnode = wod; err = mmErr(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0)); if (err == DS_OK) { PIDSDRIVER drv = NULL; lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA)); lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA)); MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); err = mmErr(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n"); break; } else { WARN("WineWaveOutMessage(DRV_QUERYDSOUNDDESC) failed\n"); return E_PROP_ID_UNSUPPORTED; } } } } else if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultCapture) || IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultVoiceCapture) ) { ULONG wid; unsigned int widn; TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE; widn = waveInGetNumDevs(); for (wid = 0; wid < widn; wid++) { if (IsEqualGUID( &dev_guid, &guid) ) { DSDRIVERDESC desc; ppd->WaveDeviceId = wid; ppd->Devnode = wid; err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0)); if (err == DS_OK) { PIDSCDRIVER drv; lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA)); lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA)); MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); err = mmErr(WineWaveInMessage((HWAVEIN)wid,DRV_QUERYDSOUNDIFACE,(DWORD_PTR)&drv,0)); if (err == DS_OK && drv) ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveInMessage(DRV_QUERYDSOUNDIFACE) failed\n"); break; } else { WARN("WineWaveInMessage(DRV_QUERYDSOUNDDESC) failed\n"); return E_PROP_ID_UNSUPPORTED; } } } } else { BOOL found = FALSE; ULONG wod; unsigned int wodn; /* given specific device so try the render devices first */ wodn = waveOutGetNumDevs(); for (wod = 0; wod < wodn; wod++) { if (IsEqualGUID( &ppd->DeviceId, &DSOUND_renderer_guids[wod] ) ) { DSDRIVERDESC desc; TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_RENDER; ppd->WaveDeviceId = wod; ppd->Devnode = wod; err = mmErr(WineWaveOutMessage((HWAVEOUT)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0)); if (err == DS_OK) { PIDSDRIVER drv = NULL; lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA)); lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA)); MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); err = mmErr(WineWaveOutMessage((HWAVEOUT)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveOutMessage(DRV_QUERYDSOUNDIFACE) failed\n"); found = TRUE; break; } else { WARN("WineWaveOutMessage(DRV_QUERYDSOUNDDESC) failed\n"); return E_PROP_ID_UNSUPPORTED; } } } if (found == FALSE) { ULONG wid; unsigned int widn; /* given specific device so try the capture devices next */ widn = waveInGetNumDevs(); for (wid = 0; wid < widn; wid++) { if (IsEqualGUID( &ppd->DeviceId, &DSOUND_capture_guids[wid] ) ) { DSDRIVERDESC desc; TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); ppd->DataFlow = DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE; ppd->WaveDeviceId = wid; ppd->Devnode = wid; err = mmErr(WineWaveInMessage((HWAVEIN)wod,DRV_QUERYDSOUNDDESC,(DWORD_PTR)&(desc),0)); if (err == DS_OK) { PIDSDRIVER drv = NULL; lstrcpynA(ppd->DescriptionA, desc.szDesc, sizeof(ppd->DescriptionA)); lstrcpynA(ppd->ModuleA, desc.szDrvname, sizeof(ppd->ModuleA)); MultiByteToWideChar( CP_ACP, 0, desc.szDesc, -1, ppd->DescriptionW, sizeof(ppd->DescriptionW)/sizeof(WCHAR) ); MultiByteToWideChar( CP_ACP, 0, desc.szDrvname, -1, ppd->ModuleW, sizeof(ppd->ModuleW)/sizeof(WCHAR) ); err = mmErr(WineWaveInMessage((HWAVEIN)wod, DRV_QUERYDSOUNDIFACE, (DWORD_PTR)&drv, 0)); if (err == DS_OK && drv) ppd->Type = DIRECTSOUNDDEVICE_TYPE_VXD; else WARN("WineWaveInMessage(DRV_QUERYDSOUNDIFACE) failed\n"); found = TRUE; break; } else { WARN("WineWaveInMessage(DRV_QUERYDSOUNDDESC) failed\n"); return E_PROP_ID_UNSUPPORTED; } } } if (found == FALSE) { WARN("device not found\n"); return E_PROP_ID_UNSUPPORTED; } } } if (pcbReturned) { *pcbReturned = cbPropData; TRACE("*pcbReturned=%ld\n", *pcbReturned); } return S_OK;}static HRESULT WINAPI DSPROPERTY_DescriptionA( REFGUID guidPropSet, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ){ PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA ppd = (PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA) pPropData; HRESULT err; GUID dev_guid; TRACE("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p)\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); TRACE("DeviceId=%s\n",debugstr_guid(&ppd->DeviceId)); if ( IsEqualGUID( &ppd->DeviceId , &GUID_NULL) ) { /* default device of type specified by ppd->DataFlow */ if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE) { TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n"); } else if (ppd->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER) { TRACE("DataFlow=DIRECTSOUNDDEVICE_DATAFLOW_RENDER\n"); } else { TRACE("DataFlow=Unknown(%d)\n", ppd->DataFlow); } FIXME("(guidPropSet=%s,pPropData=%p,cbPropData=%ld,pcbReturned=%p) GUID_NULL not implemented!\n", debugstr_guid(guidPropSet),pPropData,cbPropData,pcbReturned); return E_PROP_ID_UNSUPPORTED; } ppd->Type = DIRECTSOUNDDEVICE_TYPE_EMULATED; GetDeviceID(&ppd->DeviceId, &dev_guid); if ( IsEqualGUID( &ppd->DeviceId , &DSDEVID_DefaultPlayback) ||
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -