diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-09-14 20:33:57 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-09-16 11:22:17 +1000 |
commit | ccfe3e1015fb75c7575259ec0acb43cf0a51a6bb (patch) | |
tree | 07152da63f310b5f539765650d5a7a8a7c885a87 /libs/backends/alsa | |
parent | 449b57d583b63507241939540da630511b8e335b (diff) |
Use ARDOUR::DSPLoadCalculator in ALSA Backend
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 19 | ||||
-rw-r--r-- | 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 <boost/shared_ptr.hpp> #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; |