Moved PluginInfo::Type to ARDOUR::PluginType in ardour/types.h.
[ardour.git] / libs / ardour / plugin.cc
index 6763e7f5084efa6819d1f962bfbca4fade1d5948..bedc32a0b359f53e951ef1f344458fea05b05b71 100644 (file)
@@ -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, PluginType type)
+{
+       PluginManager *mgr = PluginManager::the_manager();
+       PluginInfoList plugs;
+
+       switch (type) {
+       case ARDOUR::LADSPA:
+               plugs = mgr->ladspa_plugin_info();
+               break;
+
+#ifdef VST_SUPPORT
+       case ARDOUR::VST:
+               plugs = mgr->vst_plugin_info();
+               unique_id = 0; // VST plugins don't have a unique id.
+               break;
+#endif
+
+#ifdef HAVE_COREAUDIO
+       case ARDOUR::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);
+}