X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fplugin.h;h=c5eb7d31c9ab372b12e3fd13a8eda6fb862f5a6e;hb=37905d82a611a09342faf52d01378c9b4e86a2ac;hp=d284c2620d75f3580388cac74d102a71b31b7a3e;hpb=424cacfbc83516d9e935bd93135e58b34dcfc002;p=ardour.git diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index d284c2620d..c5eb7d31c9 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -51,6 +51,7 @@ class PluginInsert; class Plugin; class PluginInfo; class AutomationControl; +class SessionObject; typedef boost::shared_ptr PluginPtr; typedef boost::shared_ptr PluginInfoPtr; @@ -88,8 +89,21 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent virtual std::string get_docs () const { return ""; } virtual std::string get_parameter_docs (uint32_t /*which*/) const { return ""; } + struct UILayoutHint { + UILayoutHint () + : x0(-1), x1(-1), y0(-1), y1(-1), knob(false) {} + int x0; + int x1; + int y0; + int y1; + bool knob; + }; + + virtual bool get_layout (uint32_t which, UILayoutHint&) const { return false; } + virtual int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const = 0; virtual uint32_t nth_parameter (uint32_t which, bool& ok) const = 0; + virtual std::string parameter_label (uint32_t which) const; virtual void activate () = 0; virtual void deactivate () = 0; virtual void flush () { deactivate(); activate(); } @@ -99,8 +113,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent virtual bool inplace_broken() const { return false; } virtual int connect_and_run (BufferSet& bufs, - ChanMapping in, ChanMapping out, - pframes_t nframes, framecnt_t offset); + framepos_t start, framepos_t end, double speed, + ChanMapping in, ChanMapping out, + pframes_t nframes, framecnt_t offset); virtual std::set automatable() const = 0; virtual std::string describe_parameter (Evoral::Parameter) = 0; @@ -112,18 +127,27 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent virtual bool parameter_is_input(uint32_t) const = 0; virtual bool parameter_is_output(uint32_t) const = 0; + virtual uint32_t designated_bypass_port () { return UINT32_MAX; } + struct LIBARDOUR_API IOPortDescription { public: IOPortDescription (const std::string& n) : name (n) , is_sidechain (false) + , group_name (n) + , group_channel (0) {} IOPortDescription (const IOPortDescription &other) : name (other.name) , is_sidechain (other.is_sidechain) + , group_name (other.group_name) + , group_channel (other.group_channel) {} std::string name; bool is_sidechain; + + std::string group_name; + uint32_t group_channel; }; virtual IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const; @@ -150,6 +174,11 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent virtual Display_Image_Surface* render_inline_display (uint32_t, uint32_t) { return NULL; } PBD::Signal0 QueueDraw; + virtual bool has_midnam () { return false; } + virtual bool read_midnam () { return false; } + virtual std::string midnam_model () { return ""; } + PBD::Signal0 UpdateMidnam; + struct PresetRecord { PresetRecord () : valid (false) {} PresetRecord (const std::string& u, const std::string& l, bool s = true) : uri (u), label (l), user (s), valid (true) {} @@ -210,23 +239,6 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent return 0; } - /** Emitted when a Latency Changes - * - * (this cannot be part of ARDOUR::Latent because - * signals cannot be copy-constructed). - */ - PBD::Signal2 LatencyChanged; - - /* overload Latent::set_user_latency w/signal emission */ - virtual void set_user_latency (framecnt_t val) { - bool changed = val != _user_latency; - framecnt_t old = effective_latency (); - _user_latency = val; - if (changed) { - LatencyChanged (old, effective_latency ()); /* EMIT SIGNAL */ - } - } - /** the max possible latency a plugin will have */ virtual framecnt_t max_latency () const { return 0; } // TODO = 0, require implementation @@ -245,6 +257,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent */ PBD::Signal0 PresetDirty; + /** Emitted for preset-load to set a control-port */ + PBD::Signal2 PresetPortSetValue; + virtual bool has_editor () const = 0; /** Emitted when a parameter is altered by something outside of our @@ -264,6 +279,9 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent PluginInfoPtr get_info() const { return _info; } virtual void set_info (const PluginInfoPtr inf); + virtual void set_owner (SessionObject* o) { _owner = o; } + SessionObject* owner() const { return _owner; } + ARDOUR::AudioEngine& engine() const { return _engine; } ARDOUR::Session& session() const { return _session; } @@ -316,7 +334,7 @@ protected: /* Called when a parameter of the plugin is changed outside of this * host's control (typical via a plugin's own GUI/editor) */ - void parameter_changed_externally (uint32_t which, float val); + virtual void parameter_changed_externally (uint32_t which, float val); /* should be overridden by plugin API specific derived types to * actually implement changing the parameter. The derived type should @@ -337,13 +355,13 @@ protected: uint32_t _cycles; std::map _presets; + SessionObject* _owner; + private: /** Fill _presets with our presets */ virtual void find_presets () = 0; - void update_presets (std::string src_unique_id, Plugin* src ); - /** Add state to an existing XMLNode */ virtual void add_state (XMLNode *) const = 0; @@ -397,7 +415,7 @@ class LIBARDOUR_API PluginInfo { virtual PluginPtr load (Session& session) = 0; virtual bool is_instrument() const; - virtual bool needs_midi_input() const { return is_instrument (); } + virtual bool needs_midi_input() const; virtual bool in_category (const std::string &) const { return false; } virtual std::vector get_presets (bool user_only) const = 0;