13
0

Add API to announce managed MIDI port latency

Since Ardour implements jack latency callback, Arodur
is responsible to the set latency of those ports.
This commit is contained in:
Robin Gareus 2021-09-08 21:30:35 +02:00
parent 1978d3723e
commit c342e4bfa9
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 25 additions and 1 deletions

View File

@ -91,7 +91,7 @@ public:
void set_midi_port_states (const XMLNodeList&);
std::list<XMLNode*> get_midi_port_states () const;
PBD::Signal0<void> PortsChanged;
void set_public_latency (bool playback);
protected:
/* asynchronously handled ports: ARDOUR::AsyncMIDIPort */

View File

@ -139,3 +139,27 @@ MidiPortManager::vkbd_output_port () const
{
return boost::dynamic_pointer_cast<AsyncMIDIPort> (_vkbd_out);
}
void
MidiPortManager::set_public_latency (bool playback)
{
typedef std::list<boost::shared_ptr<Port> > 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);
}
}