From: Anton Baskanov baskanov@gmail.com
--- dlls/wineswmidi/swmidi.c | 21 +++++++++++++++++++++ dlls/winmm/tests/midi.c | 5 +---- include/mmsystem.h | 2 ++ 3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/wineswmidi/swmidi.c b/dlls/wineswmidi/swmidi.c index ab098a21f2e..038aa269ec6 100644 --- a/dlls/wineswmidi/swmidi.c +++ b/dlls/wineswmidi/swmidi.c @@ -28,6 +28,25 @@
WINE_DEFAULT_DEBUG_CHANNEL(midi);
+static DWORD swmidi_get_dev_caps(MIDIOUTCAPSW *out_caps, DWORD_PTR size) +{ + MIDIOUTCAPSW caps = { + MM_MICROSOFT, MM_MSFT_WDMAUDIO_MIDIOUT, 0x050a, + L"Wine GS Wavetable SW Synth", + MOD_SWSYNTH, 48, 48, 0xffff, + MIDICAPS_VOLUME | MIDICAPS_LRVOLUME, + }; + + TRACE("out_caps %p, size %Iu.\n", out_caps, size); + + if (!out_caps) + return MMSYSERR_INVALPARAM; + + memcpy(out_caps, &caps, min(size, sizeof(caps))); + + return MMSYSERR_NOERROR; +} + DWORD WINAPI swmidi_modMessage(UINT dev_id, UINT msg, DWORD_PTR user, DWORD_PTR param1, DWORD_PTR param2) { @@ -41,6 +60,8 @@ DWORD WINAPI swmidi_modMessage(UINT dev_id, UINT msg, DWORD_PTR user, DWORD_PTR return MMSYSERR_NOERROR; case MODM_GETNUMDEVS: return 1; + case MODM_GETDEVCAPS: + return swmidi_get_dev_caps((MIDIOUTCAPSW *)param1, param2); }
return MMSYSERR_NOTSUPPORTED; diff --git a/dlls/winmm/tests/midi.c b/dlls/winmm/tests/midi.c index 8be1ace09fc..70a5375f1cb 100644 --- a/dlls/winmm/tests/midi.c +++ b/dlls/winmm/tests/midi.c @@ -279,12 +279,9 @@ static void test_midiOut_device(UINT udev, HWND hwnd) DWORD ovolume; UINT udevid; MIDIHDR mhdr; - BOOL swmidi; - - swmidi = udev == midiOutGetNumDevs() - 1;
rc = midiOutGetDevCapsA(udev, &capsA, sizeof(capsA)); - todo_wine_if(swmidi) ok(!rc, "midiOutGetDevCaps(dev=%d) rc=%s\n", udev, mmsys_error(rc)); + ok(!rc, "midiOutGetDevCaps(dev=%d) rc=%s\n", udev, mmsys_error(rc)); if (!rc) { trace("* %s: manufacturer=%d, product=%d, tech=%d, support=%lX: %d voices, %d notes\n", capsA.szPname, capsA.wMid, capsA.wPid, capsA.wTechnology, capsA.dwSupport, capsA.wVoices, capsA.wNotes); diff --git a/include/mmsystem.h b/include/mmsystem.h index a80716ef949..c65f627c0ed 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -265,6 +265,8 @@ typedef void (CALLBACK *LPDRVCALLBACK)(HDRVR,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR)
#define MM_PC_JOYSTICK 12 /* Joystick adapter */
+#define MM_MSFT_WDMAUDIO_MIDIOUT 102 + #define MM_CREATIVE_SBP16_WAVEOUT 104
WINMMAPI UINT WINAPI mmsystemGetVersion(void);