From 659a8a26aeb8358b5bf4589d90248e014b6b69e0 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 7 Mar 2015 09:11:15 +0100 Subject: fix latency report, take buffersize changes into account. --- libs/backends/dummy/dummy_audiobackend.cc | 39 ++++++++++++++++++++----------- libs/backends/dummy/dummy_audiobackend.h | 2 +- 2 files changed, 27 insertions(+), 14 deletions(-) (limited to 'libs/backends/dummy') diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 790056b5e8..885a85628b 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -206,10 +206,8 @@ DummyAudioBackend::set_buffer_size (uint32_t bs) * with 'Loopback' there is exactly once cycle latency, * divide it between In + Out; */ - const size_t l_in = _samples_per_period * .25; - const size_t l_out = _samples_per_period - l_in; LatencyRange lr; - lr.min = lr.max = l_in + _systemic_input_latency; + lr.min = lr.max = _systemic_input_latency; for (std::vector::const_iterator it = _system_inputs.begin (); it != _system_inputs.end (); ++it) { set_latency_range (*it, false, lr); } @@ -217,7 +215,7 @@ DummyAudioBackend::set_buffer_size (uint32_t bs) set_latency_range (*it, false, lr); } - lr.min = lr.max = l_out + _systemic_output_latency; + lr.min = lr.max = _systemic_output_latency; for (std::vector::const_iterator it = _system_outputs.begin (); it != _system_outputs.end (); ++it) { set_latency_range (*it, true, lr); } @@ -765,12 +763,9 @@ DummyAudioBackend::register_system_ports() const int m_ins = _n_midi_inputs == UINT_MAX ? 0 : _n_midi_inputs; const int m_out = _n_midi_outputs == UINT_MAX ? a_ins : _n_midi_outputs; - /* with 'Loopback' there is exactly once cycle latency, divide it between In + Out; */ - const size_t l_in = _samples_per_period * .25; - const size_t l_out = _samples_per_period - l_in; /* audio ports */ - lr.min = lr.max = l_in + _systemic_input_latency; + lr.min = lr.max = _systemic_input_latency; for (int i = 1; i <= a_ins; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:capture_%d", i); @@ -781,7 +776,7 @@ DummyAudioBackend::register_system_ports() static_cast(p)->setup_generator (gt, _samplerate); } - lr.min = lr.max = l_out + _systemic_output_latency; + lr.min = lr.max = _systemic_output_latency; for (int i = 1; i <= a_out; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:playback_%d", i); @@ -792,7 +787,7 @@ DummyAudioBackend::register_system_ports() } /* midi ports */ - lr.min = lr.max = l_in + _systemic_input_latency; + lr.min = lr.max = _systemic_input_latency; for (int i = 0; i < m_ins; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:midi_capture_%d", i+1); @@ -805,7 +800,7 @@ DummyAudioBackend::register_system_ports() } } - lr.min = lr.max = l_out + _systemic_output_latency; + lr.min = lr.max = _systemic_output_latency; for (int i = 1; i <= m_out; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:midi_playback_%d", i); @@ -1049,14 +1044,32 @@ DummyAudioBackend::set_latency_range (PortEngine::PortHandle port, bool for_play LatencyRange DummyAudioBackend::get_latency_range (PortEngine::PortHandle port, bool for_playback) { + LatencyRange r; if (!valid_port (port)) { PBD::error << _("DummyPort::get_latency_range (): invalid port.") << endmsg; - LatencyRange r; r.min = 0; r.max = 0; return r; } - return static_cast(port)->latency_range (for_playback); + DummyPort *p = static_cast(port); + assert(p); + + r = p->latency_range (for_playback); + if (p->is_physical() && p->is_terminal()) { + if (p->is_input() && for_playback) { + const size_t l_in = _samples_per_period * .25; + r.min += _samples_per_period; + r.max += _samples_per_period; + } + if (p->is_output() && !for_playback) { + /* with 'Loopback' there is exactly once cycle latency, divide it between In + Out; */ + const size_t l_in = _samples_per_period * .25; + const size_t l_out = _samples_per_period - l_in; + r.min += _samples_per_period; + r.max += _samples_per_period; + } + } + return r; } /* Discovering physical ports */ diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index 11597cfc31..226018d584 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -93,7 +93,7 @@ class DummyPort { virtual void* get_buffer (pframes_t nframes) = 0; void next_period () { _gen_cycle = false; } - const LatencyRange& latency_range (bool for_playback) const + const LatencyRange latency_range (bool for_playback) const { return for_playback ? _playback_latency_range : _capture_latency_range; } -- cgit v1.2.3