Module: wine Branch: master Commit: bbc5244c0b52f8ad90e82c284f3ec0c9d13c64a6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbc5244c0b52f8ad90e82c284f...
Author: Andrew Eikum aeikum@codeweavers.com Date: Tue Jan 27 09:02:50 2015 -0600
winmm: Allow HMIXEROBJ handles in place of device IDs in mixerGetDevCaps.
---
dlls/winmm/tests/mixer.c | 16 ++++++++++++++++ dlls/winmm/waveform.c | 17 ++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/dlls/winmm/tests/mixer.c b/dlls/winmm/tests/mixer.c index 982cf8b..82eb338 100644 --- a/dlls/winmm/tests/mixer.c +++ b/dlls/winmm/tests/mixer.c @@ -395,6 +395,14 @@ static void mixer_test_deviceA(int device) ok(rc==MMSYSERR_NOERROR, "mixerOpen: MMSYSERR_NOERROR expected, got %s\n",mmsys_error(rc)); if (rc==MMSYSERR_NOERROR) { + MIXERCAPSA capsA2; + + rc=mixerGetDevCapsA((UINT_PTR)mix,&capsA2,sizeof(capsA2)); + ok(rc==MMSYSERR_NOERROR, + "mixerGetDevCapsA: MMSYSERR_NOERROR expected, got %s\n", + mmsys_error(rc)); + ok(!strcmp(capsA2.szPname, capsA.szPname), "Got wrong device caps\n"); + for (d=0;d<capsA.cDestinations;d++) { MIXERLINEA mixerlineA; mixerlineA.cbStruct = 0; @@ -771,6 +779,14 @@ static void mixer_test_deviceW(int device) ok(rc==MMSYSERR_NOERROR, "mixerOpen: MMSYSERR_NOERROR expected, got %s\n",mmsys_error(rc)); if (rc==MMSYSERR_NOERROR) { + MIXERCAPSW capsW2; + + rc=mixerGetDevCapsW((UINT_PTR)mix,&capsW2,sizeof(capsW2)); + ok(rc==MMSYSERR_NOERROR, + "mixerGetDevCapsW: MMSYSERR_NOERROR expected, got %s\n", + mmsys_error(rc)); + ok(!lstrcmpW(capsW2.szPname, capsW.szPname), "Got wrong device caps\n"); + for (d=0;d<capsW.cDestinations;d++) { MIXERLINEW mixerlineW; mixerlineW.cbStruct = 0; diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c index f381c16..ba74e02 100644 --- a/dlls/winmm/waveform.c +++ b/dlls/winmm/waveform.c @@ -122,6 +122,7 @@ struct _WINMM_MMDevice { WAVEOUTCAPSW out_caps; /* must not be modified outside of WINMM_InitMMDevices*/ WAVEINCAPSW in_caps; /* must not be modified outside of WINMM_InitMMDevices*/ WCHAR *dev_id; + EDataFlow dataflow;
ISimpleAudioVolume *volume;
@@ -510,6 +511,7 @@ static HRESULT WINMM_InitMMDevice(EDataFlow flow, IMMDevice *device, { HRESULT hr;
+ dev->dataflow = flow; if(flow == eRender){ dev->out_caps.wMid = 0xFF; dev->out_caps.wPid = 0xFF; @@ -3749,15 +3751,20 @@ UINT WINAPI mixerGetDevCapsW(UINT_PTR uDeviceID, LPMIXERCAPSW lpCaps, UINT uSize return MMSYSERR_NOERROR;
if(uDeviceID >= g_outmmdevices_count + g_inmmdevices_count) + mmdevice = WINMM_GetMixerMMDevice((HMIXEROBJ)uDeviceID, + MIXER_OBJECTF_MIXER, NULL); + else if(uDeviceID < g_outmmdevices_count) + mmdevice = read_map(g_out_map, uDeviceID); + else + mmdevice = read_map(g_in_map, uDeviceID - g_outmmdevices_count); + + if(!mmdevice) return MMSYSERR_BADDEVICEID;
- if(uDeviceID < g_outmmdevices_count){ - mmdevice = read_map(g_out_map, uDeviceID); + if(mmdevice->dataflow == eRender) memcpy(caps.szPname, mmdevice->out_caps.szPname, sizeof(caps.szPname)); - }else{ - mmdevice = read_map(g_in_map, uDeviceID - g_outmmdevices_count); + else memcpy(caps.szPname, mmdevice->in_caps.szPname, sizeof(caps.szPname)); - }
caps.wMid = 0xFF; caps.wPid = 0xFF;