summaryrefslogtreecommitdiff
path: root/libs/backends/alsa/alsa_audiobackend.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-03-09 17:02:05 +0100
committerRobin Gareus <robin@gareus.org>2015-03-09 17:17:50 +0100
commit52e99750a0294d62e0e0a29672c61a38346a5d3f (patch)
tree19fc95f59cfee9a8554252c170903744617f2f34 /libs/backends/alsa/alsa_audiobackend.cc
parent0446ff64f40ff9b4d7e10c22dac60e23f52ccfb2 (diff)
ALSA: fix thinko in sample time calc.
Diffstat (limited to 'libs/backends/alsa/alsa_audiobackend.cc')
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc23
1 files changed, 3 insertions, 20 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc
index 8befb9219c..cc0054bd68 100644
--- a/libs/backends/alsa/alsa_audiobackend.cc
+++ b/libs/backends/alsa/alsa_audiobackend.cc
@@ -51,7 +51,6 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
, _freewheeling (false)
, _measure_latency (false)
, _last_process_start (0)
- , _process_speed_samples_per_ms (0)
, _audio_device("")
, _midi_driver_option(_("None"))
, _device_reservation(0)
@@ -510,7 +509,6 @@ AlsaAudioBackend::_start (bool for_latency_measurement)
_freewheeling = false;
_freewheel = false;
_last_process_start = 0;
- _process_speed_samples_per_ms = 0;
release_device();
@@ -711,21 +709,12 @@ AlsaAudioBackend::samples_since_cycle_start ()
if (!_active || !_run || _freewheeling || _freewheel) {
return 0;
}
- if (_last_process_start == 0 || _process_speed_samples_per_ms) {
+ if (_last_process_start == 0) {
return 0;
}
- const int64_t elapsed_time_us = _last_process_start - g_get_monotonic_time();
-
- assert(elapsed_time_us >=0);
-
- /* linear extrapolation, using [low pass] filtered process-speed. */
- const pframes_t processed_samples = elapsed_time_us * _process_speed_samples_per_ms * 1e-3;
-
- if (processed_samples >= _samples_per_period) {
- return _samples_per_period;
- }
- return processed_samples;
+ const int64_t elapsed_time_us = g_get_monotonic_time() - _last_process_start;
+ return std::max((pframes_t)0, (pframes_t)rint(1e-6 * elapsed_time_us * _samplerate));
}
@@ -1551,12 +1540,6 @@ AlsaAudioBackend::main_process_thread ()
clock2 = g_get_monotonic_time();
const int64_t elapsed_time = clock2 - clock1;
_dsp_load = elapsed_time / (float) nomial_time;
-
- const double ps = 1e3 * _samples_per_period / elapsed_time;
- // low pass filter, The time-constant should really be
- // 1.0 - e^(-2.0 * π * v / SR);
- // with v = _samples_per_period / N, and SR = _samples_per_period;
- _process_speed_samples_per_ms = _process_speed_samples_per_ms + .05 * (ps - _process_speed_samples_per_ms) + 1e-12;
}
if (xrun && (_pcmi->capt_xrun() > 0 || _pcmi->play_xrun() > 0)) {