X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fjackrack%2Fjack_rack.c;h=92f82721c2452486ac418598d668a5dbf353e19a;hb=f4963a6aa07644399b273b5d2b1f9299c9047414;hp=577694c6b7b545564ab5c0ebe6469349a5ea7231;hpb=b7241ba1f8be71fd66d670436db163957508eaab;p=melted diff --git a/src/modules/jackrack/jack_rack.c b/src/modules/jackrack/jack_rack.c index 577694c..92f8272 100644 --- a/src/modules/jackrack/jack_rack.c +++ b/src/modules/jackrack/jack_rack.c @@ -1,21 +1,26 @@ /* - * JACK Rack - * - * Copyright (C) Robert Ham 2002, 2003 (node@users.sourceforge.net) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * JACK Rack * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Original: + * Copyright (C) Robert Ham 2002, 2003 (node@users.sourceforge.net) * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Modification for MLT: + * Copyright (C) 2004 Ushodaya Enterprises Limited + * Author: Dan Dennedy + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include @@ -29,23 +34,29 @@ #include "jack_rack.h" #include "lock_free_fifo.h" -#include "control_message.h" -#include "ui.h" #include "plugin_settings.h" #ifndef _ #define _(x) x #endif +#define _x (const xmlChar*) +#define _s (const char*) jack_rack_t * -jack_rack_new (ui_t * ui, unsigned long channels) +jack_rack_new (const char * client_name, unsigned long channels) { jack_rack_t *rack; rack = g_malloc (sizeof (jack_rack_t)); rack->saved_plugins = NULL; - rack->ui = ui; rack->channels = channels; + rack->procinfo = process_info_new (client_name, channels, FALSE, FALSE); + if (!rack->procinfo) { + g_free (rack); + return NULL; + } + rack->plugin_mgr = plugin_mgr_new (); + plugin_mgr_set_plugins (rack->plugin_mgr, channels); return rack; } @@ -54,6 +65,10 @@ jack_rack_new (ui_t * ui, unsigned long channels) void jack_rack_destroy (jack_rack_t * jack_rack) { + process_quit (jack_rack->procinfo); + plugin_mgr_destroy (jack_rack->plugin_mgr); + process_info_destroy (jack_rack->procinfo); + g_slist_free (jack_rack->saved_plugins); g_free (jack_rack); } @@ -79,29 +94,16 @@ jack_rack_instantiate_plugin (jack_rack_t * jack_rack, plugin_desc_t * desc) return plugin; } -void -jack_rack_send_add_plugin (jack_rack_t * jack_rack, plugin_desc_t * desc) -{ - plugin_t * plugin; - ctrlmsg_t ctrlmsg; - - plugin = jack_rack_instantiate_plugin (jack_rack, desc); - - if (!plugin) - return; - - /* send the chain link off to the process() callback */ - ctrlmsg.type = CTRLMSG_ADD; - ctrlmsg.data.add.plugin = plugin; - lff_write (jack_rack->ui->ui_to_process, &ctrlmsg); -} void jack_rack_add_saved_plugin (jack_rack_t * jack_rack, saved_plugin_t * saved_plugin) { + plugin_t * plugin = jack_rack_instantiate_plugin (jack_rack, saved_plugin->settings->desc); + if (!plugin) + return; jack_rack->saved_plugins = g_slist_append (jack_rack->saved_plugins, saved_plugin); - - jack_rack_send_add_plugin (jack_rack, saved_plugin->settings->desc); + process_add_plugin (jack_rack->procinfo, plugin); + jack_rack_add_plugin (jack_rack, plugin); } @@ -152,8 +154,8 @@ jack_rack_add_plugin (jack_rack_t * jack_rack, plugin_t * plugin) static void -saved_rack_parse_plugin (saved_rack_t * saved_rack, saved_plugin_t * saved_plugin, - ui_t * ui, const char * filename, xmlNodePtr plugin) +saved_rack_parse_plugin (jack_rack_t * jack_rack, saved_rack_t * saved_rack, saved_plugin_t * saved_plugin, + const char * filename, xmlNodePtr plugin) { plugin_desc_t * desc; settings_t * settings = NULL; @@ -165,13 +167,13 @@ saved_rack_parse_plugin (saved_rack_t * saved_rack, saved_plugin_t * saved_plugi for (node = plugin->children; node; node = node->next) { - if (strcmp (node->name, "id") == 0) + if (xmlStrcmp (node->name, _x("id")) == 0) { content = xmlNodeGetContent (node); - num = strtoul (content, NULL, 10); + num = strtoul (_s(content), NULL, 10); xmlFree (content); - desc = plugin_mgr_get_any_desc (ui->plugin_mgr, num); + desc = plugin_mgr_get_any_desc (jack_rack->plugin_mgr, num); if (!desc) { fprintf (stderr, _("The file '%s' contains an unknown plugin with ID '%ld'; skipping\n"), filename, num); @@ -180,62 +182,62 @@ saved_rack_parse_plugin (saved_rack_t * saved_rack, saved_plugin_t * saved_plugi settings = settings_new (desc, saved_rack->channels, saved_rack->sample_rate); } - else if (strcmp (node->name, "enabled") == 0) + else if (xmlStrcmp (node->name, _x("enabled")) == 0) { content = xmlNodeGetContent (node); - settings_set_enabled (settings, strcmp (content, "true") == 0 ? TRUE : FALSE); + settings_set_enabled (settings, xmlStrcmp (content, _x("true")) == 0 ? TRUE : FALSE); xmlFree (content); } - else if (strcmp (node->name, "wet_dry_enabled") == 0) + else if (xmlStrcmp (node->name, _x("wet_dry_enabled")) == 0) { content = xmlNodeGetContent (node); - settings_set_wet_dry_enabled (settings, strcmp (content, "true") == 0 ? TRUE : FALSE); + settings_set_wet_dry_enabled (settings, xmlStrcmp (content, _x("true")) == 0 ? TRUE : FALSE); xmlFree (content); } - else if (strcmp (node->name, "wet_dry_locked") == 0) + else if (xmlStrcmp (node->name, _x("wet_dry_locked")) == 0) { content = xmlNodeGetContent (node); - settings_set_wet_dry_locked (settings, strcmp (content, "true") == 0 ? TRUE : FALSE); + settings_set_wet_dry_locked (settings, xmlStrcmp (content, _x("true")) == 0 ? TRUE : FALSE); xmlFree (content); } - else if (strcmp (node->name, "wet_dry_values") == 0) + else if (xmlStrcmp (node->name, _x("wet_dry_values")) == 0) { unsigned long channel = 0; for (sub_node = node->children; sub_node; sub_node = sub_node->next) { - if (strcmp (sub_node->name, "value") == 0) + if (xmlStrcmp (sub_node->name, _x("value")) == 0) { content = xmlNodeGetContent (sub_node); - settings_set_wet_dry_value (settings, channel, strtod (content, NULL)); + settings_set_wet_dry_value (settings, channel, strtod (_s(content), NULL)); xmlFree (content); channel++; } } } - else if (strcmp (node->name, "lockall") == 0) + else if (xmlStrcmp (node->name, _x("lockall")) == 0) { content = xmlNodeGetContent (node); - settings_set_lock_all (settings, strcmp (content, "true") == 0 ? TRUE : FALSE); + settings_set_lock_all (settings, xmlStrcmp (content, _x("true")) == 0 ? TRUE : FALSE); xmlFree (content); } - else if (strcmp (node->name, "controlrow") == 0) + else if (xmlStrcmp (node->name, _x("controlrow")) == 0) { gint copy = 0; for (sub_node = node->children; sub_node; sub_node = sub_node->next) { - if (strcmp (sub_node->name, "lock") == 0) + if (xmlStrcmp (sub_node->name, _x("lock")) == 0) { content = xmlNodeGetContent (sub_node); - settings_set_lock (settings, control, strcmp (content, "true") == 0 ? TRUE : FALSE); + settings_set_lock (settings, control, xmlStrcmp (content, _x("true")) == 0 ? TRUE : FALSE); xmlFree (content); } - else if (strcmp (sub_node->name, "value") == 0) + else if (xmlStrcmp (sub_node->name, _x("value")) == 0) { content = xmlNodeGetContent (sub_node); - settings_set_control_value (settings, copy, control, strtod (content, NULL)); + settings_set_control_value (settings, copy, control, strtod (_s(content), NULL)); xmlFree (content); copy++; } @@ -250,7 +252,7 @@ saved_rack_parse_plugin (saved_rack_t * saved_rack, saved_plugin_t * saved_plugi } static void -saved_rack_parse_jackrack (saved_rack_t * saved_rack, ui_t * ui, const char * filename, xmlNodePtr jackrack) +saved_rack_parse_jackrack (jack_rack_t * jack_rack, saved_rack_t * saved_rack, const char * filename, xmlNodePtr jackrack) { xmlNodePtr node; xmlChar *content; @@ -258,29 +260,29 @@ saved_rack_parse_jackrack (saved_rack_t * saved_rack, ui_t * ui, const char * fi for (node = jackrack->children; node; node = node->next) { - if (strcmp (node->name, "channels") == 0) + if (xmlStrcmp (node->name, _x("channels")) == 0) { content = xmlNodeGetContent (node); - saved_rack->channels = strtoul (content, NULL, 10); + saved_rack->channels = strtoul (_s(content), NULL, 10); xmlFree (content); } - else if (strcmp (node->name, "samplerate") == 0) + else if (xmlStrcmp (node->name, _x("samplerate")) == 0) { content = xmlNodeGetContent (node); - saved_rack->sample_rate = strtoul (content, NULL, 10); + saved_rack->sample_rate = strtoul (_s(content), NULL, 10); xmlFree (content); } - else if (strcmp (node->name, "plugin") == 0) + else if (xmlStrcmp (node->name, _x("plugin")) == 0) { saved_plugin = g_malloc0 (sizeof (saved_plugin_t)); saved_rack->plugins = g_slist_append (saved_rack->plugins, saved_plugin); - saved_rack_parse_plugin (saved_rack, saved_plugin, ui, filename, node); + saved_rack_parse_plugin (jack_rack, saved_rack, saved_plugin, filename, node); } } } static saved_rack_t * -saved_rack_new (ui_t * ui, const char * filename, xmlDocPtr doc) +saved_rack_new (jack_rack_t * jack_rack, const char * filename, xmlDocPtr doc) { xmlNodePtr node; saved_rack_t *saved_rack; @@ -293,8 +295,8 @@ saved_rack_new (ui_t * ui, const char * filename, xmlDocPtr doc) for (node = doc->children; node; node = node->next) { - if (strcmp (node->name, "jackrack") == 0) - saved_rack_parse_jackrack (saved_rack, ui, filename, node); + if (xmlStrcmp (node->name, _x("jackrack")) == 0) + saved_rack_parse_jackrack (jack_rack, saved_rack, filename, node); } return saved_rack; @@ -303,18 +305,17 @@ saved_rack_new (ui_t * ui, const char * filename, xmlDocPtr doc) static void saved_rack_destroy (saved_rack_t * saved_rack) { -/* GSList * list;*/ - -/* for (list = saved_rack->settings; list; list = g_slist_next (list)) - settings_destroy ((settings_t *) list->data); */ -/* g_slist_free (saved_rack->settings); */ + GSList * list; + for (list = saved_rack->plugins; list; list = g_slist_next (list)) + settings_destroy (((saved_plugin_t *) list->data)->settings); + g_slist_free (saved_rack->plugins); g_free (saved_rack); } int -jack_rack_open_file (ui_t * ui, const char * filename) +jack_rack_open_file (jack_rack_t * jack_rack, const char * filename) { xmlDocPtr doc; saved_rack_t * saved_rack; @@ -328,13 +329,13 @@ jack_rack_open_file (ui_t * ui, const char * filename) return 1; } - if (strcmp ( ((xmlDtdPtr)doc->children)->name, "jackrack") != 0) + if (xmlStrcmp ( ((xmlDtdPtr)doc->children)->name, _x("jackrack")) != 0) { fprintf (stderr, _("The file '%s' is not a JACK Rack settings file\n"), filename); return 1; } - saved_rack = saved_rack_new (ui, filename, doc); + saved_rack = saved_rack_new (jack_rack, filename, doc); xmlFreeDoc (doc); if (!saved_rack) @@ -346,11 +347,10 @@ jack_rack_open_file (ui_t * ui, const char * filename) settings_set_sample_rate (saved_plugin->settings, sample_rate); - jack_rack_add_saved_plugin (ui->jack_rack, saved_plugin); + jack_rack_add_saved_plugin (jack_rack, saved_plugin); } - g_slist_free (saved_rack->plugins); - g_free (saved_rack); + saved_rack_destroy (saved_rack); return 0; }