static HRESULT DSPROPERTY_DescriptionA( LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned) { DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data; DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA *ppd = pPropData; HRESULT hr; if (pcbReturned) *pcbReturned = sizeof(*ppd); if (!pPropData) return S_OK; data.DeviceId = ppd->DeviceId; data.DataFlow = ppd->DataFlow; hr = DSPROPERTY_DescriptionW(&data, sizeof(data), NULL); if (FAILED(hr)) return hr; if (!DSPROPERTY_descWtoA(&data, ppd)) hr = E_OUTOFMEMORY; HeapFree(GetProcessHeap(), 0, data.Module); HeapFree(GetProcessHeap(), 0, data.Interface); return hr; }
static HRESULT WINAPI IKsPrivatePropertySetImpl_Get( LPKSPROPERTYSET iface, REFGUID guidPropSet, ULONG dwPropID, LPVOID pInstanceData, ULONG cbInstanceData, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ) { IKsPrivatePropertySetImpl *This = impl_from_IKsPropertySet(iface); TRACE("(iface=%p,guidPropSet=%s,dwPropID=%d,pInstanceData=%p,cbInstanceData=%d,pPropData=%p,cbPropData=%d,pcbReturned=%p)\n", This,debugstr_guid(guidPropSet),dwPropID,pInstanceData,cbInstanceData,pPropData,cbPropData,pcbReturned); if ( IsEqualGUID( &DSPROPSETID_DirectSoundDevice, guidPropSet) ) { switch (dwPropID) { case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: return DSPROPERTY_WaveDeviceMappingA(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: return DSPROPERTY_Description1(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: return DSPROPERTY_Enumerate1(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: return DSPROPERTY_WaveDeviceMappingW(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: return DSPROPERTY_DescriptionA(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: return DSPROPERTY_DescriptionW(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: return DSPROPERTY_EnumerateA(pPropData,cbPropData,pcbReturned); case DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: return DSPROPERTY_EnumerateW(pPropData,cbPropData,pcbReturned); default: FIXME("unsupported ID: %d\n",dwPropID); break; } } else { FIXME("unsupported property: %s\n",debugstr_guid(guidPropSet)); } if (pcbReturned) { *pcbReturned = 0; FIXME("*pcbReturned=%d\n", *pcbReturned); } return E_PROP_ID_UNSUPPORTED; }
static HRESULT DSPROPERTY_EnumerateW( LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned ) { PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA ppd = pPropData; DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data; BOOL ret; int widn, wodn, i; TRACE("(pPropData=%p,cbPropData=%d,pcbReturned=%p)\n", pPropData,cbPropData,pcbReturned); if (pcbReturned) *pcbReturned = 0; if (!ppd || !ppd->Callback) { WARN("Invalid ppd %p\n", ppd); return E_PROP_ID_UNSUPPORTED; } wodn = waveOutGetNumDevs(); widn = waveInGetNumDevs(); data.DeviceId = DSOUND_renderer_guids[0]; for (i = 0; i < wodn; ++i) { HRESULT hr; data.DeviceId.Data4[7] = i; hr = DSPROPERTY_DescriptionW(&data, sizeof(data), NULL); if (FAILED(hr)) { ERR("DescriptionW failed!\n"); return S_OK; } ret = ppd->Callback(&data, ppd->Context); HeapFree(GetProcessHeap(), 0, data.Module); HeapFree(GetProcessHeap(), 0, data.Description); if (!ret) return S_OK; } data.DeviceId = DSOUND_capture_guids[0]; for (i = 0; i < widn; ++i) { HRESULT hr; data.DeviceId.Data4[7] = i; hr = DSPROPERTY_DescriptionW(&data, sizeof(data), NULL); if (FAILED(hr)) { ERR("DescriptionW failed!\n"); return S_OK; } ret = ppd->Callback(&data, ppd->Context); HeapFree(GetProcessHeap(), 0, data.Module); HeapFree(GetProcessHeap(), 0, data.Description); if (!ret) return S_OK; } return S_OK; }