[PATCH 4/4] [v2] winmm: Fix MEVT_LONGMSG handling in MIDI stream.
Andrew Eikum
aeikum at codeweavers.com
Thu Apr 5 10:32:35 CDT 2018
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Thu, Apr 05, 2018 at 12:41:24AM +0900, Akihiro Sagawa wrote:
> In v2, just rebased.
>
> Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
> ---
> dlls/winmm/tests/midi.c | 2 +-
> dlls/winmm/winmm.c | 12 ++++++++++--
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/dlls/winmm/tests/midi.c b/dlls/winmm/tests/midi.c
> index 0ea3d92..97cef2d 100644
> --- a/dlls/winmm/tests/midi.c
> +++ b/dlls/winmm/tests/midi.c
> @@ -819,7 +819,7 @@ static void test_midiStream(UINT udev, HWND hwnd)
> e->dwEvent = MEVT_F_LONG | sizeof(SysEx_volume_off);
> memcpy(&e->dwParms[0], SysEx_volume_off, sizeof(SysEx_volume_off));
> p += sizeof(MIDISHORTEVENT) + ROUNDUP4(sizeof(SysEx_volume_off));
> - /* Note On (FIXME: we shouldn't hear this voice due to volume settings) */
> + /* Note On (We can't hear this voice due to volume settings) */
> e = (MIDIEVENT *)p;
> e->dwEvent = MEVT_F_SHORT | 0x6F4593; /* note #69 */
> p += sizeof(MIDISHORTEVENT);
> diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
> index 1412d5e..faeb474 100644
> --- a/dlls/winmm/winmm.c
> +++ b/dlls/winmm/winmm.c
> @@ -1169,8 +1169,16 @@ start_header:
> /* do nothing, skip bytes */
> break;
> case MEVT_LONGMSG:
> - midiOutLongMsg(lpMidiStrm->hDevice, lpMidiStrm->lpMidiHdr, MEVT_EVENTPARM(me->dwEvent));
> - break;
> + {
> + MIDIHDR mh;
> + memset(&mh, 0, sizeof(mh));
> + mh.lpData = (LPSTR)me->dwParms;
> + mh.dwBufferLength = MEVT_EVENTPARM(me->dwEvent);
> + midiOutPrepareHeader(lpMidiStrm->hDevice, &mh, sizeof(mh));
> + midiOutLongMsg(lpMidiStrm->hDevice, &mh, sizeof(mh));
> + midiOutUnprepareHeader(lpMidiStrm->hDevice, &mh, sizeof(mh));
> + break;
> + }
> case MEVT_NOP:
> break;
> case MEVT_SHORTMSG:
>
More information about the wine-devel
mailing list