X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fplugin_manager.cc;h=dac8a9eead4060f752df94daa4c69e4587a38ee0;hb=badc087263990ecf360792c10e4d9f2d60828d43;hp=0408764c96029a8e88dde221eae4f38be77744ea;hpb=2b6aa4f50734506bac76650abdc28792f96c9107;p=ardour.git diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 0408764c96..dac8a9eead 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2004 Paul Davis + Copyright (C) 2000-2006 Paul Davis 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 @@ -15,9 +15,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ +#define __STDC_FORMAT_MACROS 1 +#include + #include #include #include @@ -36,8 +38,10 @@ #include #include #include + +#ifdef VST_SUPPORT #include -#include +#endif #include #include @@ -49,8 +53,7 @@ using namespace PBD; PluginManager* PluginManager::_manager = 0; -PluginManager::PluginManager (AudioEngine& e) - : _engine (e) +PluginManager::PluginManager () { char* s; string lrdf_path; @@ -82,7 +85,6 @@ PluginManager::PluginManager (AudioEngine& e) } refresh (); - if (_manager == 0) { _manager = this; } @@ -105,7 +107,7 @@ PluginManager::ladspa_refresh () _ladspa_plugin_info.clear (); if (ladspa_path.length() == 0) { - ladspa_path = "/usr/local/lib/ladspa:/usr/lib/ladspa"; + ladspa_path = "/usr/local/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib64/ladspa:/usr/lib/ladspa:/Library/Audio/Plug-Ins/LADSPA"; } ladspa_discover_from_path (ladspa_path); @@ -246,23 +248,24 @@ PluginManager::ladspa_discover (string path) break; } - PluginInfoPtr info(new PluginInfo); + PluginInfoPtr info(new LadspaPluginInfo); info->name = descriptor->Name; info->category = get_ladspa_category(descriptor->UniqueID); + info->creator = descriptor->Maker; info->path = path; info->index = i; - info->n_inputs = 0; - info->n_outputs = 0; - info->type = PluginInfo::LADSPA; + info->n_inputs = ChanCount(); + info->n_outputs = ChanCount(); + info->type = ARDOUR::LADSPA; info->unique_id = descriptor->UniqueID; for (uint32_t n=0; n < descriptor->PortCount; ++n) { if ( LADSPA_IS_PORT_AUDIO (descriptor->PortDescriptors[n]) ) { if ( LADSPA_IS_PORT_INPUT (descriptor->PortDescriptors[n]) ) { - info->n_inputs++; + info->n_inputs.set_audio(info->n_inputs.n_audio() + 1); } else if ( LADSPA_IS_PORT_OUTPUT (descriptor->PortDescriptors[n]) ) { - info->n_outputs++; + info->n_outputs.set_audio(info->n_outputs.n_audio() + 1); } } } @@ -276,99 +279,6 @@ PluginManager::ladspa_discover (string path) return 0; } -boost::shared_ptr -PluginManager::load (Session& session, PluginInfoPtr info) -{ - try { - boost::shared_ptr plugin; - - if (info->type == PluginInfo::VST) { - -#ifdef VST_SUPPORT - if (Config->get_use_vst()) { - FSTHandle* handle; - - if ((handle = fst_load (info->path.c_str())) == 0) { - error << string_compose(_("VST: cannot load module from \"%1\""), info->path) << endmsg; - } else { - plugin.reset (new VSTPlugin (_engine, session, handle)); - } - } else { - error << _("You asked ardour to not use any VST plugins") << endmsg; - } -#else // !VST_SUPPORT - error << _("This version of ardour has no support for VST plugins") << endmsg; - return boost::shared_ptr ((Plugin*) 0); -#endif // !VST_SUPPORT - - } else if (info->type == PluginInfo::LADSPA) { - void *module; - - if ((module = dlopen (info->path.c_str(), RTLD_NOW)) == 0) { - error << string_compose(_("LADSPA: cannot load module from \"%1\""), info->path) << endmsg; - error << dlerror() << endmsg; - } else { - plugin.reset (new LadspaPlugin (module, _engine, session, info->index, session.frame_rate())); - } - } else if (info->type == PluginInfo::AudioUnit) { - -#ifdef HAVE_COREAUDIO - -#else // !HAVE_COREAUDIO - error << _("This version of ardour has no support for AudioUnit plugins") << endmsg; - return boost::shared_ptr ((Plugin*) 0); -#endif - } - - plugin->set_info(*info); - return plugin; - } - - catch (failed_constructor &err) { - return boost::shared_ptr ((Plugin*) 0); - } -} - -boost::shared_ptr -ARDOUR::find_plugin(Session& session, string name, long unique_id, PluginInfo::Type type) -{ - PluginManager *mgr = PluginManager::the_manager(); - PluginInfoList plugs; - - switch (type) { - case PluginInfo::LADSPA: - plugs = mgr->ladspa_plugin_info(); - break; - -#ifdef VST_SUPPORT - case PluginInfo::VST: - plugs = mgr->vst_plugin_info(); - unique_id = 0; // VST plugins don't have a unique id. - break; -#endif - -#ifdef HAVE_COREAUDIO - case PluginInfo::AudioUnit: - plugs = AUPluginInfo::discover (); - unique_id = 0; // Neither do AU. - break; -#endif - - default: - return boost::shared_ptr ((Plugin *) 0); - } - - PluginInfoList::iterator i; - for (i = plugs.begin(); i != plugs.end(); ++i) { - if ((name == "" || (*i)->name == name) && - (unique_id == 0 || (*i)->unique_id == unique_id)) { - return mgr->load (session, *i); - } - } - - return boost::shared_ptr ((Plugin*) 0); -} - string PluginManager::get_ladspa_category (uint32_t plugin_id) { @@ -377,7 +287,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id) snprintf(buf, sizeof(buf), "%s%" PRIu32, LADSPA_BASE, plugin_id); pattern.subject = buf; - pattern.predicate = RDF_TYPE; + pattern.predicate = (char*)RDF_TYPE; pattern.object = 0; pattern.object_type = lrdf_uri; @@ -388,7 +298,7 @@ PluginManager::get_ladspa_category (uint32_t plugin_id) } pattern.subject = matches1->object; - pattern.predicate = LADSPA_BASE "hasLabel"; + pattern.predicate = (char*)LADSPA_BASE "hasLabel"; pattern.object = 0; pattern.object_type = lrdf_literal; @@ -433,7 +343,7 @@ PluginManager::add_vst_directory (string path) static bool vst_filter (const string& str, void *arg) { /* Not a dotfile, has a prefix before a period, suffix is "dll" */ - + return str[0] != '.' && (str.length() > 4 && str.find (".dll") == (str.length() - 4)); } @@ -465,6 +375,7 @@ PluginManager::vst_discover (string path) FSTInfo* finfo; if ((finfo = fst_get_info (const_cast (path.c_str()))) == 0) { + warning << "Cannot get VST information from " << path << endmsg; return -1; } @@ -474,7 +385,7 @@ PluginManager::vst_discover (string path) << endl; } - PluginInfoPtr info(new PluginInfo); + PluginInfoPtr info(new VSTPluginInfo); /* what a goddam joke freeware VST is */ @@ -486,10 +397,11 @@ PluginManager::vst_discover (string path) info->category = "VST"; info->path = path; + // need to set info->creator but FST doesn't provide it info->index = 0; info->n_inputs = finfo->numInputs; info->n_outputs = finfo->numOutputs; - info->type = PluginInfo::VST; + info->type = ARDOUR::VST; _vst_plugin_info.push_back (info); fst_free_info (finfo);