From 0d668b9beb5cf976a2454ddb6bf80a3014e84f69 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 27 Apr 2017 20:59:15 +0200 Subject: [PATCH] ALSA backend: always register ports with systemic latency and allow re-start to un/set reporting latency. --- libs/backends/alsa/alsa_audiobackend.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index b3948f8342..efb5a6c440 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -805,7 +805,14 @@ AlsaAudioBackend::_start (bool for_latency_measurement) } if (_active || _run) { - PBD::error << _("AlsaAudioBackend: already active.") << endmsg; + if (for_latency_measurement != _measure_latency) { + _measure_latency = for_latency_measurement; + update_systemic_audio_latencies(); + update_systemic_midi_latencies (); + PBD::info << _("AlsaAudioBackend: reload latencies.") << endmsg; + return NoError; + } + PBD::info << _("AlsaAudioBackend: already active.") << endmsg; return BackendReinitializationError; } @@ -1043,6 +1050,7 @@ AlsaAudioBackend::stop () delete _pcmi; _pcmi = 0; _midi_ins = _midi_outs = 0; release_device(); + _measure_latency = false; return (_active == false) ? 0 : -1; } @@ -1384,7 +1392,7 @@ AlsaAudioBackend::register_system_audio_ports() const uint32_t lcpp = (_periods_per_cycle - 2) * _samples_per_period; /* audio ports */ - lr.min = lr.max = (_measure_latency ? 0 : _systemic_audio_input_latency); + lr.min = lr.max = (_systemic_audio_input_latency); for (int i = 1; i <= a_ins; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:capture_%d", i); @@ -1396,7 +1404,7 @@ AlsaAudioBackend::register_system_audio_ports() _system_inputs.push_back (ap); } - lr.min = lr.max = lcpp + (_measure_latency ? 0 : _systemic_audio_output_latency); + lr.min = lr.max = lcpp + (_systemic_audio_output_latency); for (int i = 1; i <= a_out; ++i) { char tmp[64]; snprintf(tmp, sizeof(tmp), "system:playback_%d", i); @@ -1479,7 +1487,7 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device) delete mout; } LatencyRange lr; - lr.min = lr.max = (_measure_latency ? 0 : nfo->systemic_output_latency); + lr.min = lr.max = (nfo->systemic_output_latency); set_latency_range (p, true, lr); static_cast(p)->set_n_periods(_periods_per_cycle); // TODO check MIDI alignment AlsaPort *ap = static_cast(p); @@ -1519,7 +1527,7 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device) continue; } LatencyRange lr; - lr.min = lr.max = (_measure_latency ? 0 : nfo->systemic_input_latency); + lr.min = lr.max = (nfo->systemic_input_latency); set_latency_range (p, false, lr); AlsaPort *ap = static_cast(p); ap->set_pretty_name (replace_name_io (i->first, true)); -- 2.30.2