From dcb782e68291096ad5691162c7cd6f70fed354ac Mon Sep 17 00:00:00 2001 From: Stephane Letz Date: Thu, 18 Apr 2013 13:01:47 +0200 Subject: [PATCH] Port naming fix in CoreMidiDriver. --- common/JackServer.cpp | 33 ++++++++++++++----- macosx/coremidi/JackCoreMidiDriver.cpp | 10 +++--- .../coremidi/JackCoreMidiVirtualInputPort.cpp | 8 +++-- .../coremidi/JackCoreMidiVirtualInputPort.h | 2 +- .../JackCoreMidiVirtualOutputPort.cpp | 6 ++-- .../coremidi/JackCoreMidiVirtualOutputPort.h | 2 +- 6 files changed, 40 insertions(+), 21 deletions(-) diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 962da878..b98bcea4 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -328,13 +328,20 @@ JackDriverInfo* JackServer::AddSlave(jack_driver_desc_t* driver_desc, JSList* dr JackDriverInfo* info = new JackDriverInfo(); JackDriverClientInterface* slave = info->Open(driver_desc, fEngine, GetSynchroTable(), driver_params); if (slave == NULL) { - delete info; - return NULL; + goto error; } - slave->Attach(); + if (slave->Attach() < 0) { + goto error; + } + slave->SetMaster(false); fAudioDriver->AddSlave(slave); return info; + +error: + slave->Close(); + delete info; + return NULL; } void JackServer::RemoveSlave(JackDriverInfo* info) @@ -347,6 +354,9 @@ void JackServer::RemoveSlave(JackDriverInfo* info) int JackServer::SwitchMaster(jack_driver_desc_t* driver_desc, JSList* driver_params) { + std::list slave_list; + std::list::const_iterator it; + /// Remove current master fAudioDriver->Stop(); fAudioDriver->Detach(); @@ -357,14 +367,12 @@ int JackServer::SwitchMaster(jack_driver_desc_t* driver_desc, JSList* driver_par JackDriverClientInterface* master = info->Open(driver_desc, fEngine, GetSynchroTable(), driver_params); if (master == NULL) { - delete info; - return -1; + goto error; } // Get slaves list - std::list slave_list = fAudioDriver->GetSlaves(); - std::list::const_iterator it; - + slave_list = fAudioDriver->GetSlaves(); + // Move slaves in new master for (it = slave_list.begin(); it != slave_list.end(); it++) { JackDriverInterface* slave = *it; @@ -377,9 +385,16 @@ int JackServer::SwitchMaster(jack_driver_desc_t* driver_desc, JSList* driver_par // Activate master fAudioDriver = master; fDriverInfo = info; - fAudioDriver->Attach(); + if (fAudioDriver->Attach() < 0) { + goto error; + } + fAudioDriver->SetMaster(true); return fAudioDriver->Start(); + +error: + delete info; + return -1; } //---------------------- diff --git a/macosx/coremidi/JackCoreMidiDriver.cpp b/macosx/coremidi/JackCoreMidiDriver.cpp index 1200d875..1b34567d 100644 --- a/macosx/coremidi/JackCoreMidiDriver.cpp +++ b/macosx/coremidi/JackCoreMidiDriver.cpp @@ -210,7 +210,7 @@ bool JackCoreMidiDriver::OpenAux() virtual_input_ports[vi_count] = new JackCoreMidiVirtualInputPort(fAliasName, client_name, capture_driver_name, - vi_count + pi_count, client, + vi_count, vi_count + pi_count, client, time_ratio); } catch (std::exception e) { jack_error("JackCoreMidiDriver::Open - while creating virtual " @@ -235,7 +235,7 @@ bool JackCoreMidiDriver::OpenAux() virtual_output_ports[vo_count] = new JackCoreMidiVirtualOutputPort(fAliasName, client_name, playback_driver_name, - vo_count + po_count, client, + vo_count, vo_count + po_count, client, time_ratio); } catch (std::exception e) { jack_error("JackCoreMidiDriver::Open - while creating virtual " @@ -595,7 +595,7 @@ JackCoreMidiDriver::Open(bool capturing_aux, bool playing_aux, int in_channels_a return -1; } else { JackSleep(10000); - jack_info("CoreMIDI driver is running..."); + jack_info("CoreMIDI driver is opened..."); } return 0; @@ -819,8 +819,8 @@ extern "C" { { const JSList * node; const jack_driver_param_t * param; - int virtual_in = 1; - int virtual_out = 1; + int virtual_in = 2; + int virtual_out = 2; for (node = params; node; node = jack_slist_next (node)) { param = (const jack_driver_param_t *) node->data; diff --git a/macosx/coremidi/JackCoreMidiVirtualInputPort.cpp b/macosx/coremidi/JackCoreMidiVirtualInputPort.cpp index 4ed773f8..511a6efb 100644 --- a/macosx/coremidi/JackCoreMidiVirtualInputPort.cpp +++ b/macosx/coremidi/JackCoreMidiVirtualInputPort.cpp @@ -44,13 +44,15 @@ HandleInputEvent(const MIDIPacketList *packet_list, void *port, JackCoreMidiVirtualInputPort:: JackCoreMidiVirtualInputPort(const char *alias_name, const char *client_name, - const char *driver_name, int index, + const char *driver_name, int base_index, int index, MIDIClientRef client, double time_ratio, size_t max_bytes, size_t max_messages): JackCoreMidiInputPort(time_ratio, max_bytes, max_messages) { - CFStringRef name = CFStringCreateWithCString(0, "virtual", - CFStringGetSystemEncoding()); + std::stringstream stream; + stream << "virtual" << (base_index + 1); + CFStringRef name = CFStringCreateWithCString(0, stream.str().c_str(), + CFStringGetSystemEncoding()); if (! name) { throw std::bad_alloc(); } diff --git a/macosx/coremidi/JackCoreMidiVirtualInputPort.h b/macosx/coremidi/JackCoreMidiVirtualInputPort.h index e48126c4..f2d968c2 100644 --- a/macosx/coremidi/JackCoreMidiVirtualInputPort.h +++ b/macosx/coremidi/JackCoreMidiVirtualInputPort.h @@ -36,7 +36,7 @@ namespace Jack { JackCoreMidiVirtualInputPort(const char *alias_name, const char *client_name, - const char *driver_name, int index, + const char *driver_name, int base_index, int index, MIDIClientRef client, double time_ratio, size_t max_bytes=4096, size_t max_messages=1024); diff --git a/macosx/coremidi/JackCoreMidiVirtualOutputPort.cpp b/macosx/coremidi/JackCoreMidiVirtualOutputPort.cpp index 0a87682e..9bd1ebe9 100644 --- a/macosx/coremidi/JackCoreMidiVirtualOutputPort.cpp +++ b/macosx/coremidi/JackCoreMidiVirtualOutputPort.cpp @@ -28,14 +28,16 @@ using Jack::JackCoreMidiVirtualOutputPort; JackCoreMidiVirtualOutputPort:: JackCoreMidiVirtualOutputPort(const char *alias_name, const char *client_name, - const char *driver_name, int index, + const char *driver_name, int base_index, int index, MIDIClientRef client, double time_ratio, size_t max_bytes, size_t max_messages): JackCoreMidiOutputPort(time_ratio, max_bytes, max_messages) { - CFStringRef name = CFStringCreateWithCString(0, "virtual", + std::stringstream stream; + stream << "virtual" << (base_index + 1); + CFStringRef name = CFStringCreateWithCString(0, stream.str().c_str(), CFStringGetSystemEncoding()); if (! name) { throw std::bad_alloc(); diff --git a/macosx/coremidi/JackCoreMidiVirtualOutputPort.h b/macosx/coremidi/JackCoreMidiVirtualOutputPort.h index 61529a98..f1620c1d 100644 --- a/macosx/coremidi/JackCoreMidiVirtualOutputPort.h +++ b/macosx/coremidi/JackCoreMidiVirtualOutputPort.h @@ -35,7 +35,7 @@ namespace Jack { JackCoreMidiVirtualOutputPort(const char *alias_name, const char *client_name, - const char *driver_name, int index, + const char *driver_name, int base_index, int index, MIDIClientRef client, double time_ratio, size_t max_bytes=4096, size_t max_messages=1024);