From 485390de6f58656adb6b8e2e21aa27bbb305389c Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Thu, 5 Feb 2004 01:24:28 +0000 Subject: [PATCH] Added missing notifications to MIDI_NotifyClient. Made checks less strict in midPrepare, only return an error for buffer in queue. Fixed time of input events in Alsa driver. --- dlls/winmm/winealsa/midi.c | 9 ++++++--- dlls/winmm/wineoss/midi.c | 6 +++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dlls/winmm/winealsa/midi.c b/dlls/winmm/winealsa/midi.c index 973d5f4ef71..d36cdc0794c 100644 --- a/dlls/winmm/winealsa/midi.c +++ b/dlls/winmm/winealsa/midi.c @@ -173,6 +173,7 @@ static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, case MOM_OPEN: case MOM_CLOSE: case MOM_DONE: + case MOM_POSITIONCB: if (wDevID > MODM_NumDevs) return MMSYSERR_BADDEVICEID; @@ -185,7 +186,10 @@ static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, case MIM_OPEN: case MIM_CLOSE: case MIM_DATA: + case MIM_LONGDATA: case MIM_ERROR: + case MIM_LONGERROR: + case MIM_MOREDATA: if (wDevID > MIDM_NumDevs) return MMSYSERR_BADDEVICEID; @@ -361,8 +365,7 @@ static VOID WINAPI midTimeCallback(HWND hwnd, UINT msg, UINT id, DWORD dwTime) if (toSend != 0) { TRACE("Sending event %08lx (from %d %d)\n", toSend, ev->source.client, ev->source.port); /* FIXME: Should use ev->time instead for better accuracy */ - dwTime -= MidiInDev[wDevID].startTime; - if (MIDI_NotifyClient(wDevID, MIM_DATA, toSend, dwTime) != MMSYSERR_NOERROR) { + if (MIDI_NotifyClient(wDevID, MIM_DATA, toSend, dwTime-MidiInDev[wDevID].startTime) != MMSYSERR_NOERROR) { WARN("Couldn't notify client\n"); } } @@ -547,7 +550,7 @@ static DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0 || - lpMidiHdr->lpData == 0 || lpMidiHdr->dwFlags != 0 || + lpMidiHdr->lpData == 0 || (lpMidiHdr->dwFlags & MHDR_INQUEUE) != 0 || lpMidiHdr->dwBufferLength >= 0x10000ul) return MMSYSERR_INVALPARAM; diff --git a/dlls/winmm/wineoss/midi.c b/dlls/winmm/wineoss/midi.c index b90215ea124..97959de9cb5 100644 --- a/dlls/winmm/wineoss/midi.c +++ b/dlls/winmm/wineoss/midi.c @@ -348,6 +348,7 @@ static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, case MOM_OPEN: case MOM_CLOSE: case MOM_DONE: + case MOM_POSITIONCB: if (wDevID > MODM_NumDevs) return MMSYSERR_BADDEVICEID; @@ -360,7 +361,10 @@ static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg, case MIM_OPEN: case MIM_CLOSE: case MIM_DATA: + case MIM_LONGDATA: case MIM_ERROR: + case MIM_LONGERROR: + case MIM_MOREDATA: if (wDevID > MIDM_NumDevs) return MMSYSERR_BADDEVICEID; @@ -771,7 +775,7 @@ static DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize) TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize); if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0 || - lpMidiHdr->lpData == 0 || lpMidiHdr->dwFlags != 0 || + lpMidiHdr->lpData == 0 || (lpMidiHdr->dwFlags & MHDR_INQUEUE) != 0 || lpMidiHdr->dwBufferLength >= 0x10000ul) return MMSYSERR_INVALPARAM;