[WINEOSS/WINEALSA] Some midi fixes

Christian Costa titan.costa at wanadoo.fr
Tue Feb 3 15:43:52 CST 2004


Hi,

Just some midi fixes.

Bye.

Changelog :
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.

Christian Costa   titan.costa at wanadoo.fr
-------------- next part --------------
Index: dlls/winmm/wineoss/midi.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/wineoss/midi.c,v
retrieving revision 1.36
diff -u -r1.36 midi.c
--- dlls/winmm/wineoss/midi.c	5 Sep 2003 23:08:27 -0000	1.36
+++ dlls/winmm/wineoss/midi.c	3 Feb 2004 20:28:43 -0000
@@ -348,6 +348,7 @@
     case MOM_OPEN:
     case MOM_CLOSE:
     case MOM_DONE:
+    case MOM_POSITIONCB:
 	if (wDevID > MODM_NumDevs)
 	    return MMSYSERR_BADDEVICEID;
 
@@ -360,7 +361,10 @@
     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 @@
     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;
 
Index: dlls/winmm/winealsa/midi.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winealsa/midi.c,v
retrieving revision 1.6
diff -u -r1.6 midi.c
--- dlls/winmm/winealsa/midi.c	13 Jan 2004 01:05:34 -0000	1.6
+++ dlls/winmm/winealsa/midi.c	3 Feb 2004 20:28:46 -0000
@@ -173,6 +173,7 @@
     case MOM_OPEN:
     case MOM_CLOSE:
     case MOM_DONE:
+    case MOM_POSITIONCB:
 	if (wDevID > MODM_NumDevs)
 	    return MMSYSERR_BADDEVICEID;
 
@@ -185,7 +186,10 @@
     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 @@
 	    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 @@
     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;
 


More information about the wine-patches mailing list