summaryrefslogtreecommitdiff
path: root/libs/ardour/lv2_plugin.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-05-08 22:01:07 +0200
committerRobin Gareus <robin@gareus.org>2019-05-08 22:04:43 +0200
commit48b960fdefef2b3c02f47baca328638e9ecef9a4 (patch)
tree7fc845fcf5b9ad7b59849967eab400c8124f9256 /libs/ardour/lv2_plugin.cc
parentf08e2b7eb147cade1d4d743caa3a01b32b335e65 (diff)
Notify custom UIs when designated LV2 BPM port changes
Diffstat (limited to 'libs/ardour/lv2_plugin.cc')
-rw-r--r--libs/ardour/lv2_plugin.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 757e1fa11d..12fc58a6cb 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -356,6 +356,7 @@ LV2Plugin::LV2Plugin (AudioEngine& engine,
, _worker(NULL)
, _state_worker(NULL)
, _insert_id("0")
+ , _bpm_control_port_index((uint32_t)-1)
, _patch_port_in_index((uint32_t)-1)
, _patch_port_out_index((uint32_t)-1)
, _uri_map(URIMap::instance())
@@ -373,6 +374,7 @@ LV2Plugin::LV2Plugin (const LV2Plugin& other)
, _worker(NULL)
, _state_worker(NULL)
, _insert_id(other._insert_id)
+ , _bpm_control_port_index((uint32_t)-1)
, _patch_port_in_index((uint32_t)-1)
, _patch_port_out_index((uint32_t)-1)
, _uri_map(URIMap::instance())
@@ -759,6 +761,11 @@ LV2Plugin::init(const void* c_plugin, samplecnt_t rate)
_impl->designated_input (LV2_TIME__beatsPerMinute, params, (void**)&_bpm_control_port);
_impl->designated_input (LV2_CORE__freeWheeling, params, (void**)&_freewheel_control_port);
+ const LilvPort* bpmport = lilv_plugin_get_port_by_designation(plugin, _world.lv2_InputPort, _world.time_beatsPerMin);
+ if (bpmport) {
+ _bpm_control_port_index = lilv_port_get_index (plugin, bpmport);
+ }
+
for (uint32_t i = 0; i < num_ports; ++i) {
const LilvPort* port = lilv_plugin_get_port_by_index(plugin, i);
const LilvNode* sym = lilv_port_get_symbol(plugin, port);
@@ -2397,6 +2404,9 @@ LV2Plugin::set_automation_control (uint32_t i, boost::shared_ptr<AutomationContr
DEBUG_TRACE(DEBUG::LV2Automate, string_compose ("Ctrl Port %1\n", i));
_ctrl_map [i] = AutomationCtrlPtr (new AutomationCtrl(c));
}
+ else if (i == _bpm_control_port_index) {
+ _ctrl_map [i] = AutomationCtrlPtr (new AutomationCtrl(c));
+ }
}
LV2Plugin::AutomationCtrlPtr
@@ -2577,7 +2587,15 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
}
if (_bpm_control_port) {
- *_bpm_control_port = tmap.tempo_at_sample (start).note_types_per_minute();
+ float bpm = tmap.tempo_at_sample (start).note_types_per_minute();
+ if (*_bpm_control_port != bpm) {
+ AutomationCtrlPtr c = get_automation_control (_bpm_control_port_index);
+ if (c && c->ac) {
+ /* may be NULL for replicated instances - only one custom UI/ctrl */
+ c->ac->Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */
+ }
+ }
+ *_bpm_control_port = bpm;
}
#ifdef LV2_EXTENDED