summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/plugin.cc')
-rw-r--r--libs/ardour/plugin.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc
index 6763e7f508..8ea95b8903 100644
--- a/libs/ardour/plugin.cc
+++ b/libs/ardour/plugin.cc
@@ -39,6 +39,8 @@
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/plugin.h>
+#include <ardour/ladspa_plugin.h>
+#include <ardour/plugin_manager.h>
#include <pbd/stl_delete.h>
@@ -240,3 +242,43 @@ Plugin::save_preset (string name, string domain)
return true;
}
+
+PluginPtr
+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 PluginPtr ((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 (*i)->load (session);
+ }
+ }
+
+ return PluginPtr ((Plugin*) 0);
+}