8543ad528570dd1fb1384f5c5ff7b64680e4798d
[ardour.git] / libs / ardour / ardour / plugin_manager.h
1 #ifndef __ardour_plugin_manager_h__
2 #define __ardour_plugin_manager_h__
3
4 #include <list>
5 #include <map>
6 #include <string>
7
8 #include <boost/shared_ptr.hpp>
9
10 #include <ardour/types.h>
11 #include <ardour/plugin.h>
12 #include <ardour/audio_unit.h>
13
14 namespace ARDOUR {
15
16 class PluginInfo;
17 class Plugin;
18 class Session;
19 class AudioEngine;
20
21 class PluginManager {
22   public:
23         PluginManager (ARDOUR::AudioEngine&);
24         ~PluginManager ();
25
26         ARDOUR::PluginInfoList &vst_plugin_info () { return _vst_plugin_info; }
27         ARDOUR::PluginInfoList &ladspa_plugin_info () { return _ladspa_plugin_info; }
28         ARDOUR::PluginInfoList &au_plugin_info () { return _au_plugin_info; }
29
30         void refresh ();
31
32         int add_ladspa_directory (std::string dirpath);
33         int add_vst_directory (std::string dirpath);
34
35         boost::shared_ptr<Plugin> load (ARDOUR::Session& s, PluginInfoPtr info);
36
37         static PluginManager* the_manager() { return _manager; }
38
39   private:
40         ARDOUR::AudioEngine&   _engine;
41         ARDOUR::PluginInfoList _vst_plugin_info;
42         ARDOUR::PluginInfoList _ladspa_plugin_info;
43         ARDOUR::PluginInfoList _au_plugin_info;
44         std::map<uint32_t, std::string> rdf_type;
45
46         std::string ladspa_path;
47         std::string vst_path;
48
49         void ladspa_refresh ();
50         void vst_refresh ();
51
52         void add_lrdf_data (const std::string &path);
53         void add_ladspa_presets ();
54         void add_vst_presets ();
55         void add_presets (std::string domain);
56
57         int vst_discover_from_path (std::string path);
58         int vst_discover (std::string path);
59
60         int ladspa_discover_from_path (std::string path);
61         int ladspa_discover (std::string path);
62
63         int au_discover ();
64
65         std::string get_ladspa_category (uint32_t id);
66
67         static PluginManager* _manager; // singleton
68 };
69
70 } /* namespace ARDOUR */
71
72 #endif /* __ardour_plugin_manager_h__ */
73