+class LIBARDOUR_API PluginInfo {
+ public:
+ PluginInfo () { }
+ virtual ~PluginInfo () { }
+
+ std::string name;
+ std::string category;
+ std::string creator;
+ std::string path;
+ ChanCount n_inputs;
+ ChanCount n_outputs;
+ ARDOUR::PluginType type;
+
+ std::string unique_id;
+
+ virtual PluginPtr load (Session& session) = 0;
+
+ /* NOTE: it is possible for a plugin to be an effect AND an instrument.
+ * override these funcs as necessary to support that.
+ */
+ virtual bool is_effect () const;
+ virtual bool is_instrument () const;
+ virtual bool is_utility () const; //this includes things like "generators" and "midi filters"
+ virtual bool is_analyzer () const;
+
+ virtual bool needs_midi_input() const;
+
+ virtual std::vector<Plugin::PresetRecord> get_presets (bool user_only) const = 0;
+
+ /* NOTE: this block of virtual methods looks like the interface
+ to a Processor, but Plugin does not inherit from Processor.
+ It is therefore not required that these precisely match
+ the interface, but it is likely that they will evolve together.
+ */
+
+ /* this returns true if the plugin can change its inputs or outputs on demand.
+ LADSPA, LV2 and VST plugins cannot do this. AudioUnits can.
+ */
+
+ virtual bool reconfigurable_io() const { return false; }
+
+ protected:
+ friend class PluginManager;
+ uint32_t index;
+};
+