Remove Evoral::MIDIEvent
[ardour.git] / libs / ardour / ardour / lv2_plugin.h
index f1907e80ae53dadf0d9adf9e3669de4d4ba51a56..202ddbb2401a4cba328c5c42fd618c24016f06f7 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef __ardour_lv2_plugin_h__
 #define __ardour_lv2_plugin_h__
 
+#include <glibmm/threads.h>
 #include <set>
 #include <string>
 #include <vector>
@@ -62,6 +63,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        LV2Plugin (const LV2Plugin &);
        ~LV2Plugin ();
 
+       static bool force_state_save;
+
        std::string unique_id () const;
        const char* uri () const;
        const char* label () const;
@@ -79,8 +82,9 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        std::string get_parameter_docs(uint32_t which) const;
        int         get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
        uint32_t    nth_parameter (uint32_t port, bool& ok) const;
+       bool        get_layout (uint32_t which, UILayoutHint&) const;
 
-       IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id);
+       IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const;
 
        const void* extension_data (const char* uri) const;
 
@@ -108,6 +112,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);
 
@@ -125,6 +130,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        bool parameter_is_output (uint32_t) const;
        bool parameter_is_toggled (uint32_t) const;
 
+       uint32_t designated_bypass_port ();
+
        boost::shared_ptr<ScalePoints>
        get_scale_points(uint32_t port_index) const;
 
@@ -159,7 +166,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        URIMap&       uri_map()       { return _uri_map; }
        const URIMap& uri_map() const { return _uri_map; }
 
-       int work(uint32_t size, const void* data);
+       int work(Worker& worker, uint32_t size, const void* data);
        int work_response(uint32_t size, const void* data);
 
        void                       set_property(uint32_t key, const Variant& value);
@@ -173,6 +180,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        void*         _module;
        LV2_Feature** _features;
        Worker*       _worker;
+       Worker*       _state_worker;
        framecnt_t    _sample_rate;
        float*        _control_data;
        float*        _shadow_data;
@@ -184,6 +192,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        float*        _latency_control_port;  ///< Special output set by ardour
        framepos_t    _next_cycle_start;  ///< Expected start frame of next run cycle
        double        _next_cycle_speed;  ///< Expected start frame of next run cycle
+       double        _next_cycle_beat;  ///< Expected bar_beat of next run cycle
+       double        _current_bpm;
        PBD::ID       _insert_id;
        std::string   _plugin_state_dir;
        uint32_t      _patch_port_in_index;
@@ -210,7 +220,9 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
                PORT_POSITION = 1 << 7,  ///< Event port understands position
                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_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;
@@ -262,8 +274,11 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        RingBuffer<uint8_t>* _to_ui;
        RingBuffer<uint8_t>* _from_ui;
 
+       Glib::Threads::Mutex _work_mutex;
+
 #ifdef LV2_EXTENDED
        const LV2_Inline_Display_Interface* _display_interface;
+       const LV2_Midnam_Interface* _midname_interface;
 #endif
 
        typedef struct {
@@ -280,6 +295,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        LV2_Feature    _def_state_feature;
 #ifdef LV2_EXTENDED
        LV2_Feature    _queue_draw_feature;
+       LV2_Feature    _midnam_feature;
 #endif
 
        // Options passed to plugin
@@ -300,13 +316,17 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
 
        void init (const void* c_plugin, framecnt_t rate);
        void allocate_atom_event_buffers ();
-       void run (pframes_t nsamples);
+       void run (pframes_t nsamples, bool sync_work = false);
 
        void load_supported_properties(PropertyDescriptors& descs);
 
 #ifdef LV2_EXTENDED
        bool has_inline_display ();
        Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t);
+
+       bool has_midnam ();
+       bool read_midnam ();
+       std::string midnam_model ();
 #endif
 
        void latency_compute_run ();