diff options
Diffstat (limited to 'libs/backends/alsa/alsa_audiobackend.cc')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 357b00c044..947b6d5992 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -2086,7 +2086,6 @@ AlsaAudioBackend::main_process_thread () double dll_w2 = dll_w1 * dll_w1; uint64_t clock1; - _pcmi->pcm_start (); int no_proc_errors = 0; const int bailout = 5 * _samplerate / _samples_per_period; @@ -2095,6 +2094,21 @@ AlsaAudioBackend::main_process_thread () const double sr_norm = 1e-6 * (double) _samplerate / (double)_samples_per_period; + /* warm up */ + int cnt = std::max (8, (int)(_samplerate / _samples_per_period) / 2); + for (int w = 0; w < cnt; ++w) { + for (std::vector<AlsaPort*>::const_iterator it = _system_inputs.begin (); it != _system_inputs.end (); ++it) { + memset ((*it)->get_buffer (_samples_per_period), 0, _samples_per_period * sizeof (Sample)); + } + if (engine.process_callback (_samples_per_period)) { + _active = false; + return 0; + } + Glib::usleep (1000000 * (_samples_per_period / _samplerate )); + } + + _pcmi->pcm_start (); + while (_run) { long nr; bool xrun = false; |