X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Flv2_plugin.h;h=9d4e2d1f68719ad308b31fcd20971b7732604ec6;hb=5c32fc3babdd3ed7d715b6aeb24a72f3a0f550a0;hp=4cb23719ae62df1fc8d7482a9649c6b160e5e52a;hpb=3eb04c3c2320ba60185e6efde170b562c3518e50;p=ardour.git diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 4cb23719ae..9d4e2d1f68 100644 --- a/libs/ardour/ardour/lv2_plugin.h +++ b/libs/ardour/ardour/lv2_plugin.h @@ -30,6 +30,10 @@ #include "ardour/worker.h" #include "pbd/ringbuffer.h" +#ifdef LV2_EXTENDED // -> needs to eventually go upstream to lv2plug.in +#include "ardour/lv2_extensions.h" +#endif + #ifndef PATH_MAX #define PATH_MAX 1024 #endif @@ -67,6 +71,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee uint32_t num_ports () const; uint32_t parameter_count () const; float default_value (uint32_t port); + framecnt_t max_latency () const; framecnt_t signal_latency () const; void set_parameter (uint32_t port, float val); float get_parameter (uint32_t port) const; @@ -75,6 +80,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const; uint32_t nth_parameter (uint32_t port, bool& ok) const; + IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const; + const void* extension_data (const char* uri) const; const void* c_plugin(); @@ -91,6 +98,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee const LV2_Feature* const* features () { return _features; } std::set automatable () const; + virtual void set_automation_control (uint32_t, boost::shared_ptr); void activate (); void deactivate (); @@ -100,6 +108,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee bool requires_fixed_sized_buffers () const; int connect_and_run (BufferSet& bufs, + framepos_t start, framepos_t end, double speed, ChanMapping in, ChanMapping out, pframes_t nframes, framecnt_t offset); @@ -182,6 +191,9 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee uint32_t _patch_port_out_index; URIMap& _uri_map; bool _no_sample_accurate_ctrl; + bool _can_write_automation; + framecnt_t _max_latency; + framecnt_t _current_latency; friend const void* lv2plugin_get_port_value(const char* port_symbol, void* user_data, @@ -197,7 +209,11 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee PORT_SEQUENCE = 1 << 5, ///< New atom API event port PORT_MIDI = 1 << 6, ///< Event port understands MIDI PORT_POSITION = 1 << 7, ///< Event port understands position - PORT_PATCHMSG = 1 << 8 ///< Event port supports patch:Message + PORT_PATCHMSG = 1 << 8, ///< Event port supports patch:Message + PORT_AUTOCTRL = 1 << 9, ///< Event port supports auto:AutomationControl + PORT_CTRLED = 1 << 10, ///< Port prop auto:AutomationControlled (can be self controlled) + PORT_CTRLER = 1 << 11, ///< Port prop auto:AutomationController (can be self set) + PORT_NOAUTO = 1 << 12 ///< Port don't allow to automate } PortFlag; typedef unsigned PortFlags; @@ -208,6 +224,25 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee PropertyDescriptors _property_descriptors; + struct AutomationCtrl { + AutomationCtrl (const AutomationCtrl &other) + : ac (other.ac) + , guard (other.guard) + { } + + AutomationCtrl (boost::shared_ptr c) + : ac (c) + , guard (false) + { } + boost::shared_ptr ac; + bool guard; + }; + + typedef boost::shared_ptr AutomationCtrlPtr; + typedef std::map AutomationCtrlMap; + AutomationCtrlMap _ctrl_map; + AutomationCtrlPtr get_automation_control (uint32_t); + /// Message send to/from UI via ports struct UIMessage { uint32_t index; @@ -230,6 +265,10 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee RingBuffer* _to_ui; RingBuffer* _from_ui; +#ifdef LV2_EXTENDED + const LV2_Inline_Display_Interface* _display_interface; +#endif + typedef struct { const void* (*extension_data) (const char* uri); } LV2_DataAccess; @@ -242,6 +281,9 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee LV2_Feature _work_schedule_feature; LV2_Feature _options_feature; LV2_Feature _def_state_feature; +#ifdef LV2_EXTENDED + LV2_Feature _queue_draw_feature; +#endif // Options passed to plugin int32_t _seq_size; @@ -265,6 +307,11 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee void load_supported_properties(PropertyDescriptors& descs); +#ifdef LV2_EXTENDED + bool has_inline_display (); + Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t); +#endif + void latency_compute_run (); std::string do_save_preset (std::string); void do_remove_preset (std::string); @@ -281,6 +328,7 @@ public: static PluginInfoList* discover (); PluginPtr load (Session& session); + std::vector get_presets (bool user_only) const; virtual bool in_category (const std::string &c) const; virtual bool is_instrument() const;