X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Flv2_plugin.h;h=a0572b5af73c11846721452c9ae50424c56eef37;hb=065d7c852a1586a3020affd6905f108abf252119;hp=6b4b1a1c67461e073cd2c8f169a0349e20a1b67e;hpb=4861eca97483128e5febb575b94688581abb0154;p=ardour.git diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 6b4b1a1c67..a0572b5af7 100644 --- a/libs/ardour/ardour/lv2_plugin.h +++ b/libs/ardour/ardour/lv2_plugin.h @@ -23,12 +23,17 @@ #include #include #include +#include #include "ardour/plugin.h" #include "ardour/uri_map.h" #include "ardour/worker.h" #include "pbd/ringbuffer.h" +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + typedef struct LV2_Evbuf_Impl LV2_Evbuf; namespace ARDOUR { @@ -43,7 +48,7 @@ const void* lv2plugin_get_port_value(const char* port_symbol, class AudioEngine; class Session; -class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee +class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee { public: LV2Plugin (ARDOUR::AudioEngine& engine, @@ -91,7 +96,8 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee void deactivate (); void cleanup (); - int set_block_size (pframes_t /*nframes*/) { return 0; } + int set_block_size (pframes_t); + bool requires_fixed_sized_buffers () const; int connect_and_run (BufferSet& bufs, ChanMapping in, ChanMapping out, @@ -111,10 +117,10 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee bool parameter_is_output (uint32_t) const; bool parameter_is_toggled (uint32_t) const; - boost::shared_ptr + boost::shared_ptr get_scale_points(uint32_t port_index) const; - void set_insert_info(const PluginInsert* insert); + void set_insert_id(PBD::ID id); int set_state (const XMLNode& node, int version); bool save_preset (std::string uri); @@ -136,36 +142,21 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee uint32_t format, const void* buffer); - void enable_ui_emmission(); + void enable_ui_emission(); void emit_to_ui(void* controller, UIMessageSink sink); Worker* worker() { return _worker; } + URIMap& uri_map() { return _uri_map; } + const URIMap& uri_map() const { return _uri_map; } + int work(uint32_t size, const void* data); int work_response(uint32_t size, const void* data); - static URIMap _uri_map; - - struct URIDs { - uint32_t atom_Chunk; - uint32_t atom_Path; - uint32_t atom_Sequence; - uint32_t atom_eventTransfer; - uint32_t log_Error; - uint32_t log_Note; - uint32_t log_Warning; - uint32_t midi_MidiEvent; - uint32_t time_Position; - uint32_t time_bar; - uint32_t time_barBeat; - uint32_t time_beatUnit; - uint32_t time_beatsPerBar; - uint32_t time_beatsPerMinute; - uint32_t time_frame; - uint32_t time_speed; - }; - - static URIDs urids; + void set_property(uint32_t key, const Variant& value); + const PropertyDescriptors& get_supported_properties() const { return _property_descriptors; } + const ParameterDescriptor& get_property_descriptor(uint32_t id) const; + void announce_property_values(); private: struct Impl; @@ -185,6 +176,10 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee framepos_t _next_cycle_start; ///< Expected start frame of next run cycle double _next_cycle_speed; ///< Expected start frame of next run cycle PBD::ID _insert_id; + uint32_t _patch_port_in_index; + uint32_t _patch_port_out_index; + URIMap& _uri_map; + bool _no_sample_accurate_ctrl; friend const void* lv2plugin_get_port_value(const char* port_symbol, void* user_data, @@ -199,7 +194,8 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee PORT_EVENT = 1 << 4, ///< Old event API event port 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_POSITION = 1 << 7, ///< Event port understands position + PORT_PATCHMSG = 1 << 8 ///< Event port supports patch:Message } PortFlag; typedef unsigned PortFlags; @@ -208,6 +204,8 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee std::vector _port_minimumSize; std::map _port_indices; + PropertyDescriptors _property_descriptors; + /// Message send to/from UI via ports struct UIMessage { uint32_t index; @@ -244,7 +242,6 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee LV2_Feature _def_state_feature; // Options passed to plugin - int32_t _block_length; int32_t _seq_size; mutable unsigned _state_version; @@ -264,6 +261,8 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee void allocate_atom_event_buffers (); void run (pframes_t nsamples); + void load_supported_properties(PropertyDescriptors& descs); + void latency_compute_run (); std::string do_save_preset (std::string); void do_remove_preset (std::string); @@ -272,16 +271,17 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee }; -class LV2PluginInfo : public PluginInfo { +class LIBARDOUR_API LV2PluginInfo : public PluginInfo , public boost::enable_shared_from_this { public: - LV2PluginInfo (const void* c_plugin); + LV2PluginInfo (const char* plugin_uri); ~LV2PluginInfo (); static PluginInfoList* discover (); PluginPtr load (Session& session); + virtual bool in_category (const std::string &c) const; - const void* _c_plugin; + char * _plugin_uri; }; typedef boost::shared_ptr LV2PluginInfoPtr;