X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Flv2_plugin.h;h=9696784f010a83d679a835e62dabf2091ddd208d;hb=8a128b33d38172ae525ac798c53bc105bc4e2c64;hp=034101ee41f1c1014f9157927a359d11b77919ec;hpb=7000afdc66c9e0ae8dcf9ec080517dabba1e7f34;p=ardour.git diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 034101ee41..9696784f01 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 { @@ -111,7 +116,7 @@ class LIBARDOUR_API 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); @@ -136,36 +141,21 @@ class LIBARDOUR_API 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 +175,9 @@ class LIBARDOUR_API 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; friend const void* lv2plugin_get_port_value(const char* port_symbol, void* user_data, @@ -199,7 +192,8 @@ class LIBARDOUR_API 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 +202,8 @@ class LIBARDOUR_API 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; @@ -264,6 +260,8 @@ class LIBARDOUR_API 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 +270,16 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee }; -class LIBARDOUR_API 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); - const void* _c_plugin; + char * _plugin_uri; }; typedef boost::shared_ptr LV2PluginInfoPtr;