diff --git a/common/shm.h b/common/shm.h index ed5a953f..f1edc8ed 100644 --- a/common/shm.h +++ b/common/shm.h @@ -14,7 +14,7 @@ extern "C" { #endif -#define MAX_SERVERS 8 /* maximum concurrent servers */ +#define MAX_SERVERS 64 /* maximum concurrent servers */ #define MAX_SHM_ID 256 /* generally about 16 per server */ #define JACK_SERVER_NAME_SIZE 256 /* maximum length of server name */ #define JACK_SHM_MAGIC 0x4a41434b /* shm magic number: "JACK" */ diff --git a/windows/jackd.workspace b/windows/jackd.workspace index 4384140e..c424a7b4 100644 --- a/windows/jackd.workspace +++ b/windows/jackd.workspace @@ -5,7 +5,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/windows/winmme/JackWinMMEDriver.cpp b/windows/winmme/JackWinMMEDriver.cpp index 455118a2..96bebda1 100644 --- a/windows/winmme/JackWinMMEDriver.cpp +++ b/windows/winmme/JackWinMMEDriver.cpp @@ -52,6 +52,9 @@ JackWinMMEDriver::Attach() latency_range.max = latency; latency_range.min = latency; + jack_info("JackWinMMEDriver::Attach - fCaptureChannels %d", fCaptureChannels); + jack_info("JackWinMMEDriver::Attach - fPlaybackChannels %d", fPlaybackChannels); + // Inputs for (int i = 0; i < fCaptureChannels; i++) { JackWinMMEInputPort *input_port = input_ports[i]; @@ -130,9 +133,13 @@ JackWinMMEDriver::Open(bool capturing, bool playing, int in_channels, { const char *client_name = fClientControl.fName; int input_count = 0; + int output_count = 0; int num_potential_inputs = midiInGetNumDevs(); int num_potential_outputs = midiOutGetNumDevs(); - int output_count = 0; + + jack_info("JackWinMMEDriver::Open - num_potential_inputs %d", num_potential_inputs); + jack_info("JackWinMMEDriver::Open - num_potential_outputs %d", num_potential_outputs); + if (num_potential_inputs) { try { input_ports = new JackWinMMEInputPort *[num_potential_inputs]; @@ -175,6 +182,11 @@ JackWinMMEDriver::Open(bool capturing, bool playing, int in_channels, output_count++; } } + + jack_info("JackWinMMEDriver::Open - input_count %d", input_count); + jack_info("JackWinMMEDriver::Open - output_count %d", output_count); + + if (! (input_count || output_count)) { jack_error("JackWinMMEDriver::Open - no WinMME inputs or outputs " "allocated."); @@ -200,10 +212,25 @@ JackWinMMEDriver::Open(bool capturing, bool playing, int in_channels, int JackWinMMEDriver::Read() { + jack_nframes_t buffer_size = fEngineControl->fBufferSize; for (int i = 0; i < fCaptureChannels; i++) { input_ports[i]->ProcessJack(GetInputBuffer(i), buffer_size); } + + return 0; +} + + +int +JackWinMMEDriver::Write() +{ + /* + jack_nframes_t buffer_size = fEngineControl->fBufferSize; + for (int i = 0; i < fPlaybackChannels; i++) { + output_ports[i]->ProcessJack(GetOutputBuffer(i), buffer_size); + } + */ return 0; } @@ -287,16 +314,6 @@ JackWinMMEDriver::Stop() return result; } -int -JackWinMMEDriver::Write() -{ - jack_nframes_t buffer_size = fEngineControl->fBufferSize; - for (int i = 0; i < fPlaybackChannels; i++) { - output_ports[i]->ProcessJack(GetOutputBuffer(i), buffer_size); - } - return 0; -} - #ifdef __cplusplus extern "C" { diff --git a/windows/winmme/JackWinMMEInputPort.cpp b/windows/winmme/JackWinMMEInputPort.cpp index 0adf3bec..6c573cf0 100644 --- a/windows/winmme/JackWinMMEInputPort.cpp +++ b/windows/winmme/JackWinMMEInputPort.cpp @@ -78,6 +78,23 @@ JackWinMMEInputPort::JackWinMMEInputPort(const char *alias_name, goto unprepare_header; } + MIDIINCAPS capabilities; + char *name_tmp; + result = midiInGetDevCaps(index, &capabilities, sizeof(capabilities)); + /* + Devin : FIXME + if (result != MMSYSERR_NOERROR) { + WriteMMError("JackWinMMEOutputPort [constructor]", "midiOutGetDevCaps", + result); + name_tmp = driver_name; + } else { + name_tmp = capabilities.szPname; + } + */ + snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", alias_name, driver_name, + index + 1); + snprintf(name, sizeof(name) - 1, "%s:capture_%d", client_name, index + 1); + jack_event = 0; started = false; write_queue_ptr.release(); @@ -147,6 +164,12 @@ JackWinMMEInputPort::GetAlias() return alias; } +const char * +JackWinMMEInputPort::GetName() +{ + return name; +} + void JackWinMMEInputPort::GetErrorString(MMRESULT error, LPTSTR text) { @@ -156,12 +179,6 @@ JackWinMMEInputPort::GetErrorString(MMRESULT error, LPTSTR text) } } -const char * -JackWinMMEInputPort::GetName() -{ - return name; -} - void JackWinMMEInputPort::ProcessJack(JackMidiBuffer *port_buffer, jack_nframes_t frames) { diff --git a/windows/winmme/JackWinMMEInputPort.h b/windows/winmme/JackWinMMEInputPort.h index dd4c53f1..568bd9f5 100644 --- a/windows/winmme/JackWinMMEInputPort.h +++ b/windows/winmme/JackWinMMEInputPort.h @@ -50,15 +50,17 @@ namespace Jack { MMRESULT result); char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + HMIDIIN handle; jack_midi_event_t *jack_event; - char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; - bool started; jack_midi_data_t *sysex_buffer; MIDIHDR sysex_header; JackMidiAsyncQueue *thread_queue; JackMidiBufferWriteQueue *write_queue; + bool started; + public: JackWinMMEInputPort(const char *alias_name, const char *client_name, diff --git a/windows/winmme/JackWinMMEOutputPort.cpp b/windows/winmme/JackWinMMEOutputPort.cpp index eb9ba49e..0b05cb2c 100644 --- a/windows/winmme/JackWinMMEOutputPort.cpp +++ b/windows/winmme/JackWinMMEOutputPort.cpp @@ -88,7 +88,7 @@ JackWinMMEOutputPort::JackWinMMEOutputPort(const char *alias_name, index + 1); snprintf(name, sizeof(name) - 1, "%s:playback_%d", client_name, index + 1); thread_ptr.release(); - thread_queue_ptr.release(); + thread_queue_ptr.release(); return; destroy_thread_queue_semaphore: @@ -132,9 +132,15 @@ bool JackWinMMEOutputPort::Execute() { for (;;) { + jack_log("JackWinMMEOutputPort::Execute TOTO"); + JackSleep(100000); + if (! Wait(thread_queue_semaphore)) { + jack_log("JackWinMMEOutputPort::Execute BREAK"); + break; } + /* jack_midi_event_t *event = thread_queue->DequeueEvent(); if (! event) { break; @@ -214,6 +220,7 @@ JackWinMMEOutputPort::Execute() "midiOutUnprepareHeader", result); break; } + */ } stop_execution: return false; @@ -358,6 +365,8 @@ JackWinMMEOutputPort::Stop() bool JackWinMMEOutputPort::Wait(HANDLE semaphore) { + jack_log("JackWinMMEOutputPort::Wait %d", semaphore); + DWORD result = WaitForSingleObject(semaphore, INFINITE); switch (result) { case WAIT_FAILED: