- void* _module;
- LV2World& _world;
- LV2_Feature** _features;
- SLV2Plugin _plugin;
- SLV2UI _ui;
- SLV2Value _ui_type;
- SLV2Value _name;
- SLV2Value _author;
- SLV2Instance _instance;
- framecnt_t _sample_rate;
- float* _control_data;
- float* _shadow_data;
- float* _defaults;
- float* _latency_control_port;
- bool _was_activated;
- bool _supports_persist;
- std::vector<bool> _port_is_input;
-
+ struct Impl;
+ Impl* _impl;
+ void* _module;
+ LV2_Feature** _features;
+ Worker* _worker;
+ framecnt_t _sample_rate;
+ float* _control_data;
+ float* _shadow_data;
+ float* _defaults;
+ LV2_Evbuf** _ev_buffers;
+ LV2_Evbuf** _atom_ev_buffers;
+ float* _bpm_control_port; ///< Special input set by ardour
+ float* _freewheel_control_port; ///< Special input set by ardour
+ 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
+ PBD::ID _insert_id;
+
+ friend const void* lv2plugin_get_port_value(const char* port_symbol,
+ void* user_data,
+ uint32_t* size,
+ uint32_t* type);
+
+ typedef enum {
+ PORT_INPUT = 1, ///< Input port
+ PORT_OUTPUT = 1 << 1, ///< Output port
+ PORT_AUDIO = 1 << 2, ///< Audio (buffer of float)
+ PORT_CONTROL = 1 << 3, ///< Control (single float)
+ 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
+ } PortFlag;
+
+ typedef unsigned PortFlags;
+
+ std::vector<PortFlags> _port_flags;
+ std::vector<size_t> _port_minimumSize;