diff -Nur audacious-plugins-fedora-2.1-orig/src/ladspa/ladspa.c audacious-plugins-fedora-2.1-ladspa/src/ladspa/ladspa.c --- audacious-plugins-fedora-2.1-orig/src/ladspa/ladspa.c 2009-07-07 00:40:36.000000000 +0200 +++ audacious-plugins-fedora-2.1-ladspa/src/ladspa/ladspa.c 2009-05-14 04:41:59.000000000 +0200 @@ -43,57 +43,58 @@ #define MAX_SAMPLES 8192 #define MAX_KNOBS 64 -typedef struct -{ - char *name; - char *filename; - long int id; - long int unique_id; - gboolean stereo; +typedef struct { + char *name; + char *filename; + long int id; + long int unique_id; + gboolean stereo; } ladspa_plugin; -typedef struct -{ - void *library; - char *filename; - gboolean stereo; - gboolean restored; - const LADSPA_Descriptor *descriptor; - LADSPA_Handle *handle; /* left or mono */ - LADSPA_Handle *handle2; /* right stereo */ - GtkWidget *window; - guint timeout; - GtkAdjustment *adjustments[MAX_KNOBS]; - LADSPA_Data knobs[MAX_KNOBS]; +typedef struct { + void *library; + char *filename; + gboolean stereo; + gboolean restored; + const LADSPA_Descriptor *descriptor; + LADSPA_Handle *handle; /* left or mono */ + LADSPA_Handle *handle2; /* right stereo */ + GtkWidget *window; + guint timeout; + GtkAdjustment *adjustments[MAX_KNOBS]; + LADSPA_Data knobs[MAX_KNOBS]; } plugin_instance; -static void start(void); -static void stop(void); -static int apply_effect(gpointer * d, gint length, AFormat afmt, gint srate, gint nch); +static void start (void); +static void stop (void); +static int apply_effect (gpointer *d, gint length, AFormat afmt, + gint srate, gint nch); static void configure(void); -static void restore(void); -static plugin_instance *add_plugin(ladspa_plugin * plugin); +static void restore (void); +static plugin_instance * add_plugin (ladspa_plugin *plugin); static void find_all_plugins(void); static void find_plugins(char *path_entry); -static ladspa_plugin *get_plugin_by_id(const gchar * basename, long id); -static plugin_instance *load(char *filename, long int num); -static void reboot_plugins(void); -static void boot_plugin(plugin_instance * instance); -static void port_assign(plugin_instance * instance); -static void ladspa_shutdown(plugin_instance * instance); -static void unload(plugin_instance * instance); +static ladspa_plugin *get_plugin_by_id(long id); +static plugin_instance * load (char *filename, long int num); +static void reboot_plugins (void); +static void boot_plugin (plugin_instance *instance); +static void port_assign(plugin_instance *instance); +static void ladspa_shutdown (plugin_instance *instance); +static void unload (plugin_instance *instance); -static GtkWidget *make_plugin_clist(void); +static GtkWidget * make_plugin_clist(void); static void make_run_clist(void); -static void sort_column(GtkCList * clist, gint column, gpointer user_data); -static void select_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data); -static void unselect_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data); -static void add_plugin_clicked(GtkButton * button, gpointer user_data); -static void remove_plugin_clicked(GtkButton * button, gpointer user_data); -static void configure_plugin_clicked(GtkButton * button, gpointer user_data); +static void sort_column(GtkCList *clist, gint column, gpointer user_data); +static void select_plugin(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data); +static void unselect_plugin(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data); +static void add_plugin_clicked (GtkButton *button, gpointer user_data); +static void remove_plugin_clicked (GtkButton *button, gpointer user_data); +static void configure_plugin_clicked (GtkButton *button, gpointer user_data); -static void draw_plugin(plugin_instance * instance); +static void draw_plugin(plugin_instance *instance); static LADSPA_Data left[MAX_SAMPLES], right[MAX_SAMPLES], trash[MAX_SAMPLES]; @@ -101,1034 +102,873 @@ static GSList *plugin_list, *running_plugins; -static ladspa_plugin *selected_plugin; -static plugin_instance *selected_instance; +static ladspa_plugin * selected_plugin; +static plugin_instance * selected_instance; -static struct -{ - AFormat afmt; - gint srate; - gint nch; - gboolean ignore; - gboolean running; - gboolean initialised; -} state = -{ -0, 0, 0, FALSE, FALSE, FALSE}; +static struct { + AFormat afmt; + gint srate; + gint nch; + gboolean ignore; + gboolean running; + gboolean initialised; +} state = { 0, 0, 0, FALSE, FALSE, FALSE}; static GtkWidget *config_window = NULL, *run_clist = NULL; static EffectPlugin ladspa_ep = { - .description = PLUGIN_NAME, - .init = start, - .cleanup = stop, - .configure = configure, - .mod_samples = apply_effect, + .description = PLUGIN_NAME, + .init = start, + .cleanup = stop, + .configure = configure, + .mod_samples = apply_effect, }; EffectPlugin *ladspa_eplist[] = { &ladspa_ep, NULL }; DECLARE_PLUGIN(ladspa, NULL, NULL, NULL, NULL, ladspa_eplist, NULL, NULL, NULL); -static void start(void) +static void start (void) { - if (state.initialised == FALSE) - { - restore(); - } - else if (state.srate > 0) - { - reboot_plugins(); - } - state.running = TRUE; + if (state.initialised == FALSE) { + restore(); + } else if (state.srate > 0) { + reboot_plugins(); + } + state.running = TRUE; } -static void restore(void) +static void restore (void) { - GSList *list; - mcs_handle_t *db; - gint k, plugins = 0; - - if (plugin_list == NULL) - find_all_plugins(); - - db = aud_cfg_db_open(); - - aud_cfg_db_get_int(db, "ladspa", "plugins", &plugins); - - /* XXX: this sucks. we need some way to iterate over these sections. --nenolod */ - for (list = plugin_list; list != NULL; list = g_slist_next(list)) - { - ladspa_plugin *plugin = (ladspa_plugin *) list->data; - gchar *bn; - - bn = g_path_get_basename(plugin->filename); + mcs_handle_t *db; + gint k, plugins= 0; - for (k = 0; k < plugins; ++k) - { - gint id; - int port, ports = 0; - gchar *section; - plugin_instance *instance; + db = aud_cfg_db_open(); - section = g_strdup_printf("ladspa_plugin:%s:%d", bn, k); - - aud_cfg_db_get_int(db, section, "id", &id); - aud_cfg_db_get_int(db, section, "ports", &ports); - - instance = add_plugin(get_plugin_by_id(bn, id)); - if (!instance) - continue; /* couldn't load this plugin */ - - for (port = 0; port < ports && port < MAX_KNOBS; ++port) - { - gchar *key = g_strdup_printf("port%d", port); - aud_cfg_db_get_float(db, section, key, &(instance->knobs[port])); - } - - instance->restored = TRUE; - g_free(section); - } + aud_cfg_db_get_int(db, "ladspa", "plugins", &plugins); + for (k= 0; k < plugins; ++k) { + gint id; + int port, ports= 0; + plugin_instance *instance; + gchar *section = g_strdup_printf("ladspa_plugin%d", k); - g_free(bn); + aud_cfg_db_get_int(db, section, "id", &id); + instance = add_plugin(get_plugin_by_id(id)); + if (!instance) continue; /* couldn't load this plugin */ + aud_cfg_db_get_int(db, section, "ports", &ports); + for (port= 0; port < ports && port < MAX_KNOBS; ++port) { + gchar *key = g_strdup_printf("port%d", port); + aud_cfg_db_get_float(db, section, key, &(instance->knobs[port])); } + instance->restored = TRUE; + g_free(section); + } - aud_cfg_db_close(db); - state.initialised = TRUE; + state.initialised = TRUE; + aud_cfg_db_close(db); } -static ladspa_plugin *get_plugin_by_id(const gchar * basename, long id) +static ladspa_plugin *get_plugin_by_id(long id) { - GSList *list; - ladspa_plugin *plugin; - - if (plugin_list == NULL) - find_all_plugins(); - - for (list = plugin_list; list != NULL; list = g_slist_next(list)) - { - gchar *bn; - plugin = (ladspa_plugin *) list->data; + GSList *list; + ladspa_plugin *plugin; - bn = g_path_get_basename(plugin->filename); - if (plugin->unique_id == id && !g_ascii_strcasecmp(basename, bn)) - { - g_free(bn); - return plugin; - } + if (plugin_list == NULL) { + find_all_plugins(); + } - g_free(bn); + for (list= plugin_list; list != NULL; list = g_slist_next(list)) { + plugin = (ladspa_plugin *) list->data; + if (plugin->unique_id == id) { + return plugin; } + } - return NULL; + return NULL; } -static void find_all_plugins(void) +static void find_all_plugins (void) { - char *ladspa_path, *directory; + char *ladspa_path, *directory; - plugin_list = NULL; /* empty list */ - ladspa_path = getenv("LADSPA_PATH"); - if (ladspa_path == NULL) - { - /* Fallback, look in obvious places */ - find_plugins("/usr/lib/ladspa"); - find_plugins("/usr/local/lib/ladspa"); - } - else - { - ladspa_path = g_strdup(ladspa_path); + plugin_list = NULL; /* empty list */ + ladspa_path= getenv("LADSPA_PATH"); + if (ladspa_path == NULL) { + /* Fallback, look in obvious places */ + find_plugins("/usr/lib/ladspa"); + find_plugins("/usr/local/lib/ladspa"); + } else { + ladspa_path = g_strdup(ladspa_path); - directory = strtok(ladspa_path, ":"); - while (directory != NULL) - { - find_plugins(directory); - directory = strtok(NULL, ":"); - } - g_free(ladspa_path); + directory = strtok(ladspa_path, ":"); + while (directory != NULL) { + find_plugins(directory); + directory = strtok(NULL, ":"); } + g_free(ladspa_path); + } } -static plugin_instance *load(char *filename, long int num) +static plugin_instance * load (char *filename, long int num) { - LADSPA_Descriptor_Function descriptor_fn; - plugin_instance *instance; + LADSPA_Descriptor_Function descriptor_fn; + plugin_instance *instance; - instance = g_new0(plugin_instance, 1); + instance = g_new0(plugin_instance, 1); - instance->filename = filename; - instance->library = dlopen(filename, RTLD_NOW); - if (instance->library == NULL) - { - g_free(instance); - return NULL; - } - descriptor_fn = dlsym(instance->library, "ladspa_descriptor"); - if (descriptor_fn == NULL) - { - g_free(instance); - return NULL; - } - instance->descriptor = descriptor_fn(num); + instance->filename = filename; + instance->library = dlopen(filename, RTLD_NOW); + if (instance->library == NULL) { + g_free(instance); + return NULL; + } + descriptor_fn = dlsym(instance->library, "ladspa_descriptor"); + if (descriptor_fn == NULL) { + g_free(instance); + return NULL; + } + instance->descriptor = descriptor_fn(num); - return instance; + return instance; } -static void unload(plugin_instance * instance) +static void unload (plugin_instance * instance) { - if (instance->window) - { - gtk_widget_destroy(instance->window); - instance->window = NULL; - } + if (instance->window) { + gtk_widget_destroy(instance->window); + instance->window = NULL; + } - if (instance->timeout) - { - gtk_timeout_remove(instance->timeout); - } + if (instance->timeout) { + gtk_timeout_remove(instance->timeout); + } - ladspa_shutdown(instance); + ladspa_shutdown(instance); - if (instance->library) - { - dlclose(instance->library); - } + if (instance->library) { + dlclose(instance->library); + } } -static void stop(void) +static void stop (void) { - GSList *list; - mcs_handle_t *db; - gint plugins = 0; + GSList *list; + mcs_handle_t *db; + gint plugins = 0; - if (state.running == FALSE) - { - return; - } - state.running = FALSE; - db = aud_cfg_db_open(); - G_LOCK(running_plugins); - for (list = running_plugins; list != NULL; list = g_slist_next(list)) - { - plugin_instance *instance = (plugin_instance *) list->data; - gchar *bn; - gchar *section; - int port, ports = 0; - - bn = g_path_get_basename(instance->filename); - section = g_strdup_printf("ladspa_plugin:%s:%ld", bn, instance->descriptor->UniqueID); - g_free(bn); + if (state.running == FALSE) { + return; + } + state.running = FALSE; + db = aud_cfg_db_open(); + G_LOCK (running_plugins); + for (list= running_plugins; list != NULL; list = g_slist_next(list)) { + plugin_instance *instance = (plugin_instance *) list->data; + gchar *section = g_strdup_printf("ladspa_plugin%d", plugins++); + int port, ports= 0; - aud_cfg_db_set_int(db, section, "id", instance->descriptor->UniqueID); - aud_cfg_db_set_string(db, section, "file", instance->filename); - aud_cfg_db_set_string(db, section, "label", (gchar *) instance->descriptor->Label); + aud_cfg_db_set_int(db, section, "id", instance->descriptor->UniqueID); + aud_cfg_db_set_string(db, section, "file", instance->filename); + aud_cfg_db_set_string(db, section, "label", (gchar *) + instance->descriptor->Label); - ports = instance->descriptor->PortCount; - if (ports > MAX_KNOBS) - ports = MAX_KNOBS; - for (port = 0; port < ports; ++port) - { - gchar *key = g_strdup_printf("port%d", port); - aud_cfg_db_set_float(db, section, key, instance->knobs[port]); - g_free(key); - } - aud_cfg_db_set_int(db, section, "ports", ports); - g_free(section); - ladspa_shutdown(instance); + ports = instance->descriptor->PortCount; + if (ports > MAX_KNOBS) ports = MAX_KNOBS; + for (port= 0; port < ports; ++port) { + gchar *key = g_strdup_printf("port%d", port); + aud_cfg_db_set_float(db, section, key, instance->knobs[port]); + g_free(key); } - G_UNLOCK(running_plugins); + aud_cfg_db_set_int(db, section, "ports", ports); + g_free(section); + ladspa_shutdown (instance); + } + G_UNLOCK (running_plugins); - aud_cfg_db_set_int(db, "ladspa", "plugins", plugins); - aud_cfg_db_close(db); + aud_cfg_db_set_int(db, "ladspa", "plugins", plugins); + aud_cfg_db_close(db); } -static void ladspa_shutdown(plugin_instance * instance) +static void ladspa_shutdown (plugin_instance *instance) { - const LADSPA_Descriptor *descriptor = instance->descriptor; + const LADSPA_Descriptor * descriptor= instance->descriptor; - if (instance->handle) - { - if (descriptor->deactivate) - { - descriptor->deactivate(instance->handle); - } - descriptor->cleanup(instance->handle); - instance->handle = NULL; + if (instance->handle) { + if (descriptor->deactivate) { + descriptor->deactivate(instance->handle); } - if (instance->handle2) - { - if (descriptor->deactivate) - { - descriptor->deactivate(instance->handle2); - } - descriptor->cleanup(instance->handle2); - instance->handle2 = NULL; + descriptor->cleanup(instance->handle); + instance->handle = NULL; + } + if (instance->handle2) { + if (descriptor->deactivate) { + descriptor->deactivate(instance->handle2); } + descriptor->cleanup(instance->handle2); + instance->handle2 = NULL; + } } -static void boot_plugin(plugin_instance * instance) +static void boot_plugin (plugin_instance *instance) { - const LADSPA_Descriptor *descriptor = instance->descriptor; + const LADSPA_Descriptor * descriptor = instance->descriptor; - ladspa_shutdown(instance); - instance->handle = descriptor->instantiate(descriptor, state.srate); - if (state.nch > 1 && !instance->stereo) - { - /* Create an additional instance */ - instance->handle2 = descriptor->instantiate(descriptor, state.srate); - } + ladspa_shutdown(instance); + instance->handle = descriptor->instantiate(descriptor, state.srate); + if (state.nch > 1 && !instance->stereo) { + /* Create an additional instance */ + instance->handle2 = descriptor->instantiate(descriptor, state.srate); + } - port_assign(instance); + port_assign(instance); - if (descriptor->activate) - { - descriptor->activate(instance->handle); - if (instance->handle2) - { - descriptor->activate(instance->handle2); - } + if (descriptor->activate) { + descriptor->activate(instance->handle); + if (instance->handle2) { + descriptor->activate(instance->handle2); } + } } -static void reboot_plugins(void) +static void reboot_plugins (void) { - GSList *list; + GSList *list; - G_LOCK(running_plugins); - for (list = running_plugins; list != NULL; list = g_slist_next(list)) - { - boot_plugin((plugin_instance *) list->data); - } - G_UNLOCK(running_plugins); + G_LOCK (running_plugins); + for (list= running_plugins; list != NULL; list = g_slist_next(list)) { + boot_plugin ((plugin_instance *) list->data); + } + G_UNLOCK (running_plugins); } -static int apply_effect(gpointer * d, gint length, AFormat afmt, gint srate, gint nch) +static int apply_effect (gpointer *d, gint length, AFormat afmt, + gint srate, gint nch) { - gint16 *raw16 = *d; - GSList *list; - plugin_instance *instance; - int k; + gint16 *raw16 = *d; + GSList *list; + plugin_instance *instance; + int k; - if (running_plugins == NULL || state.running == FALSE) - { - return length; - } - - if (state.afmt != afmt || state.srate != srate || state.nch != nch) - { - state.afmt = afmt; - state.srate = srate; - state.nch = nch; - - if (nch < 1 || nch > 2) - state.ignore = 1; - else if (afmt == FMT_S16_NE) - state.ignore = 0; + if (running_plugins == NULL || state.running == FALSE) { + return length; + } + + if (state.afmt != afmt || state.srate != srate || state.nch != nch) { + state.afmt = afmt; + state.srate = srate; + state.nch = nch; + + if (nch < 1 || nch > 2) + state.ignore = 1; + else if (afmt == FMT_S16_NE) + state.ignore = 0; #if G_BYTE_ORDER == G_LITTLE_ENDIAN - else if (afmt == FMT_S16_LE) - state.ignore = 0; + else if (afmt == FMT_S16_LE) + state.ignore = 0; #elif G_BYTE_ORDER == G_BIG_ENDIAN - else if (afmt == FMT_S16_BE) - state.ignore = 0; + else if (afmt == FMT_S16_BE) + state.ignore = 0; #endif - else - state.ignore = 1; - - reboot_plugins(); - } - - if (state.ignore || length > MAX_SAMPLES * 2) - { - return length; - } - - if (state.nch == 1) - { - for (k = 0; k < length / 2; ++k) - { - left[k] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); - } - G_LOCK(running_plugins); - for (list = running_plugins; list != NULL; list = g_slist_next(list)) - { - instance = (plugin_instance *) list->data; - if (instance->handle) - { - instance->descriptor->run(instance->handle, length / 2); - } - } - G_UNLOCK(running_plugins); - for (k = 0; k < length / 2; ++k) - { - raw16[k] = CLAMP((int)(left[k] * 32768.0f), -32768, 32767); - } - } else - { - for (k = 0; k < length / 2; k += 2) - { - left[k / 2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); - } - for (k = 1; k < length / 2; k += 2) - { - right[k / 2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); - } - G_LOCK(running_plugins); - for (list = running_plugins; list != NULL; list = g_slist_next(list)) - { - instance = (plugin_instance *) list->data; - if (instance->handle) - { - instance->descriptor->run(instance->handle, length / 4); - } - if (instance->handle2) - { - instance->descriptor->run(instance->handle2, length / 4); - } - } - G_UNLOCK(running_plugins); - for (k = 0; k < length / 2; k += 2) - { - raw16[k] = CLAMP((int)(left[k / 2] * 32768.0f), -32768, 32767); - } - for (k = 1; k < length / 2; k += 2) - { - raw16[k] = CLAMP((int)(right[k / 2] * 32768.0f), -32768, 32767); - } - } + state.ignore = 1; - return length; -} + reboot_plugins(); + } -static void port_assign(plugin_instance * instance) -{ - unsigned long port; - unsigned long inputs = 0, outputs = 0; - const LADSPA_Descriptor *plugin = instance->descriptor; - - for (port = 0; port < plugin->PortCount; ++port) - { - - if (LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[port])) - { - if (port < MAX_KNOBS) - { - plugin->connect_port(instance->handle, port, &(instance->knobs[port])); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, &(instance->knobs[port])); - } - else - { - plugin->connect_port(instance->handle, port, trash); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, trash); - } + if (state.ignore || length > MAX_SAMPLES * 2) { + return length; + } - } - else if (LADSPA_IS_PORT_AUDIO(plugin->PortDescriptors[port])) - { + if (state.nch == 1) { + for (k= 0; k < length / 2; ++k) { + left[k] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); + } + G_LOCK (running_plugins); + for (list= running_plugins; list != NULL; list = g_slist_next(list)) { + instance = (plugin_instance *) list->data; + if (instance->handle) { + instance->descriptor->run(instance->handle, length / 2); + } + } + G_UNLOCK (running_plugins); + for (k= 0; k < length / 2; ++k) { + raw16[k] = CLAMP((int) (left[k] * 32768.0f), -32768, 32767); + } + } else { + for (k= 0; k < length / 2; k += 2) { + left[k/2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); + } + for (k= 1; k < length / 2; k += 2) { + right[k/2] = ((LADSPA_Data) raw16[k]) * (1.0f / 32768.0f); + } + G_LOCK (running_plugins); + for (list= running_plugins; list != NULL; list = g_slist_next(list)) { + instance = (plugin_instance *) list->data; + if (instance->handle) { + instance->descriptor->run(instance->handle, length / 4); + } + if (instance->handle2) { + instance->descriptor->run(instance->handle2, length / 4); + } + } + G_UNLOCK (running_plugins); + for (k= 0; k < length / 2; k += 2) { + raw16[k] = CLAMP((int) (left[k/2] * 32768.0f), -32768, 32767); + } + for (k= 1; k < length / 2; k += 2) { + raw16[k] = CLAMP((int) (right[k/2] * 32768.0f), -32768, 32767); + } + } + + return length; +} + +static void port_assign(plugin_instance * instance) { + unsigned long port; + unsigned long inputs= 0, outputs= 0; + const LADSPA_Descriptor * plugin = instance->descriptor; + + for (port = 0; port < plugin->PortCount; ++port) { + + if (LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[port])) { + if (port < MAX_KNOBS) { + plugin->connect_port(instance->handle, port, &(instance->knobs[port])); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, &(instance->knobs[port])); + } else { + plugin->connect_port(instance->handle, port, trash); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, trash); + } - if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[port])) - { - if (inputs == 0) - { - plugin->connect_port(instance->handle, port, left); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, right); - } - else if (inputs == 1 && instance->stereo) - { - plugin->connect_port(instance->handle, port, right); - } - else - { - plugin->connect_port(instance->handle, port, trash); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, trash); - } - inputs++; - - } - else if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[port])) - { - if (outputs == 0) - { - plugin->connect_port(instance->handle, port, left); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, right); - } - else if (outputs == 1 && instance->stereo) - { - plugin->connect_port(instance->handle, port, right); - } - else - { - plugin->connect_port(instance->handle, port, trash); - if (instance->handle2) - plugin->connect_port(instance->handle2, port, trash); - } - outputs++; + } else if (LADSPA_IS_PORT_AUDIO(plugin->PortDescriptors[port])) { - } + if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[port])) { + if (inputs == 0) { + plugin->connect_port(instance->handle, port, left); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, right); + } else if (inputs == 1 && instance->stereo) { + plugin->connect_port(instance->handle, port, right); + } else { + plugin->connect_port(instance->handle, port, trash); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, trash); + } + inputs++; + + } else if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[port])) { + if (outputs == 0) { + plugin->connect_port(instance->handle, port, left); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, right); + } else if (outputs == 1 && instance->stereo) { + plugin->connect_port(instance->handle, port, right); + } else { + plugin->connect_port(instance->handle, port, trash); + if (instance->handle2) + plugin->connect_port(instance->handle2, port, trash); } + outputs++; + + } } + } } static void find_plugins(char *path_entry) { - ladspa_plugin *plugin; - void *library = NULL; - char lib_name[PATH_MAX]; - LADSPA_Descriptor_Function descriptor_fn; - const LADSPA_Descriptor *descriptor; - DIR *dir; - struct dirent *dirent; - long int k; - unsigned long int port, input, output; - - dir = opendir(path_entry); - if (dir == NULL) - return; - - while ((dirent = readdir(dir))) - { - snprintf(lib_name, PATH_MAX, "%s/%s", path_entry, dirent->d_name); - library = dlopen(lib_name, RTLD_LAZY); - if (library == NULL) - { - continue; - } - descriptor_fn = dlsym(library, "ladspa_descriptor"); - if (descriptor_fn == NULL) - { - dlclose(library); - continue; - } - - for (k = 0;; ++k) - { - descriptor = descriptor_fn(k); - if (descriptor == NULL) - { - break; - } - plugin = g_new(ladspa_plugin, 1); - plugin->name = g_strdup(descriptor->Name); - plugin->filename = g_strdup(lib_name); - plugin->id = k; - plugin->unique_id = descriptor->UniqueID; - for (input = output = port = 0; port < descriptor->PortCount; ++port) - { - if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[port])) - { - if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[port])) - input++; - if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[port])) - output++; - } - else if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[port])) - { - } - } - if (input >= 2 && output >= 2) - { - plugin->stereo = TRUE; - } - else - { - plugin->stereo = FALSE; - } - plugin_list = g_slist_prepend(plugin_list, plugin); - } - dlclose(library); - } - - closedir(dir); + ladspa_plugin *plugin; + void *library = NULL; + char lib_name[PATH_MAX]; + LADSPA_Descriptor_Function descriptor_fn; + const LADSPA_Descriptor *descriptor; + DIR *dir; + struct dirent *dirent; + long int k; + unsigned long int port, input, output; + + dir= opendir(path_entry); + if (dir == NULL) return; + + while ((dirent= readdir(dir))) { + snprintf(lib_name, PATH_MAX, "%s/%s", path_entry, dirent->d_name); + library = dlopen(lib_name, RTLD_LAZY); + if (library == NULL) { + continue; + } + descriptor_fn = dlsym(library, "ladspa_descriptor"); + if (descriptor_fn == NULL) { + dlclose(library); + continue; + } + + for (k= 0;; ++k) { + descriptor= descriptor_fn(k); + if (descriptor == NULL) { + break; + } + plugin = g_new(ladspa_plugin, 1); + plugin->name= g_strdup(descriptor->Name); + plugin->filename= g_strdup(lib_name); + plugin->id= k; + plugin->unique_id= descriptor->UniqueID; + for (input = output = port = 0; port < descriptor->PortCount; ++port) { + if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[port])) { + if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[port])) + input++; + if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[port])) + output++; + } else if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[port])) { + } + } + if (input >= 2 && output >= 2) { + plugin->stereo= TRUE; + } else { + plugin->stereo= FALSE; + } + plugin_list = g_slist_prepend(plugin_list, plugin); + } + dlclose(library); + } + + closedir(dir); + return; +} + +static void value_changed(GtkAdjustment *adjustment, gpointer *user_data) +{ + LADSPA_Data *data = (LADSPA_Data *) user_data; + + G_LOCK (running_plugins); + *data = (LADSPA_Data) adjustment->value; + G_UNLOCK (running_plugins); +} + +static void toggled(GtkToggleButton *togglebutton, gpointer *user_data) +{ + LADSPA_Data *data = (LADSPA_Data *) user_data; + + if (gtk_toggle_button_get_active(togglebutton)) { + G_LOCK (running_plugins); + *data = (LADSPA_Data) 1.0f; + G_UNLOCK (running_plugins); + } else { + G_LOCK (running_plugins); + *data = (LADSPA_Data) -1.0f; + G_UNLOCK (running_plugins); + } +} + +static int update_instance (gpointer data) +{ + plugin_instance *instance = (plugin_instance *) data; + unsigned long k; + + G_LOCK (running_plugins); + for (k = 0; k < MAX_KNOBS && k < instance->descriptor->PortCount; ++k) { + if (LADSPA_IS_PORT_OUTPUT(instance->descriptor->PortDescriptors[k]) + && LADSPA_IS_PORT_CONTROL(instance->descriptor->PortDescriptors[k])) { + instance->adjustments[k]->value = instance->knobs[k]; + gtk_adjustment_value_changed(instance->adjustments[k]); + } + } + G_UNLOCK (running_plugins); + return TRUE; +} + +static void draw_plugin(plugin_instance *instance) +{ + const LADSPA_Descriptor *plugin = instance->descriptor; + const LADSPA_PortRangeHint *hints = plugin->PortRangeHints; + LADSPA_Data fact, min, max, step, start; + int dp; + unsigned long k; + gboolean no_ui = TRUE; + GtkWidget *widget, *vbox, *hbox; + GtkObject *adjustment; + + if (instance->window != NULL) { + /* Just show window */ + gtk_widget_show(instance->window); return; -} - -static void value_changed(GtkAdjustment * adjustment, gpointer * user_data) -{ - LADSPA_Data *data = (LADSPA_Data *) user_data; - - G_LOCK(running_plugins); - *data = (LADSPA_Data) adjustment->value; - G_UNLOCK(running_plugins); -} - -static void toggled(GtkToggleButton * togglebutton, gpointer * user_data) -{ - LADSPA_Data *data = (LADSPA_Data *) user_data; + } - if (gtk_toggle_button_get_active(togglebutton)) - { - G_LOCK(running_plugins); - *data = (LADSPA_Data) 1.0f; - G_UNLOCK(running_plugins); - } - else - { - G_LOCK(running_plugins); - *data = (LADSPA_Data) - 1.0f; - G_UNLOCK(running_plugins); - } -} + instance->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(instance->window), plugin->Name); -static int update_instance(gpointer data) -{ - plugin_instance *instance = (plugin_instance *) data; - unsigned long k; + vbox= gtk_vbox_new(FALSE, 3); - G_LOCK(running_plugins); - for (k = 0; k < MAX_KNOBS && k < instance->descriptor->PortCount; ++k) - { - if (LADSPA_IS_PORT_OUTPUT(instance->descriptor->PortDescriptors[k]) && LADSPA_IS_PORT_CONTROL(instance->descriptor->PortDescriptors[k])) - { - instance->adjustments[k]->value = instance->knobs[k]; - gtk_adjustment_value_changed(instance->adjustments[k]); - } + for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) { + if (! LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k])) + continue; + no_ui = FALSE; + hbox = gtk_hbox_new(FALSE, 3); + widget = gtk_label_new(plugin->PortNames[k]); + gtk_container_add(GTK_CONTAINER(hbox), widget); + + if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor)) { + widget = gtk_toggle_button_new_with_label("Press"); + g_signal_connect(G_OBJECT(widget), "toggled", + G_CALLBACK(toggled), &(instance->knobs[k])); + gtk_container_add(GTK_CONTAINER(hbox), widget); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + continue; + } + + if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor)) { + fact = state.srate ? state.srate : 44100.0f; + } else { + fact = 1.0f; + } + + if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor)) { + min= hints[k].LowerBound * fact; + } else { + min= -10000.0f; + } + + if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor)) { + max= hints[k].UpperBound * fact; + } else { + max= 10000.0f; + } + + /* infinity */ + if (10000.0f <= max - min) { + dp = 1; + step = 5.0f; + + /* 100.0 ... lots */ + } else if (100.0f < max - min) { + dp = 0; + step = 5.0f; + + /* 10.0 ... 100.0 */ + } else if (10.0f < max - min) { + dp = 1; + step = 0.5f; + + /* 1.0 ... 10.0 */ + } else if (1.0f < max - min) { + dp = 2; + step = 0.05f; + + /* 0.0 ... 1.0 */ + } else { + dp = 3; + step = 0.005f; + } + + if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) { + dp = 0; + if (step < 1.0f) step = 1.0f; + } + + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor)) { + start = min; + } else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor)) { + start = min * 0.75f + max * 0.25f; + } else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor)) { + start = min * 0.5f + max * 0.5f; + } else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor)) { + start = min * 0.25f + max * 0.75f; + } else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor)) { + start = max; + } else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor)) { + start = 0.0f; + } else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)) { + start = 1.0f; + } else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor)) { + start = 100.0f; + } else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor)) { + start = 440.0f; + } else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) { + start = min; + } else if (max >= 0.0f && min <= 0.0f) { + start = 0.0f; + } else { + start = min * 0.5f + max * 0.5f; + } + + if (instance->restored) { + start = instance->knobs[k]; + } else { + instance->knobs[k] = start; + } + adjustment = gtk_adjustment_new(start, min, max, step, step * 10.0, 0.0); + instance->adjustments[k] = GTK_ADJUSTMENT(adjustment); + widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp); + if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) { + gtk_widget_set_sensitive(widget, FALSE); + } else { + g_signal_connect(adjustment, "value-changed", + G_CALLBACK(value_changed), &(instance->knobs[k])); + } + gtk_container_add(GTK_CONTAINER(hbox), widget); + widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment)); + gtk_scale_set_digits(GTK_SCALE(widget), dp); + if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) { + gtk_widget_set_sensitive(widget, FALSE); } - G_UNLOCK(running_plugins); - return TRUE; -} - -static void draw_plugin(plugin_instance * instance) -{ - const LADSPA_Descriptor *plugin = instance->descriptor; - const LADSPA_PortRangeHint *hints = plugin->PortRangeHints; - LADSPA_Data fact, min, max, step, start; - int dp; - unsigned long k; - gboolean no_ui = TRUE; - GtkWidget *widget, *vbox, *hbox; - GtkObject *adjustment; - - if (instance->window != NULL) - { - /* Just show window */ - gtk_widget_show(instance->window); - return; - } - - instance->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(instance->window), plugin->Name); - - vbox = gtk_vbox_new(FALSE, 3); - - for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) - { - if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k])) - continue; - no_ui = FALSE; - hbox = gtk_hbox_new(FALSE, 3); - widget = gtk_label_new(plugin->PortNames[k]); - gtk_container_add(GTK_CONTAINER(hbox), widget); - - if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor)) - { - widget = gtk_toggle_button_new_with_label("Press"); - g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggled), &(instance->knobs[k])); - gtk_container_add(GTK_CONTAINER(hbox), widget); - gtk_container_add(GTK_CONTAINER(vbox), hbox); - continue; - } - - if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor)) - { - fact = state.srate ? state.srate : 44100.0f; - } - else - { - fact = 1.0f; - } - - if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor)) - { - min = hints[k].LowerBound * fact; - } - else - { - min = -10000.0f; - } - - if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor)) - { - max = hints[k].UpperBound * fact; - } - else - { - max = 10000.0f; - } - - /* infinity */ - if (10000.0f <= max - min) - { - dp = 1; - step = 5.0f; - - /* 100.0 ... lots */ - } - else if (100.0f < max - min) - { - dp = 0; - step = 5.0f; - - /* 10.0 ... 100.0 */ - } - else if (10.0f < max - min) - { - dp = 1; - step = 0.5f; - - /* 1.0 ... 10.0 */ - } - else if (1.0f < max - min) - { - dp = 2; - step = 0.05f; - - /* 0.0 ... 1.0 */ - } - else - { - dp = 3; - step = 0.005f; - } - - if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) - { - dp = 0; - if (step < 1.0f) - step = 1.0f; - } - - if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor)) - { - start = min; - } - else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor)) - { - start = min * 0.75f + max * 0.25f; - } - else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor)) - { - start = min * 0.5f + max * 0.5f; - } - else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor)) - { - start = min * 0.25f + max * 0.75f; - } - else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor)) - { - start = max; - } - else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor)) - { - start = 0.0f; - } - else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)) - { - start = 1.0f; - } - else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor)) - { - start = 100.0f; - } - else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor)) - { - start = 440.0f; - } - else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) - { - start = min; - } - else if (max >= 0.0f && min <= 0.0f) - { - start = 0.0f; - } - else - { - start = min * 0.5f + max * 0.5f; - } + gtk_container_add(GTK_CONTAINER(hbox), widget); - if (instance->restored) - { - start = instance->knobs[k]; - } - else - { - instance->knobs[k] = start; - } - adjustment = gtk_adjustment_new(start, min, max, step, step * 10.0, 0.0); - instance->adjustments[k] = GTK_ADJUSTMENT(adjustment); - widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp); - if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) - { - gtk_widget_set_sensitive(widget, FALSE); - } - else - { - g_signal_connect(adjustment, "value-changed", G_CALLBACK(value_changed), &(instance->knobs[k])); - } - gtk_container_add(GTK_CONTAINER(hbox), widget); - widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment)); - gtk_scale_set_digits(GTK_SCALE(widget), dp); - if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k])) - { - gtk_widget_set_sensitive(widget, FALSE); - } - gtk_container_add(GTK_CONTAINER(hbox), widget); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + } - gtk_container_add(GTK_CONTAINER(vbox), hbox); - } + if (no_ui) { + widget = gtk_label_new(_("This LADSPA plugin has no user controls")); + gtk_container_add(GTK_CONTAINER(vbox), widget); + } - if (no_ui) - { - widget = gtk_label_new(_("This LADSPA plugin has no user controls")); - gtk_container_add(GTK_CONTAINER(vbox), widget); - } + instance->timeout = gtk_timeout_add(100, update_instance, instance); - instance->timeout = gtk_timeout_add(100, update_instance, instance); + gtk_container_add(GTK_CONTAINER(instance->window), vbox); - gtk_container_add(GTK_CONTAINER(instance->window), vbox); - - g_signal_connect(G_OBJECT(instance->window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); - gtk_widget_show_all(instance->window); + g_signal_connect (G_OBJECT (instance->window), "delete_event", + G_CALLBACK (gtk_widget_hide_on_delete), NULL); + gtk_widget_show_all(instance->window); } -static void sort_column(GtkCList * clist, gint column, gpointer user_data) +static void sort_column(GtkCList *clist, gint column, gpointer user_data) { - gtk_clist_set_sort_column(clist, column); - gtk_clist_sort(clist); + gtk_clist_set_sort_column(clist, column); + gtk_clist_sort(clist); } -static void unselect_instance(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data) +static void unselect_instance(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data) { - selected_instance = NULL; + selected_instance= NULL; } -static void select_instance(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data) +static void select_instance(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data) { - selected_instance = (plugin_instance *) gtk_clist_get_row_data(clist, row); + selected_instance= (plugin_instance *) gtk_clist_get_row_data(clist, row); } -static void reorder_instance(GtkCList * clist, gint from, gint to, gpointer user_data) +static void reorder_instance(GtkCList *clist, gint from, gint to, + gpointer user_data) { - void *data; + void *data; - G_LOCK(running_plugins); - data = g_slist_nth_data(running_plugins, from); - running_plugins = g_slist_remove(running_plugins, data); - running_plugins = g_slist_insert(running_plugins, data, to); - G_UNLOCK(running_plugins); + G_LOCK (running_plugins); + data = g_slist_nth_data(running_plugins, from); + running_plugins= g_slist_remove(running_plugins, data); + running_plugins= g_slist_insert(running_plugins, data, to); + G_UNLOCK (running_plugins); } static void make_run_clist(void) { - char *titles[1] = { _("Name") }; - GSList *list; + char * titles[1] = { _("Name") }; + GSList *list; - run_clist = gtk_clist_new_with_titles(1, titles); - gtk_clist_column_titles_passive(GTK_CLIST(run_clist)); - gtk_clist_set_reorderable(GTK_CLIST(run_clist), TRUE); - g_signal_connect(G_OBJECT(run_clist), "select-row", G_CALLBACK(select_instance), NULL); - g_signal_connect(G_OBJECT(run_clist), "unselect-row", G_CALLBACK(unselect_instance), NULL); - g_signal_connect(G_OBJECT(run_clist), "row-move", G_CALLBACK(reorder_instance), NULL); - - G_LOCK(running_plugins); - for (list = running_plugins; list != NULL; list = g_slist_next(list)) - { - gint row; - gchar *line[1]; - plugin_instance *instance = (plugin_instance *) list->data; - - line[0] = (char *)instance->descriptor->Name; - row = gtk_clist_append(GTK_CLIST(run_clist), line); - gtk_clist_set_row_data(GTK_CLIST(run_clist), row, (gpointer) instance); - gtk_clist_select_row(GTK_CLIST(run_clist), row, 0); - } - G_UNLOCK(running_plugins); + run_clist = gtk_clist_new_with_titles(1, titles); + gtk_clist_column_titles_passive(GTK_CLIST (run_clist)); + gtk_clist_set_reorderable(GTK_CLIST (run_clist), TRUE); + g_signal_connect(G_OBJECT(run_clist), "select-row", + G_CALLBACK(select_instance), NULL); + g_signal_connect(G_OBJECT(run_clist), "unselect-row", + G_CALLBACK(unselect_instance), NULL); + g_signal_connect(G_OBJECT(run_clist), "row-move", + G_CALLBACK(reorder_instance), NULL); + + G_LOCK (running_plugins); + for (list= running_plugins; list != NULL; list = g_slist_next(list)) { + gint row; + gchar *line[1]; + plugin_instance *instance = (plugin_instance *) list->data; + + line[0] = (char *) instance->descriptor->Name; + row = gtk_clist_append(GTK_CLIST (run_clist), line); + gtk_clist_set_row_data(GTK_CLIST (run_clist), row, (gpointer) instance); + gtk_clist_select_row(GTK_CLIST(run_clist), row, 0); + } + G_UNLOCK (running_plugins); } -static plugin_instance *add_plugin(ladspa_plugin * plugin) +static plugin_instance * add_plugin (ladspa_plugin *plugin) { - plugin_instance *instance; - char *line[1]; - gint row; + plugin_instance *instance; + char * line[1]; + gint row; - if (plugin == NULL) - { - return NULL; - } + if (plugin == NULL) { + return NULL; + } - instance = load(plugin->filename, plugin->id); - if (instance == NULL) - { - return NULL; - } + instance = load(plugin->filename, plugin->id); + if (instance == NULL) { + return NULL; + } - instance->stereo = plugin->stereo; - if (state.srate && state.running) - { - /* Jump right in */ - boot_plugin(instance); - } + instance->stereo = plugin->stereo; + if (state.srate && state.running) { + /* Jump right in */ + boot_plugin(instance); + } - if (run_clist) - { - line[0] = (char *)instance->descriptor->Name; - row = gtk_clist_append(GTK_CLIST(run_clist), line); - gtk_clist_set_row_data(GTK_CLIST(run_clist), row, (gpointer) instance); - gtk_clist_select_row(GTK_CLIST(run_clist), row, 0); - draw_plugin(instance); - } - G_LOCK(running_plugins); - running_plugins = g_slist_append(running_plugins, instance); - G_UNLOCK(running_plugins); + if (run_clist) { + line[0] = (char *) instance->descriptor->Name; + row = gtk_clist_append(GTK_CLIST (run_clist), line); + gtk_clist_set_row_data(GTK_CLIST (run_clist), row, (gpointer) instance); + gtk_clist_select_row(GTK_CLIST(run_clist), row, 0); + draw_plugin(instance); + } + G_LOCK (running_plugins); + running_plugins = g_slist_append(running_plugins, instance); + G_UNLOCK (running_plugins); - return instance; + return instance; } -static void unselect_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data) +static void unselect_plugin(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data) { - selected_plugin = NULL; + selected_plugin= NULL; } -static void select_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data) +static void select_plugin(GtkCList *clist, gint row, gint column, + GdkEventButton *event, gpointer user_data) { - selected_plugin = (ladspa_plugin *) gtk_clist_get_row_data(clist, row); - gtk_clist_unselect_all(GTK_CLIST(run_clist)); - if (event->type == GDK_2BUTTON_PRESS) - { - /* Double click */ - add_plugin(selected_plugin); - } + selected_plugin = (ladspa_plugin *) gtk_clist_get_row_data(clist, row); + gtk_clist_unselect_all(GTK_CLIST(run_clist)); + if (event->type == GDK_2BUTTON_PRESS) { + /* Double click */ + add_plugin(selected_plugin); + } } -static GtkWidget *make_plugin_clist(void) +static GtkWidget * make_plugin_clist(void) { - ladspa_plugin *plugin; - GSList *list; - GtkWidget *clist; - char number[14]; - char *titles[2] = { _("UID"), _("Name") }; - char *line[2]; - gint row; + ladspa_plugin *plugin; + GSList *list; + GtkWidget *clist; + char number[14]; + char * titles[2] = { _("UID"), _("Name") }; + char * line[2]; + gint row; - find_all_plugins(); + find_all_plugins(); - clist = gtk_clist_new_with_titles(2, titles); - gtk_clist_column_titles_active(GTK_CLIST(clist)); - gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); - gtk_clist_set_sort_column(GTK_CLIST(clist), 1); - - for (list = plugin_list; list != NULL; list = g_slist_next(list)) - { - plugin = (ladspa_plugin *) list->data; - snprintf(number, sizeof(number), "%ld", plugin->unique_id); - line[0] = number; - line[1] = plugin->name; - row = gtk_clist_append(GTK_CLIST(clist), line); - gtk_clist_set_row_data(GTK_CLIST(clist), row, (gpointer) plugin); - } - gtk_clist_sort(GTK_CLIST(clist)); - - g_signal_connect(G_OBJECT(clist), "click-column", G_CALLBACK(sort_column), NULL); - g_signal_connect(G_OBJECT(clist), "select-row", G_CALLBACK(select_plugin), NULL); - g_signal_connect(G_OBJECT(clist), "unselect-row", G_CALLBACK(unselect_plugin), NULL); + clist = gtk_clist_new_with_titles(2, titles); + gtk_clist_column_titles_active(GTK_CLIST (clist)); + gtk_clist_set_column_auto_resize (GTK_CLIST (clist), 0, TRUE); + gtk_clist_set_sort_column(GTK_CLIST (clist), 1); - return clist; -} + for (list= plugin_list; list != NULL; list = g_slist_next(list)) { + plugin = (ladspa_plugin *) list->data; + snprintf(number, sizeof(number), "%ld", plugin->unique_id); + line[0] = number; + line[1] = plugin->name; + row = gtk_clist_append(GTK_CLIST (clist), line); + gtk_clist_set_row_data(GTK_CLIST (clist), row, (gpointer) plugin); + } + gtk_clist_sort(GTK_CLIST (clist)); -static void add_plugin_clicked(GtkButton * button, gpointer user_data) -{ - add_plugin(selected_plugin); + g_signal_connect(G_OBJECT(clist), "click-column", + G_CALLBACK(sort_column), NULL); + g_signal_connect(G_OBJECT(clist), "select-row", + G_CALLBACK(select_plugin), NULL); + g_signal_connect(G_OBJECT(clist), "unselect-row", + G_CALLBACK(unselect_plugin), NULL); + + return clist; } -static void remove_plugin_clicked(GtkButton * button, gpointer user_data) +static void add_plugin_clicked (GtkButton *button, gpointer user_data) { - plugin_instance *instance = selected_instance; - gint row; - - if (instance == NULL) - { - return; - } - row = gtk_clist_find_row_from_data(GTK_CLIST(run_clist), (gpointer) instance); - gtk_clist_remove(GTK_CLIST(run_clist), row); - - G_LOCK(running_plugins); - running_plugins = g_slist_remove(running_plugins, instance); - unload(instance); - G_UNLOCK(running_plugins); - selected_instance = NULL; + add_plugin(selected_plugin); } -static void configure_plugin_clicked(GtkButton * button, gpointer user_data) +static void remove_plugin_clicked (GtkButton *button, gpointer user_data) { - if (selected_instance) - { - draw_plugin(selected_instance); - } + plugin_instance *instance = selected_instance; + gint row; + + if (instance == NULL) { + return; + } + row = gtk_clist_find_row_from_data(GTK_CLIST(run_clist), (gpointer) instance); + gtk_clist_remove(GTK_CLIST(run_clist), row); + + G_LOCK (running_plugins); + running_plugins = g_slist_remove(running_plugins, instance); + unload(instance); + G_UNLOCK (running_plugins); + selected_instance= NULL; +} + +static void configure_plugin_clicked (GtkButton *button, gpointer user_data) +{ + if (selected_instance) { + draw_plugin(selected_instance); + } } static void configure(void) { - GtkWidget *widget, *vbox, *hbox, *bbox, *frame; + GtkWidget *widget, *vbox, *hbox, *bbox, *frame; - if (config_window) - { - /* just show the window */ - gtk_widget_show(config_window); - return; - } - - config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - vbox = gtk_vbox_new(FALSE, 0); - hbox = gtk_hbox_new(TRUE, 0); - - frame = gtk_frame_new(_("Installed plugins")); - widget = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_container_add(GTK_CONTAINER(widget), make_plugin_clist()); - gtk_container_add(GTK_CONTAINER(frame), widget); - gtk_container_add(GTK_CONTAINER(hbox), frame); - - - frame = gtk_frame_new(_("Running plugins")); - widget = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - if (run_clist == NULL) - { - make_run_clist(); - } - gtk_container_add(GTK_CONTAINER(widget), run_clist); - gtk_container_add(GTK_CONTAINER(frame), widget); - gtk_container_add(GTK_CONTAINER(hbox), frame); - gtk_container_add(GTK_CONTAINER(vbox), hbox); + if (config_window) { + /* just show the window */ + gtk_widget_show(config_window); + return; + } - /* Buttons */ - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); - widget = gtk_button_new_with_label(_("Add")); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(add_plugin_clicked), NULL); - gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); - widget = gtk_button_new_with_label(_("Remove")); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(remove_plugin_clicked), NULL); - gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); - widget = gtk_button_new_with_label(_("Configure")); - g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(configure_plugin_clicked), NULL); - gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); - - gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); - - gtk_container_add(GTK_CONTAINER(config_window), vbox); - - gtk_window_set_title(GTK_WINDOW(config_window), _("LADSPA Plugin Catalog")); - gtk_widget_set_usize(config_window, 380, 400); - g_signal_connect(G_OBJECT(config_window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); + config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + vbox= gtk_vbox_new(FALSE, 0); + hbox= gtk_hbox_new(TRUE, 0); + + frame= gtk_frame_new(_("Installed plugins")); + widget = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_container_add(GTK_CONTAINER(widget), make_plugin_clist()); + gtk_container_add(GTK_CONTAINER(frame), widget); + gtk_container_add(GTK_CONTAINER(hbox), frame); + + + frame= gtk_frame_new(_("Running plugins")); + widget = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + if (run_clist == NULL) { + make_run_clist(); + } + gtk_container_add(GTK_CONTAINER(widget), run_clist); + gtk_container_add(GTK_CONTAINER(frame), widget); + gtk_container_add(GTK_CONTAINER(hbox), frame); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + + /* Buttons */ + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); + widget = gtk_button_new_with_label(_("Add")); + g_signal_connect(G_OBJECT(widget), "clicked", + G_CALLBACK(add_plugin_clicked), NULL); + gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); + widget = gtk_button_new_with_label(_("Remove")); + g_signal_connect(G_OBJECT(widget), "clicked", + G_CALLBACK(remove_plugin_clicked), NULL); + gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); + widget = gtk_button_new_with_label(_("Configure")); + g_signal_connect(G_OBJECT(widget), "clicked", + G_CALLBACK(configure_plugin_clicked), NULL); + gtk_box_pack_end_defaults(GTK_BOX(bbox), widget); + + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + + gtk_container_add(GTK_CONTAINER(config_window), vbox); + + gtk_window_set_title(GTK_WINDOW(config_window), _("LADSPA Plugin Catalog")); + gtk_widget_set_usize(config_window, 380, 400); + g_signal_connect (G_OBJECT (config_window), "delete_event", + G_CALLBACK (gtk_widget_hide_on_delete), NULL); - gtk_widget_show_all(config_window); + gtk_widget_show_all(config_window); }