diff --git a/windows/winmme/JackWinMMEDriver.cpp b/windows/winmme/JackWinMMEDriver.cpp index 6ddf5667..2493bda0 100644 --- a/windows/winmme/JackWinMMEDriver.cpp +++ b/windows/winmme/JackWinMMEDriver.cpp @@ -116,84 +116,84 @@ int JackWinMMEDriver::Open(bool capturing, assert(fMidiDestination); // Real input + int devindex = 0; for (int i = 0; i < fRealCaptureChannels; i++) { HMIDIIN handle; - fMidiDestination[i].fIndex = i; - MMRESULT ret = midiInOpen(&handle, fMidiDestination[i].fIndex, (DWORD)MidiInProc, (DWORD)fRingBuffer[i], CALLBACK_FUNCTION); + fMidiDestination[devindex].fIndex = i; + MMRESULT ret = midiInOpen(&handle, fMidiDestination[devindex].fIndex, (DWORD)MidiInProc, (DWORD)fRingBuffer[devindex], CALLBACK_FUNCTION); if (ret == MMSYSERR_NOERROR) { - fMidiDestination[i].fHandle = handle; - if (!InitHeaders(&fMidiDestination[i])) { + fMidiDestination[devindex].fHandle = handle; + if (!InitHeaders(&fMidiDestination[devindex])) { jack_error("memory allocation failed"); midiInClose(handle); - goto error; - //continue; + continue; } - ret = midiInPrepareHeader(handle, fMidiDestination[i].fHeader, sizeof(MIDIHDR)); + ret = midiInPrepareHeader(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR)); if (ret == MMSYSERR_NOERROR) { - fMidiDestination[i].fHeader->dwUser = 1; - ret = midiInAddBuffer(handle, fMidiDestination[i].fHeader, sizeof(MIDIHDR)); + fMidiDestination[devindex].fHeader->dwUser = 1; + ret = midiInAddBuffer(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR)); if (ret == MMSYSERR_NOERROR) { ret = midiInStart(handle); if (ret != MMSYSERR_NOERROR) { jack_error("midiInStart error"); - CloseInput(&fMidiDestination[i]); - goto error; + CloseInput(&fMidiDestination[devindex]); + continue; } } else { jack_error ("midiInAddBuffer error"); - CloseInput(&fMidiDestination[i]); - goto error; + CloseInput(&fMidiDestination[devindex]); + continue; } } else { jack_error("midiInPrepareHeader error"); midiInClose(handle); - goto error; + continue; } } else { jack_error ("midiInOpen error"); - goto error; + continue; } + devindex += 1; } + fRealCaptureChannels = devindex; + fCaptureChannels = devindex; fMidiSource = new MidiSlot[fRealPlaybackChannels]; assert(fMidiSource); // Real output + devindex = 0; for (int i = 0; i < fRealPlaybackChannels; i++) { MMRESULT res; HMIDIOUT handle; - fMidiSource[i].fIndex = i; - UINT ret = midiOutOpen(&handle, fMidiSource[i].fIndex, 0L, 0L, CALLBACK_NULL); + fMidiSource[devindex].fIndex = i; + UINT ret = midiOutOpen(&handle, fMidiSource[devindex].fIndex, 0L, 0L, CALLBACK_NULL); if (ret == MMSYSERR_NOERROR) { - fMidiSource[i].fHandle = handle; - if (!InitHeaders(&fMidiSource[i])) { + fMidiSource[devindex].fHandle = handle; + if (!InitHeaders(&fMidiSource[devindex])) { jack_error("memory allocation failed"); midiOutClose(handle); - //continue; - goto error; + continue; } - res = midiOutPrepareHeader(handle, fMidiSource[i].fHeader, sizeof(MIDIHDR)); + res = midiOutPrepareHeader(handle, fMidiSource[devindex].fHeader, sizeof(MIDIHDR)); if (res != MMSYSERR_NOERROR) { jack_error("midiOutPrepareHeader error %d %d %d", i, handle, res); - //continue; - goto error; + continue; } else { - fMidiSource[i].fHeader->dwUser = 1; + fMidiSource[devindex].fHeader->dwUser = 1; } } else { jack_error("midiOutOpen error"); - goto error; + continue; } + devindex += 1; } - + fRealPlaybackChannels = devindex; + fPlaybackChannels = devindex; return 0; - -error: - Close(); - return -1; } void JackWinMMEDriver::CloseInput(MidiSlot* slot) @@ -297,7 +297,7 @@ int JackWinMMEDriver::Attach() for (i = 0; i < fCaptureChannels; i++) { MIDIINCAPS caps; - res = midiInGetDevCaps(i, &caps, sizeof(caps)); + res = midiInGetDevCaps(fMidiSource[i].fIndex, &caps, sizeof(caps)); if (res == MMSYSERR_NOERROR) { snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); } else { @@ -319,7 +319,7 @@ int JackWinMMEDriver::Attach() for (i = 0; i < fPlaybackChannels; i++) { MIDIOUTCAPS caps; - res = midiOutGetDevCaps(i, &caps, sizeof(caps)); + res = midiOutGetDevCaps(fMidiDestination[i].fIndex, &caps, sizeof(caps)); if (res == MMSYSERR_NOERROR) { snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); } else { @@ -415,7 +415,7 @@ extern "C" SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() { jack_driver_desc_t * desc; - unsigned int i; + //unsigned int i; desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); strcpy(desc->name, "winmme"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1