From: dead ash Subject: [PATCH 1/2]winmm: Fix no sound or recording when use waveform-audio Message-Id: Date: Thu, 9 Apr 2020 14:16:33 +0000 ​from MSDN, the waveInGetDevCaps and waveOutGetDevCaps function of parameter uDeviceID can be either a device identifier or a handle of an open waveform-audio input or output device. now the function not support handle. also same as waveOutOpen and waveInOpen. From: deadash Date: Thu, 9 Apr 2020 18:02:14 +0800 Subject: [PATCH 1/2] winmm-wave: fixed waveOutGetDevCaps and waveInGetDevCaps Signed-off-by: deadash --- dlls/winmm/waveform.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c index 730851997e..f05f8f45ce 100644 --- a/dlls/winmm/waveform.c +++ b/dlls/winmm/waveform.c @@ -2669,10 +2669,15 @@ UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps, caps = &mapper_caps; }else{ - if(uDeviceID >= g_outmmdevices_count) - return MMSYSERR_BADDEVICEID; - - caps = &read_map(g_out_map, uDeviceID)->out_caps; + if(uDeviceID >= g_outmmdevices_count){ + WINMM_Device *device = WINMM_GetDeviceFromHWAVE((HWAVE)uDeviceID); + + if(device == NULL) return MMSYSERR_BADDEVICEID; + + caps = &device->parent->out_caps; + }else{ + caps = &read_map(g_in_map, uDeviceID)->out_caps; + } } memcpy(lpCaps, caps, min(uSize, sizeof(*lpCaps))); @@ -3324,10 +3329,15 @@ UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSi caps = &mapper_caps; }else{ - if(uDeviceID >= g_inmmdevices_count) - return MMSYSERR_BADDEVICEID; - - caps = &read_map(g_in_map, uDeviceID)->in_caps; + if(uDeviceID >= g_inmmdevices_count){ + WINMM_Device *device = WINMM_GetDeviceFromHWAVE((HWAVE)uDeviceID); + + if(device == NULL) return MMSYSERR_BADDEVICEID; + + caps = &device->parent->in_caps; + }else{ + caps = &read_map(g_in_map, uDeviceID)->in_caps; + } } memcpy(lpCaps, caps, min(uSize, sizeof(*lpCaps))); -- 2.26.0.windows.1