[SCM] calf/master: + JACK host: use more self-explanatory names for JACK ports (keep the old ones as aliases for users' LASH sessions)

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:38:48 UTC 2013


The following commit has been merged in the master branch:
commit c80fe5ee5d246f4c114a7af349795b1bbc6232c9
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sun Jan 4 22:58:06 2009 +0000

    + JACK host: use more self-explanatory names for JACK ports (keep the old ones as aliases for users' LASH sessions)

diff --git a/src/calf/jackhost.h b/src/calf/jackhost.h
index 9a2b0fb..22d1d5b 100644
--- a/src/calf/jackhost.h
+++ b/src/calf/jackhost.h
@@ -122,6 +122,7 @@ public:
     bool changed;
     port midi_port;
     std::string name;
+    std::string instance_name;
     virtual port *get_inputs()=0;
     virtual port *get_outputs()=0;
     virtual port *get_midi_port() { return get_midi() ? &midi_port : NULL; }
@@ -130,7 +131,9 @@ public:
     virtual void cache_ports()=0;
     virtual int process(jack_nframes_t nframes)=0;
     
-    jack_host_base() {
+    jack_host_base(const std::string &_name, const std::string &_instance_name) {
+        name = _name;
+        instance_name = _instance_name;
         client = NULL;
         changed = true;
     }
@@ -191,7 +194,8 @@ public:
     float param_values[param_count];
     float midi_meter;
     
-    jack_host()
+    jack_host(const std::string &_name, const std::string &_instance_name)
+    : jack_host_base(_name, _instance_name)
     {
         for (int i = 0; i < Module::param_count; i++) {
             Module::params[i] = &param_values[i];
@@ -348,7 +352,7 @@ public:
     }
 };
 
-extern jack_host_base *create_jack_host(const char *name);
+extern jack_host_base *create_jack_host(const char *name, const std::string &instance_name);
 
 #endif
 
diff --git a/src/jackhost.cpp b/src/jackhost.cpp
index e330d07..4e9f262 100644
--- a/src/jackhost.cpp
+++ b/src/jackhost.cpp
@@ -47,9 +47,9 @@ plugin_gui_window *gui_win;
 
 const char *client_name = "calfhost";
 
-jack_host_base *calf_plugins::create_jack_host(const char *effect_name)
+jack_host_base *calf_plugins::create_jack_host(const char *effect_name, const std::string &instance_name)
 {
-    #define PER_MODULE_ITEM(name, isSynth, jackname) if (!strcasecmp(effect_name, jackname)) return new jack_host<name##_audio_module>();
+    #define PER_MODULE_ITEM(name, isSynth, jackname) if (!strcasecmp(effect_name, jackname)) return new jack_host<name##_audio_module>(effect_name, instance_name);
     #include <calf/modulelist.h>
     return NULL;
 }
@@ -68,31 +68,39 @@ void jack_host_base::open(jack_client *_client)
 
 void jack_host_base::create_ports() {
     char buf[32];
+    char buf2[64];
+    static const char *suffixes[] = { "l", "r", "2l", "2r" };
     port *inputs = get_inputs();
     port *outputs = get_outputs();
     int in_count = get_input_count(), out_count = get_output_count();
     for (int i=0; i<in_count; i++) {
-        sprintf(buf, client->input_name.c_str(), client->input_nr++);
+        sprintf(buf, "%s_in_%s", instance_name.c_str(), suffixes[i]);
+        sprintf(buf2, client->input_name.c_str(), client->input_nr++);
         inputs[i].name = buf;
         inputs[i].handle = jack_port_register(client->client, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput , 0);
         inputs[i].data = NULL;
         if (!inputs[i].handle)
             throw text_exception("Could not create JACK input port");
+        jack_port_set_alias(inputs[i].handle, buf2);
     }
     for (int i=0; i<out_count; i++) {
-        sprintf(buf, client->output_name.c_str(), client->output_nr++);
+        sprintf(buf, "%s_out_%s", instance_name.c_str(), suffixes[i]);
+        sprintf(buf2, client->output_name.c_str(), client->output_nr++);
         outputs[i].name = buf;
         outputs[i].handle = jack_port_register(client->client, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput , 0);
         outputs[i].data = NULL;
         if (!outputs[i].handle)
             throw text_exception("Could not create JACK output port");
+        jack_port_set_alias(outputs[i].handle, buf2);
     }
     if (get_midi()) {
-        sprintf(buf, client->midi_name.c_str(), client->midi_nr++);
+        sprintf(buf, "%s_midi_in", instance_name.c_str());
+        sprintf(buf2, client->midi_name.c_str(), client->midi_nr++);
         midi_port.name = buf;
         midi_port.handle = jack_port_register(client->client, buf, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
         if (!midi_port.handle)
             throw text_exception("Could not create JACK MIDI port");
+        jack_port_set_alias(midi_port.handle, buf2);
     }
 }
 
@@ -187,6 +195,7 @@ struct host_session: public main_window_owner_iface
     main_window *main_win;
     int lash_source_id;
     bool restoring_session;
+    std::set<std::string> instances;
     
     host_session();
     void open();
@@ -211,6 +220,7 @@ struct host_session: public main_window_owner_iface
 #endif
     virtual void new_plugin(const char *name);    
     virtual void remove_plugin(plugin_ctl_iface *plugin);
+    std::string get_next_instance_name(const std::string &effect_name);
 };
 
 host_session::host_session()
@@ -226,9 +236,23 @@ host_session::host_session()
     main_win->set_owner(this);
 }
 
+std::string host_session::get_next_instance_name(const std::string &effect_name)
+{
+    if (!instances.count(effect_name))
+        return effect_name;
+    for (int i = 2; ; i++)
+    {
+        string tmp = string(effect_name) + i2s(i);
+        if (!instances.count(tmp))
+            return tmp;
+    }
+    assert(0);
+    return "-";
+}
+
 void host_session::add_plugin(string name, string preset)
 {
-    jack_host_base *jh = create_jack_host(name.c_str());
+    jack_host_base *jh = create_jack_host(name.c_str(), get_next_instance_name(name));
     if (!jh) {
 #ifdef ENABLE_EXPERIMENTAL
 #else
@@ -241,6 +265,7 @@ void host_session::add_plugin(string name, string preset)
             s = s.substr(0, s.length() - 2);
         throw text_exception("Unknown plugin name; allowed are: " + s);
     }
+    instances.insert(jh->instance_name);
     jh->open(&client);
     
     plugins.push_back(jh);
@@ -281,9 +306,10 @@ void host_session::open()
 
 void host_session::new_plugin(const char *name)
 {
-    jack_host_base *jh = create_jack_host(name);
+    jack_host_base *jh = create_jack_host(name, get_next_instance_name(name));
     if (!jh)
         return;
+    instances.insert(jh->instance_name);
     jh->open(&client);
     
     plugins.push_back(jh);
diff --git a/src/main_win.cpp b/src/main_win.cpp
index 715caf9..7bb84f7 100644
--- a/src/main_win.cpp
+++ b/src/main_win.cpp
@@ -250,7 +250,7 @@ void main_window::update_strip(plugin_ctl_iface *plugin)
 void main_window::open_gui(plugin_ctl_iface *plugin)
 {
     plugin_gui_window *gui_win = new plugin_gui_window(this);
-    gui_win->create(plugin, (prefix + plugin->get_name()).c_str(), plugin->get_id());
+    gui_win->create(plugin, (prefix + plugin->get_label()).c_str(), plugin->get_id());
     gtk_widget_show_all(GTK_WIDGET(gui_win->toplevel));
     plugins[plugin]->gui_win = gui_win; 
 }

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list