summaryrefslogtreecommitdiff
path: root/libs/backends/alsa/alsa_audiobackend.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/backends/alsa/alsa_audiobackend.cc')
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc16
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;