Propagate Latency to backend/system ports (Dummy backend)
amend ab3889ff
(which implements this for other backends)
This commit is contained in:
parent
8916784352
commit
7e2c002ef6
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user