diff options
author | Robin Gareus <robin@gareus.org> | 2015-01-24 23:39:34 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-01-24 23:39:41 +0100 |
commit | db28eefc49baeb124275ad53b067c5caa953d363 (patch) | |
tree | c520cf38d2a72dc5128f42459db1641c1533e21e /libs/backends/alsa/alsa_audiobackend.cc | |
parent | f2ea059db3b8ea1e52616fc434971adf078340b3 (diff) |
ALSA backend: synchronous switch to/from freewheeling
Diffstat (limited to 'libs/backends/alsa/alsa_audiobackend.cc')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 8bf8efe61d..dcf719e251 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -47,6 +47,7 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _pcmi (0) , _run (false) , _active (false) + , _freewheel (false) , _freewheeling (false) , _measure_latency (false) , _audio_device("") @@ -657,11 +658,7 @@ AlsaAudioBackend::stop () int AlsaAudioBackend::freewheel (bool onoff) { - if (onoff == _freewheeling) { - return 0; - } _freewheeling = onoff; - engine.freewheel_callback (onoff); return 0; } @@ -1410,7 +1407,13 @@ AlsaAudioBackend::main_process_thread () while (_run) { long nr; bool xrun = false; - if (!_freewheeling) { + + if (_freewheeling != _freewheel) { + _freewheel = _freewheeling; + engine.freewheel_callback (_freewheel); + } + + if (!_freewheel) { nr = _pcmi->pcm_wait (); if (_pcmi->state () > 0) { @@ -1421,7 +1424,8 @@ AlsaAudioBackend::main_process_thread () PBD::error << _("AlsaAudioBackend: I/O error. Audio Process Terminated.") << endmsg; break; } - while (nr >= (long)_samples_per_period) { + + while (nr >= (long)_samples_per_period && _freewheeling == _freewheel) { uint32_t i = 0; clock1 = g_get_monotonic_time(); no_proc_errors = 0; |