winealsa: Improved handling of SysEx MIDI messages.
This commit is contained in:
parent
73bec11865
commit
a45ffebee4
|
@ -351,17 +351,19 @@ static DWORD WINAPI midRecThread(LPVOID arg)
|
||||||
LPBYTE ptr = (BYTE*) ev->data.ext.ptr;
|
LPBYTE ptr = (BYTE*) ev->data.ext.ptr;
|
||||||
LPMIDIHDR lpMidiHdr;
|
LPMIDIHDR lpMidiHdr;
|
||||||
|
|
||||||
/* FIXME: Should handle sysex greater that a single buffer */
|
/* FIXME: Should handle sysex greater than lpMidiHdr->dwBufferLength */
|
||||||
EnterCriticalSection(&crit_sect);
|
EnterCriticalSection(&crit_sect);
|
||||||
if ((lpMidiHdr = MidiInDev[wDevID].lpQueueHdr) != NULL) {
|
if ((lpMidiHdr = MidiInDev[wDevID].lpQueueHdr) != NULL) {
|
||||||
if (len <= lpMidiHdr->dwBufferLength) {
|
if (lpMidiHdr->dwBytesRecorded + len <= lpMidiHdr->dwBufferLength) {
|
||||||
lpMidiHdr->dwBytesRecorded = len;
|
memcpy(lpMidiHdr->lpData + lpMidiHdr->dwBytesRecorded, ptr, len);
|
||||||
memcpy(lpMidiHdr->lpData, ptr, len);
|
lpMidiHdr->dwBytesRecorded += len;
|
||||||
lpMidiHdr->dwFlags &= ~MHDR_INQUEUE;
|
if (*(ptr + (len-1)) == 0xF7) {
|
||||||
lpMidiHdr->dwFlags |= MHDR_DONE;
|
lpMidiHdr->dwFlags &= ~MHDR_INQUEUE;
|
||||||
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR)lpMidiHdr->lpNext;
|
lpMidiHdr->dwFlags |= MHDR_DONE;
|
||||||
if (MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)lpMidiHdr, dwTime) != MMSYSERR_NOERROR)
|
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR)lpMidiHdr->lpNext;
|
||||||
WARN("Couldn't notify client\n");
|
if (MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)lpMidiHdr, dwTime) != MMSYSERR_NOERROR)
|
||||||
|
WARN("Couldn't notify client\n");
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
FIXME("No enough space in the buffer to store sysex!\n");
|
FIXME("No enough space in the buffer to store sysex!\n");
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Reference in New Issue