diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-29 21:27:03 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-29 21:27:37 +0200 |
commit | e3cd57ecb634af33a6a86eb1ed57e270eddb1421 (patch) | |
tree | c9cc28b8bb63085d330604310b532a42e83e1ea6 /libs/backends/alsa | |
parent | 729bc00f13fcad4ed986c3e5cf4565fd4ce0dead (diff) |
DSP load calculation: favor peak over average.
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index cc0054bd68..4cb4710333 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -1433,7 +1433,7 @@ AlsaAudioBackend::main_process_thread () _pcmi->pcm_start (); int no_proc_errors = 0; const int bailout = 2 * _samplerate / _samples_per_period; - const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate; + const int64_t nominal_time = 1e6 * _samples_per_period / _samplerate; manager.registration_callback(); manager.graph_order_callback(); @@ -1539,7 +1539,14 @@ AlsaAudioBackend::main_process_thread () /* calculate DSP load */ clock2 = g_get_monotonic_time(); const int64_t elapsed_time = clock2 - clock1; - _dsp_load = elapsed_time / (float) nomial_time; + // low pass filter + const float load = elapsed_time / (float) nominal_time; + if (load > _dsp_load) { + _dsp_load = load; + } else { + const float a = .1 * _samples_per_period / _samplerate; + _dsp_load = _dsp_load + a * (load - _dsp_load) + 1e-12; + } } if (xrun && (_pcmi->capt_xrun() > 0 || _pcmi->play_xrun() > 0)) { |