X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fjackrack%2Fjack_rack.c;h=96e7f9dededcbedbd0a1e7b27612382cb01d7080;hb=b5bf7e90101c8ff6efd2a1e993673e4f56735caf;hp=577694c6b7b545564ab5c0ebe6469349a5ea7231;hpb=b7241ba1f8be71fd66d670436db163957508eaab;p=melted diff --git a/src/modules/jackrack/jack_rack.c b/src/modules/jackrack/jack_rack.c index 577694c..96e7f9d 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,8 +34,6 @@ #include "jack_rack.h" #include "lock_free_fifo.h" -#include "control_message.h" -#include "ui.h" #include "plugin_settings.h" #ifndef _ @@ -38,14 +41,20 @@ #endif 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 +63,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 +92,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 +152,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; @@ -171,7 +171,7 @@ saved_rack_parse_plugin (saved_rack_t * saved_rack, saved_plugin_t * saved_plugi num = strtoul (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); @@ -250,7 +250,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; @@ -274,13 +274,13 @@ saved_rack_parse_jackrack (saved_rack_t * saved_rack, ui_t * ui, const char * fi { 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; @@ -294,7 +294,7 @@ 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); + saved_rack_parse_jackrack (jack_rack, saved_rack, filename, node); } return saved_rack; @@ -303,18 +303,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; @@ -334,7 +333,7 @@ jack_rack_open_file (ui_t * ui, const char * 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 +345,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; }