From ccfe3e1015fb75c7575259ec0acb43cf0a51a6bb Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Mon, 14 Sep 2015 20:33:57 +1000 Subject: [PATCH] Use ARDOUR::DSPLoadCalculator in ALSA Backend --- libs/backends/alsa/alsa_audiobackend.cc | 19 ++++++------------- libs/backends/alsa/alsa_audiobackend.h | 2 ++ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index d257cc8eae..dbae2ea05a 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -815,6 +815,8 @@ AlsaAudioBackend::_start (bool for_latency_measurement) engine.sample_rate_change (_samplerate); engine.buffer_size_change (_samples_per_period); + _dsp_load_calc.set_max_time(_samplerate, _samples_per_period); + if (engine.reestablish_ports ()) { PBD::error << _("AlsaAudioBackend: Could not re-establish ports.") << endmsg; delete _pcmi; _pcmi = 0; @@ -1653,11 +1655,10 @@ AlsaAudioBackend::main_process_thread () _active = true; _processed_samples = 0; - uint64_t clock1, clock2; + uint64_t clock1; _pcmi->pcm_start (); int no_proc_errors = 0; const int bailout = 2 * _samplerate / _samples_per_period; - const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate; manager.registration_callback(); manager.graph_order_callback(); @@ -1760,17 +1761,9 @@ AlsaAudioBackend::main_process_thread () nr -= _samples_per_period; _processed_samples += _samples_per_period; - /* calculate DSP load */ - clock2 = g_get_monotonic_time(); - const int64_t elapsed_time = clock2 - clock1; - // low pass filter - const float load = elapsed_time / (float) nominal_time; - if (load > _dsp_load) { - _dsp_load = load; - } else { - const float a = .2 * _samples_per_period / _samplerate; - _dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12; - } + _dsp_load_calc.set_start_timestamp_us (clock1); + _dsp_load_calc.set_stop_timestamp_us (g_get_monotonic_time()); + _dsp_load = _dsp_load_calc.get_dsp_load (); } if (xrun && (_pcmi->capt_xrun() > 0 || _pcmi->play_xrun() > 0)) { diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h index e604fe0cc9..c95593c349 100644 --- a/libs/backends/alsa/alsa_audiobackend.h +++ b/libs/backends/alsa/alsa_audiobackend.h @@ -31,6 +31,7 @@ #include #include "ardour/audio_backend.h" +#include "ardour/dsp_load_calculator.h" #include "ardour/system_exec.h" #include "ardour/types.h" @@ -367,6 +368,7 @@ class AlsaAudioBackend : public AudioBackend { /* processing */ float _dsp_load; + ARDOUR::DSPLoadCalculator _dsp_load_calc; framecnt_t _processed_samples; pthread_t _main_thread; -- 2.30.2