Fixes bug 52592. https://bugs.winehq.org/show_bug.cgi?id=52592
-- v4: dlls/winmm: waveOutGetID: Return correct id for WAVE_MAPPER.
From: Carlo Bramini carlo_bramini@users.sourceforge.net
Fixes bug 52592. https://bugs.winehq.org/show_bug.cgi?id=52592 Added tests for checking waveOutGetID() --- dlls/winmm/tests/wave.c | 30 ++++++++++++++++++++++++++++++ dlls/winmm/waveform.c | 3 +++ 2 files changed, 33 insertions(+)
diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c index 673c2c010ac..cb68ee315da 100644 --- a/dlls/winmm/tests/wave.c +++ b/dlls/winmm/tests/wave.c @@ -1409,6 +1409,36 @@ static void wave_out_test_device(UINT_PTR device) trace("waveOutOpen(%s): 32 bit float samples not supported\n", dev_name(device));
+ /* Test if waveOutGetID() returns expected device */ + + format.wFormatTag=WAVE_FORMAT_PCM; + format.nChannels=1; + format.wBitsPerSample=8; + format.nSamplesPerSec=22050; + format.nBlockAlign=format.nChannels*format.wBitsPerSample/8; + format.nAvgBytesPerSec=format.nSamplesPerSec*format.nBlockAlign; + format.cbSize=0; + + rc = waveOutOpen(&wout, device, &format, 0, 0, 0); + ok(rc==MMSYSERR_NOERROR || rc==WAVERR_BADFORMAT || + rc==MMSYSERR_INVALFLAG || rc==MMSYSERR_INVALPARAM, + "waveOutOpen(%s): returned %s\n",dev_name(device),wave_out_error(rc)); + if (rc==MMSYSERR_NOERROR) { + rc = waveOutGetID(wout, &f); + ok(rc==MMSYSERR_NOERROR || + rc==MMSYSERR_INVALHANDLE || rc==MMSYSERR_INVALPARAM, + "waveOutGetID(%s): returned %s\n",dev_name(device),wave_out_error(rc)); + if (rc==MMSYSERR_NOERROR) { + ok(f==(UINT)device, + "waveOutGetID(%s): wrong id device, got %d expected %d\n", + dev_name(device),f,(int)device); + } else + trace("waveOutGetID(%s): cannot get device id\n", + dev_name(device)); + } else + trace("waveOutOpen(%s): cannot test waveOutGetID()\n", + dev_name(device)); + /* Test invalid parameters */
format.wFormatTag = WAVE_FORMAT_PCM; diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c index 8c0cc4d879c..f033e0a5fed 100644 --- a/dlls/winmm/waveform.c +++ b/dlls/winmm/waveform.c @@ -3159,6 +3159,9 @@ UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT* lpuDeviceID)
WINMM_DecomposeHWAVE((HWAVE)hWaveOut, lpuDeviceID, &is_out, &dev, &junk);
+ if (*lpuDeviceID == MAPPER_INDEX) + *lpuDeviceID = WAVE_MAPPER; + return MMSYSERR_NOERROR; }