From c342e4bfa9c567f496787a6f5dc9aff483e541c8 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 8 Sep 2021 21:30:35 +0200 Subject: [PATCH] Add API to announce managed MIDI port latency Since Ardour implements jack latency callback, Arodur is responsible to the set latency of those ports. --- libs/ardour/ardour/midiport_manager.h | 2 +- libs/ardour/midiport_manager.cc | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h index 6dd55f998d..87fb8cdde5 100644 --- a/libs/ardour/ardour/midiport_manager.h +++ b/libs/ardour/ardour/midiport_manager.h @@ -91,7 +91,7 @@ public: void set_midi_port_states (const XMLNodeList&); std::list get_midi_port_states () const; - PBD::Signal0 PortsChanged; + void set_public_latency (bool playback); protected: /* asynchronously handled ports: ARDOUR::AsyncMIDIPort */ diff --git a/libs/ardour/midiport_manager.cc b/libs/ardour/midiport_manager.cc index d9050b44b0..ecdb8c9903 100644 --- a/libs/ardour/midiport_manager.cc +++ b/libs/ardour/midiport_manager.cc @@ -139,3 +139,27 @@ MidiPortManager::vkbd_output_port () const { return boost::dynamic_pointer_cast (_vkbd_out); } + +void +MidiPortManager::set_public_latency (bool playback) +{ + typedef std::list > PortList; + PortList pl; + + pl.push_back (_mtc_output_port); + pl.push_back (_midi_clock_output_port); + pl.push_back (_mmc_in); + pl.push_back (_mmc_out); + pl.push_back (_vkbd_out); + pl.push_back (_scene_out); + pl.push_back (_scene_in); + + for (PortList::const_iterator p = pl.begin(); p != pl.end(); ++p) { + LatencyRange range; + (*p)->get_connected_latency_range (range, playback); + /* Ports always align to worst-case latency */ + range.min = range.max; + (*p)->set_private_latency_range (range, playback); + (*p)->set_public_latency_range (range, playback); + } +}