summaryrefslogtreecommitdiff
path: root/libs/backends/dummy
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-09-28 13:14:11 +0200
committerRobin Gareus <robin@gareus.org>2017-09-28 13:14:11 +0200
commit7e2c002ef67ac7396f2534c0fed7f9f447081a5a (patch)
treecdd2334a8f5fe8fc01a0775022404eff1e6c0bc0 /libs/backends/dummy
parent8916784352a2efe491faf10e5101b529fb302e2d (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.cc49
-rw-r--r--libs/backends/dummy/dummy_audiobackend.h15
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;