diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-08 18:16:01 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-08 18:16:01 +0200 |
commit | 752662051a1d7217ce842ded78d1ee8e041a112f (patch) | |
tree | 019ab4d6d311648969f193992fccd1bc97502249 /libs/ardour/lv2_plugin.cc | |
parent | 75273762976933841b5c0b244c4e8f29158e5519 (diff) |
add Plugin LatencyChanged() signal and max latency report
Diffstat (limited to 'libs/ardour/lv2_plugin.cc')
-rw-r--r-- | libs/ardour/lv2_plugin.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 46582a5fcf..e13328b97b 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -365,6 +365,8 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate) _was_activated = false; _has_state_interface = false; _can_write_automation = false; + _max_latency = 0; + _current_latency = 0; _impl->block_length = _session.get_block_size(); _instance_access_feature.URI = "http://lv2plug.in/ns/ext/instance-access"; @@ -673,6 +675,9 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate) lilv_instance_connect_port(_impl->instance, i, &_control_data[i]); if (latent && i == latency_index) { + LilvNode *max; + lilv_port_get_range(_impl->plugin, port, NULL, NULL, &max); + _max_latency = max ? lilv_node_as_float(max) : .02 * _sample_rate; _latency_control_port = &_control_data[i]; *_latency_control_port = 0; } @@ -2009,6 +2014,12 @@ LV2Plugin::describe_parameter(Evoral::Parameter which) } framecnt_t +LV2Plugin::max_latency () const +{ + return _max_latency; +} + +framecnt_t LV2Plugin::signal_latency() const { if (_latency_control_port) { @@ -2546,6 +2557,13 @@ LV2Plugin::connect_and_run(BufferSet& bufs, _next_cycle_speed = _session.transport_speed(); _next_cycle_start = _session.transport_frame() + (nframes * _next_cycle_speed); + if (_latency_control_port) { + framecnt_t new_latency = signal_latency (); + if (_current_latency != new_latency) { + LatencyChanged (_current_latency, new_latency); /* EMIT SIGNAL */ + } + _current_latency = new_latency; + } return 0; } |