Ardour  9.7-32-g168326e8b0
lv2_plugin.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2016 David Robillard <d@drobilla.net>
3  * Copyright (C) 2008-2017 Paul Davis <paul@linuxaudiosystems.com>
4  * Copyright (C) 2009-2012 Carl Hetherington <carl@carlh.net>
5  * Copyright (C) 2012-2019 Robin Gareus <robin@gareus.org>
6  * Copyright (C) 2013 John Emmas <john@creativepost.co.uk>
7  * Copyright (C) 2017 Johannes Mueller <github@johannes-mueller.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #ifndef __ardour_lv2_plugin_h__
25 #define __ardour_lv2_plugin_h__
26 
27 #include <set>
28 #include <string>
29 #include <vector>
30 
31 #include "pbd/mutex.h"
32 #include "pbd/ringbuffer.h"
33 
34 #include "temporal/tempo.h"
35 
36 #include "ardour/plugin.h"
38 #include "ardour/uri_map.h"
39 #include "ardour/worker.h"
40 
41 #ifdef HAVE_LV2_1_18_6
42 #include <lv2/atom/atom.h>
43 #else
44 #include <lv2/lv2plug.in/ns/ext/atom/atom.h>
45 #endif
46 
47 #ifdef LV2_EXTENDED // -> needs to eventually go upstream to lv2plug.in
48 #include "ardour/lv2_extensions.h"
49 #endif
50 
51 #ifndef PATH_MAX
52 #define PATH_MAX 1024
53 #endif
54 
55 
56 namespace ARDOUR {
57 
58 // a callback function for lilv_state_new_from_instance(). friend of LV2Plugin
59 // so we can pass an LV2Plugin* in user_data and access its private members.
60 const void* lv2plugin_get_port_value(const char* port_symbol,
61  void* user_data,
62  uint32_t* size,
63  uint32_t* type);
64 
65 class AudioEngine;
66 class Session;
67 struct LV2_Evbuf;
68 
70 {
71  public:
73  ARDOUR::Session& session,
74  const void* c_plugin,
75  samplecnt_t sample_rate);
76  LV2Plugin (const LV2Plugin &);
78 
79  static bool force_state_save; // to be used only by session-state
80 
81  std::string unique_id () const;
82  const char* uri () const;
83  const char* label () const;
84  const char* name () const;
85  const char* maker () const;
86 
87  uint32_t num_ports () const;
88  uint32_t parameter_count () const;
89  float default_value (uint32_t port);
91  void set_parameter (uint32_t port, float val, sampleoffset_t);
92  float get_parameter (uint32_t port) const;
93  std::string get_docs() const;
94  std::string get_parameter_docs(uint32_t which) const;
95  int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
96  uint32_t nth_parameter (uint32_t port, bool& ok) const;
97 
98  IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const;
99 
100  const void* extension_data (const char* uri) const;
101 
102 #ifdef LV2_EXTENDED
103  int setup_export (const char*, LV2_Options_Option const* options = NULL);
105  bool can_export () const { return _export_interface; }
106 #endif
107 
108  const void* c_plugin();
109  const void* c_ui();
110  const void* c_ui_type();
111 
112  bool is_external_ui () const;
113  bool is_external_kx () const;
114  bool ui_is_resizable () const;
115 
116  const char* port_symbol (uint32_t port) const;
117  uint32_t port_index (const char* symbol) const;
118 
119  const LV2_Feature* const* features () { return _features; }
120 
121  std::set<Evoral::Parameter> automatable () const;
122  virtual void set_automation_control (uint32_t, std::shared_ptr<AutomationControl>);
123 
124  void activate ();
125  void deactivate ();
126  void cleanup ();
127 
131 
133  samplepos_t start, samplepos_t end, double speed,
134  ChanMapping const& in, ChanMapping const& out,
135  pframes_t nframes, samplecnt_t offset);
136 
138  std::string state_node_name () const { return "lv2"; }
139 
140  bool parameter_is_audio (uint32_t) const;
141  bool parameter_is_control (uint32_t) const;
142  bool parameter_is_input (uint32_t) const;
143  bool parameter_is_output (uint32_t) const;
144  bool parameter_is_toggled (uint32_t) const;
145 
147 
148  std::shared_ptr<ScalePoints>
149  get_scale_points(uint32_t port_index) const;
150 
152  void set_state_dir (const std::string& d = "");
153 
154  int set_state (const XMLNode& node, int version);
156  std::string current_preset () const;
157 
158  bool has_editor () const;
159  bool has_message_output () const;
160 
161  void add_slave (std::shared_ptr<Plugin>, bool);
162  void remove_slave (std::shared_ptr<Plugin>);
163  void set_non_realtime (bool);
164 
165  bool write_from_ui(uint32_t index,
166  uint32_t protocol,
167  uint32_t size,
168  const uint8_t* body);
169 
170  typedef void UIMessageSink(void* controller,
171  uint32_t index,
172  uint32_t size,
173  uint32_t format,
174  const void* buffer);
175 
177  void emit_to_ui(void* controller, UIMessageSink sink);
178 
179  Worker* worker() { return _worker; }
180 
181  URIMap& uri_map() { return _uri_map; }
182  const URIMap& uri_map() const { return _uri_map; }
183 
184  int work(Worker& worker, uint32_t size, const void* data);
185  int work_response(uint32_t size, const void* data);
186 
187  void set_property(uint32_t key, const Variant& value);
188  const PropertyDescriptors& get_supported_properties (bool readonly) const {
189  return readonly ? _ro_property_descriptors : _property_descriptors;
190  }
191  const ParameterDescriptor& get_property_descriptor(uint32_t id) const;
192  Variant get_property_value (uint32_t) const;
194 
195  /* LV2 Option Options */
196  static void set_global_ui_background_color (uint32_t c) {
197  _ui_background_color = c;
198  }
199  static void set_global_ui_foreground_color (uint32_t c) {
200  _ui_foreground_color = c;
201  }
202  static void set_global_ui_contrasting_color (uint32_t c) {
203  _ui_contrasting_color = c;
204  }
205  static void set_global_ui_style_boxy (bool yn) {
206  _ui_style_boxy = yn ? 1 : 0;
207  }
208  static void set_global_ui_style_flat (bool yn) {
209  _ui_style_flat = yn ? 1 : 0;
210  }
211  static void set_main_window_id (unsigned long id) {
212  _ui_transient_win_id = id;
213  }
214 
215  private:
216  struct Impl;
217  Impl* _impl;
218  void* _module;
219  LV2_Feature** _features;
225  float* _shadow_data;
226  float* _defaults;
227  LV2_Evbuf** _ev_buffers;
228  LV2_Evbuf** _atom_ev_buffers;
235  double _current_bpm;
239  std::string _plugin_state_dir;
249 
250  friend const void* lv2plugin_get_port_value(const char* port_symbol,
251  void* user_data,
252  uint32_t* size,
253  uint32_t* type);
254 
255  typedef enum {
256  PORT_INPUT = 1,
257  PORT_OUTPUT = 1 << 1,
258  PORT_AUDIO = 1 << 2,
259  PORT_CONTROL = 1 << 3,
260  PORT_SEQUENCE = 1 << 5,
261  PORT_MIDI = 1 << 6,
262  PORT_POSITION = 1 << 7,
263  PORT_PATCHMSG = 1 << 8,
264  PORT_AUTOCTRL = 1 << 9,
265  PORT_CTRLED = 1 << 10,
266  PORT_CTRLER = 1 << 11,
267  PORT_NOAUTO = 1 << 12,
268  PORT_OTHOPT = 1 << 13
269  } PortFlag;
270 
271  typedef unsigned PortFlags;
272 
273  std::vector<PortFlags> _port_flags;
274  std::vector<size_t> _port_minimumSize;
275  std::map<std::string,uint32_t> _port_indices;
276 
277  std::map<uint32_t, Variant> _property_values;
278 
281 
282  struct AutomationCtrl {
284  : ac (other.ac)
285  , guard (other.guard)
286  { }
287 
288  AutomationCtrl (std::shared_ptr<ARDOUR::AutomationControl> c)
289  : ac (c)
290  , guard (false)
291  { }
292  std::shared_ptr<ARDOUR::AutomationControl> ac;
293  bool guard;
294  };
295 
296  typedef std::shared_ptr<AutomationCtrl> AutomationCtrlPtr;
297  typedef std::map<uint32_t, AutomationCtrlPtr> AutomationCtrlMap;
300 
301  void handle_property_change (const uint32_t key, const LV2_Atom* value);
302 
304  struct UIMessage {
305  uint32_t index;
306  uint32_t protocol;
307  uint32_t size;
308  };
309 
310  bool write_to_ui(uint32_t index,
311  uint32_t protocol,
312  uint32_t size,
313  const uint8_t* body);
314 
316  uint32_t index,
317  uint32_t protocol,
318  uint32_t size,
319  const uint8_t* body);
320 
321  // Created on demand so the space is only consumed if necessary
324 
326 
328  std::set<std::shared_ptr<LV2Plugin>> _slaves;
329 
330 #ifdef LV2_EXTENDED
333  static void bankpatch_notify (LV2_BankPatch_Handle, uint8_t, uint32_t, uint8_t);
334 
339 
340  uint32_t _bankpatch[16];
342  bool knows_bank_patch () { return seen_bankpatch; }
343  uint32_t bank_patch (uint8_t chn) {
344  assert (chn < 16);
345  if (chn > 15) return UINT32_MAX;
346  return _bankpatch[chn];
347  }
348 #endif
349 
350  typedef struct {
351  const void* (*extension_data) (const char* uri);
352  } LV2_DataAccess;
353 
355  LV2_Feature _data_access_feature;
357  LV2_Feature _make_path_feature;
358  LV2_Feature _log_feature;
360  LV2_Feature _options_feature;
361  LV2_Feature _def_state_feature;
363 #ifdef LV2_EXTENDED
364  LV2_Feature _queue_draw_feature;
365  LV2_Feature _midnam_feature;
366  LV2_Feature _bankpatch_feature;
367 #endif
368 
369  // Options passed to plugin
370  int32_t _seq_size;
371  static int32_t _ui_style_flat;
372  static int32_t _ui_style_boxy;
373  static uint32_t _ui_background_color;
374  static uint32_t _ui_foreground_color;
375  static uint32_t _ui_contrasting_color;
376  static unsigned long _ui_transient_win_id;
377  static float _ui_update_hz;
378 
379  mutable unsigned _state_version;
380 
383 
384  const std::string plugin_dir () const;
385  const std::string scratch_dir () const;
386  const std::string file_dir () const;
387  const std::string state_dir (unsigned num) const;
388 
389  static char* lv2_state_make_path (void* host_data,
390  const char* path);
391 
392  void init (const void* c_plugin, samplecnt_t rate);
394  void run (pframes_t nsamples, bool sync_work = false);
395 
396  void load_supported_properties(PropertyDescriptors& descs, bool writable);
397 
398 #ifdef LV2_EXTENDED
402 
403  bool has_midnam ();
404  bool read_midnam ();
405  std::string midnam_model ();
407 #endif
408 
410 
412  std::string do_save_preset (std::string);
413  void do_remove_preset (std::string);
414  void find_presets ();
415  void add_state (XMLNode *) const;
416 
418 };
419 
420 
421 class LIBARDOUR_API LV2PluginInfo : public PluginInfo , public std::enable_shared_from_this<ARDOUR::LV2PluginInfo> {
422 public:
423  LV2PluginInfo (const char* plugin_uri);
425 
426  static PluginInfoList* discover (std::function <void (std::string const&, PluginScanLogEntry::PluginScanResult, std::string const&, bool)> cb);
427 
428  PluginPtr load (Session& session);
429  std::vector<Plugin::PresetRecord> get_presets (bool user_only) const;
430 
431  bool is_instrument () const;
432  bool is_utility () const;
433  bool is_analyzer () const;
434 
435  char * _plugin_uri;
436 
437 private:
441 };
442 
443 typedef std::shared_ptr<LV2PluginInfo> LV2PluginInfoPtr;
444 
445 } // namespace ARDOUR
446 
447 #endif /* __ardour_lv2_plugin_h__ */
bool is_instrument() const
std::vector< Plugin::PresetRecord > get_presets(bool user_only) const
static PluginInfoList * discover(std::function< void(std::string const &, PluginScanLogEntry::PluginScanResult, std::string const &, bool)> cb)
bool is_analyzer() const
bool is_utility() const
PluginPtr load(Session &session)
LV2PluginInfo(const char *plugin_uri)
bool ui_is_resizable() const
LV2_Feature ** _features
Definition: lv2_plugin.h:219
LV2_Feature _log_feature
Definition: lv2_plugin.h:358
bool parameter_is_control(uint32_t) const
URIMap & _uri_map
Definition: lv2_plugin.h:243
void handle_property_change(const uint32_t key, const LV2_Atom *value)
bool parameter_is_audio(uint32_t) const
void set_state_dir(const std::string &d="")
int connect_and_run(BufferSet &bufs, samplepos_t start, samplepos_t end, double speed, ChanMapping const &in, ChanMapping const &out, pframes_t nframes, samplecnt_t offset)
LV2Plugin(const LV2Plugin &)
std::string midnam_model()
std::vector< size_t > _port_minimumSize
Definition: lv2_plugin.h:274
float * _bpm_control_port
Special input set by ardour.
Definition: lv2_plugin.h:229
const LV2_Feature *const * features()
Definition: lv2_plugin.h:119
const void * extension_data(const char *uri) const
const std::string scratch_dir() const
void UIMessageSink(void *controller, uint32_t index, uint32_t size, uint32_t format, const void *buffer)
Definition: lv2_plugin.h:170
uint32_t designated_bypass_port()
const char * label() const
int set_block_size(pframes_t)
Plugin::Display_Image_Surface * render_inline_display(uint32_t, uint32_t)
const void * c_ui_type()
static int32_t _ui_style_boxy
Definition: lv2_plugin.h:372
LV2_Feature _options_feature
Definition: lv2_plugin.h:360
uint32_t port_index(const char *symbol) const
static uint32_t _ui_background_color
Definition: lv2_plugin.h:373
bool _has_state_interface
Definition: lv2_plugin.h:382
double _next_cycle_speed
Expected start sample of next run cycle.
Definition: lv2_plugin.h:233
std::map< uint32_t, AutomationCtrlPtr > AutomationCtrlMap
Definition: lv2_plugin.h:297
uint32_t _patch_port_in_index
Definition: lv2_plugin.h:241
int work(Worker &worker, uint32_t size, const void *data)
bool is_external_kx() const
void enable_ui_emission()
bool _no_sample_accurate_ctrl
Definition: lv2_plugin.h:244
const std::string state_dir(unsigned num) const
int work_response(uint32_t size, const void *data)
const std::string file_dir() const
float default_value(uint32_t port)
bool has_editor() const
void add_slave(std::shared_ptr< Plugin >, bool)
samplecnt_t _sample_rate
Definition: lv2_plugin.h:222
static unsigned long _ui_transient_win_id
Definition: lv2_plugin.h:376
PBD::RingBuffer< uint8_t > * _from_ui
Definition: lv2_plugin.h:323
LV2_Feature _data_access_feature
Definition: lv2_plugin.h:355
LV2_Feature _queue_draw_feature
Definition: lv2_plugin.h:364
bool load_preset(PresetRecord)
static void set_global_ui_contrasting_color(uint32_t c)
Definition: lv2_plugin.h:202
URIMap & uri_map()
Definition: lv2_plugin.h:181
bool _connect_all_audio_outputs
Definition: lv2_plugin.h:245
AutomationCtrlMap _ctrl_map
Definition: lv2_plugin.h:298
void load_supported_properties(PropertyDescriptors &descs, bool writable)
double _next_cycle_beat
Expected bar_beat of next run cycle.
Definition: lv2_plugin.h:234
void set_property(uint32_t key, const Variant &value)
bool parameter_is_output(uint32_t) const
int get_parameter_descriptor(uint32_t which, ParameterDescriptor &) const
std::string current_preset() const
const LV2_Inline_Display_Interface * _display_interface
Definition: lv2_plugin.h:336
std::map< uint32_t, Variant > _property_values
Definition: lv2_plugin.h:277
bool parameter_is_toggled(uint32_t) const
void init(const void *c_plugin, samplecnt_t rate)
Worker * _state_worker
Definition: lv2_plugin.h:221
bool parameter_is_input(uint32_t) const
std::string state_node_name() const
Definition: lv2_plugin.h:138
unsigned PortFlags
Definition: lv2_plugin.h:271
samplepos_t _next_cycle_start
Expected start sample of next run cycle.
Definition: lv2_plugin.h:232
PBD::Mutex _work_mutex
Definition: lv2_plugin.h:325
bool write_from_ui(uint32_t index, uint32_t protocol, uint32_t size, const uint8_t *body)
uint32_t _patch_port_out_index
Definition: lv2_plugin.h:242
std::string get_parameter_docs(uint32_t which) const
std::shared_ptr< AutomationCtrl > AutomationCtrlPtr
Definition: lv2_plugin.h:296
const char * name() const
LV2_Evbuf ** _ev_buffers
Definition: lv2_plugin.h:227
PBD::RingBuffer< uint8_t > * _to_ui
Definition: lv2_plugin.h:322
std::string get_docs() const
static void bankpatch_notify(LV2_BankPatch_Handle, uint8_t, uint32_t, uint8_t)
PBD::Mutex _slave_lock
Definition: lv2_plugin.h:327
const LV2_Export_Interface * _export_interface
Definition: lv2_plugin.h:338
const LV2_Midnam_Interface * _midname_interface
Definition: lv2_plugin.h:337
void announce_property_values()
static void midnam_update(LV2_Midnam_Handle)
const char * uri() const
LV2_Feature _def_state_feature
Definition: lv2_plugin.h:361
bool has_message_output() const
const char * port_symbol(uint32_t port) const
LV2_Feature _instance_access_feature
Definition: lv2_plugin.h:356
static uint32_t _ui_foreground_color
Definition: lv2_plugin.h:374
LV2Plugin(ARDOUR::AudioEngine &engine, ARDOUR::Session &session, const void *c_plugin, samplecnt_t sample_rate)
void run(pframes_t nsamples, bool sync_work=false)
std::string describe_parameter(Evoral::Parameter)
Variant get_property_value(uint32_t) const
static void set_global_ui_style_flat(bool yn)
Definition: lv2_plugin.h:208
samplecnt_t _current_latency
Definition: lv2_plugin.h:248
const ParameterDescriptor & get_property_descriptor(uint32_t id) const
float * _freewheel_control_port
Special input set by ardour.
Definition: lv2_plugin.h:230
LV2_Feature _make_path_feature
Definition: lv2_plugin.h:357
std::string _plugin_state_dir
Definition: lv2_plugin.h:239
static void set_global_ui_foreground_color(uint32_t c)
Definition: lv2_plugin.h:199
const std::string plugin_dir() const
Worker * worker()
Definition: lv2_plugin.h:179
uint32_t parameter_count() const
static void set_global_ui_style_boxy(bool yn)
Definition: lv2_plugin.h:205
float * _shadow_data
Definition: lv2_plugin.h:225
std::set< Evoral::Parameter > automatable() const
static float _ui_update_hz
Definition: lv2_plugin.h:377
static int32_t _ui_style_flat
Definition: lv2_plugin.h:371
void emit_to_ui(void *controller, UIMessageSink sink)
void remove_slave(std::shared_ptr< Plugin >)
static bool force_state_save
Definition: lv2_plugin.h:79
int set_state(const XMLNode &node, int version)
std::string unique_id() const
bool inline_display_in_gui()
float get_parameter(uint32_t port) const
void allocate_atom_event_buffers()
bool requires_fixed_sized_buffers() const
const void * c_ui()
bool is_external_ui() const
void do_remove_preset(std::string)
PBD::ID _insert_id
Definition: lv2_plugin.h:237
std::vector< PortFlags > _port_flags
Definition: lv2_plugin.h:273
const char * maker() const
unsigned _state_version
Definition: lv2_plugin.h:379
samplecnt_t max_latency() const
void set_insert_id(PBD::ID id)
static char * lv2_state_make_path(void *host_data, const char *path)
bool write_to(PBD::RingBuffer< uint8_t > *dest, uint32_t index, uint32_t protocol, uint32_t size, const uint8_t *body)
std::set< std::shared_ptr< LV2Plugin > > _slaves
Definition: lv2_plugin.h:328
int setup_export(const char *, LV2_Options_Option const *options=NULL)
float * _latency_control_port
Special output set by ardour.
Definition: lv2_plugin.h:231
PropertyDescriptors _ro_property_descriptors
Definition: lv2_plugin.h:280
LV2_Feature _bankpatch_feature
Definition: lv2_plugin.h:366
double _prev_time_scale
previous Port::speed_ratio
Definition: lv2_plugin.h:236
bool write_to_ui(uint32_t index, uint32_t protocol, uint32_t size, const uint8_t *body)
std::map< std::string, uint32_t > _port_indices
Definition: lv2_plugin.h:275
void set_parameter(uint32_t port, float val, sampleoffset_t)
bool knows_bank_patch()
Definition: lv2_plugin.h:342
uint32_t _bpm_control_port_index
Definition: lv2_plugin.h:240
static uint32_t _ui_contrasting_color
Definition: lv2_plugin.h:375
LV2_Feature _block_length_feature
Definition: lv2_plugin.h:362
float * _control_data
Definition: lv2_plugin.h:224
virtual void set_automation_control(uint32_t, std::shared_ptr< AutomationControl >)
Temporal::GridIterator grid_iterator
Definition: lv2_plugin.h:417
IOPortDescription describe_io_port(DataType dt, bool input, uint32_t id) const
uint32_t nth_parameter(uint32_t port, bool &ok) const
std::string do_save_preset(std::string)
static void set_main_window_id(unsigned long id)
Definition: lv2_plugin.h:211
LV2_Feature _work_schedule_feature
Definition: lv2_plugin.h:359
bool connect_all_audio_outputs() const
LV2_Evbuf ** _atom_ev_buffers
Definition: lv2_plugin.h:228
uint32_t bank_patch(uint8_t chn)
Definition: lv2_plugin.h:343
samplecnt_t plugin_latency() const
LV2_Feature _midnam_feature
Definition: lv2_plugin.h:365
void latency_compute_run()
bool has_inline_display()
AutomationCtrlPtr get_automation_control(uint32_t)
bool can_export() const
Definition: lv2_plugin.h:105
LV2_DataAccess _data_access_extension_data
Definition: lv2_plugin.h:354
friend const void * lv2plugin_get_port_value(const char *port_symbol, void *user_data, uint32_t *size, uint32_t *type)
samplecnt_t _max_latency
Definition: lv2_plugin.h:247
const void * c_plugin()
void add_state(XMLNode *) const
static void queue_draw(LV2_Inline_Display_Handle)
Worker * _worker
Definition: lv2_plugin.h:220
const PropertyDescriptors & get_supported_properties(bool readonly) const
Definition: lv2_plugin.h:188
const URIMap & uri_map() const
Definition: lv2_plugin.h:182
PropertyDescriptors _property_descriptors
Definition: lv2_plugin.h:279
bool _can_write_automation
Definition: lv2_plugin.h:246
void set_non_realtime(bool)
static void set_global_ui_background_color(uint32_t c)
Definition: lv2_plugin.h:196
uint32_t num_ports() const
bool _inline_display_in_gui
Definition: lv2_plugin.h:335
std::shared_ptr< ScalePoints > get_scale_points(uint32_t port_index) const
std::map< uint32_t, ParameterDescriptor > PropertyDescriptors
Definition: plugin.h:337
Definition: id.h:33
Definition: xml++.h:114
void * LV2_BankPatch_Handle
void * LV2_Inline_Display_Handle
void * LV2_Midnam_Handle
#define LIBARDOUR_API
PBD::PropertyDescriptor< timepos_t > start
uint32_t pframes_t
std::list< PluginInfoPtr > PluginInfoList
Definition: plugin.h:65
std::shared_ptr< LV2PluginInfo > LV2PluginInfoPtr
Definition: lv2_plugin.h:443
std::shared_ptr< Plugin > PluginPtr
Definition: plugin.h:61
Temporal::samplecnt_t samplecnt_t
const void * lv2plugin_get_port_value(const char *port_symbol, void *user_data, uint32_t *size, uint32_t *type)
Temporal::sampleoffset_t sampleoffset_t
Temporal::samplepos_t samplepos_t
std::shared_ptr< ARDOUR::AutomationControl > ac
Definition: lv2_plugin.h:292
AutomationCtrl(const AutomationCtrl &other)
Definition: lv2_plugin.h:283
AutomationCtrl(std::shared_ptr< ARDOUR::AutomationControl > c)
Definition: lv2_plugin.h:288
Message send to/from UI via ports.
Definition: lv2_plugin.h:304