diff options
author | Robin Gareus <robin@gareus.org> | 2017-09-28 13:14:11 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-09-28 13:14:11 +0200 |
commit | 7e2c002ef67ac7396f2534c0fed7f9f447081a5a (patch) | |
tree | cdd2334a8f5fe8fc01a0775022404eff1e6c0bc0 /libs/backends/dummy | |
parent | 8916784352a2efe491faf10e5101b529fb302e2d (diff) |
Propagate Latency to backend/system ports (Dummy backend)
amend ab3889ff (which implements this for other backends)
Diffstat (limited to 'libs/backends/dummy')
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.cc | 49 | ||||
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.h | 15 |
2 files changed, 53 insertions, 11 deletions
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 825add2c94..3993c82f1b 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -956,6 +956,24 @@ DummyAudioBackend::unregister_ports (bool system_only) } } +void +DummyAudioBackend::update_system_port_latecies () +{ + for (std::vector<DummyAudioPort*>::const_iterator it = _system_inputs.begin (); it != _system_inputs.end (); ++it) { + (*it)->update_connected_latency (true); + } + for (std::vector<DummyAudioPort*>::const_iterator it = _system_outputs.begin (); it != _system_outputs.end (); ++it) { + (*it)->update_connected_latency (false); + } + + for (std::vector<DummyMidiPort*>::const_iterator it = _system_midi_in.begin (); it != _system_midi_in.end (); ++it) { + (*it)->update_connected_latency (true); + } + for (std::vector<DummyMidiPort*>::const_iterator it = _system_midi_out.begin (); it != _system_midi_out.end (); ++it) { + (*it)->update_connected_latency (false); + } +} + int DummyAudioBackend::connect (const std::string& src, const std::string& dst) { @@ -1400,6 +1418,7 @@ DummyAudioBackend::main_process_thread () manager.graph_order_callback(); } if (connections_changed || ports_changed) { + update_system_port_latecies (); engine.latency_callback(false); engine.latency_callback(true); } @@ -1600,6 +1619,36 @@ bool DummyPort::is_physically_connected () const return false; } +void +DummyPort::set_latency_range (const LatencyRange &latency_range, bool for_playback) +{ + if (for_playback) { + _playback_latency_range = latency_range; + } else { + _capture_latency_range = latency_range; + } + + for (std::set<DummyPort*>::const_iterator it = _connections.begin (); it != _connections.end (); ++it) { + if ((*it)->is_physical ()) { + (*it)->update_connected_latency (is_input ()); + } + } +} + +void +DummyPort::update_connected_latency (bool for_playback) +{ + LatencyRange lr; + lr.min = lr.max = 0; + for (std::set<DummyPort*>::const_iterator it = _connections.begin (); it != _connections.end (); ++it) { + LatencyRange l; + l = (*it)->latency_range (for_playback); + lr.min = std::max (lr.min, l.min); + lr.max = std::max (lr.max, l.max); + } + set_latency_range (lr, for_playback); +} + void DummyPort::setup_random_number_generator () { #ifdef PLATFORM_WINDOWS diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index 4bd4078ec5..48e588d364 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -106,17 +106,9 @@ class DummyPort { return for_playback ? _playback_latency_range : _capture_latency_range; } - void set_latency_range (const LatencyRange &latency_range, bool for_playback) - { - if (for_playback) - { - _playback_latency_range = latency_range; - } - else - { - _capture_latency_range = latency_range; - } - } + void set_latency_range (const LatencyRange &latency_range, bool for_playback); + + void update_connected_latency (bool for_playback); private: DummyAudioBackend &_dummy_backend; @@ -456,6 +448,7 @@ class DummyAudioBackend : public AudioBackend { PortHandle add_port (const std::string& shortname, ARDOUR::DataType, ARDOUR::PortFlags); int register_system_ports (); void unregister_ports (bool system_only = false); + void update_system_port_latecies (); std::vector<DummyAudioPort *> _system_inputs; std::vector<DummyAudioPort *> _system_outputs; |