Propagate Latency to backend/system ports (Dummy backend)

amend ab3889ff (which implements this for other backends)
This commit is contained in:
Robin Gareus 2017-09-28 13:14:11 +02:00
parent 8916784352
commit 7e2c002ef6
2 changed files with 53 additions and 11 deletions

View File

@ -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

View File

@ -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;