summaryrefslogtreecommitdiff
path: root/libs/backends/alsa/alsa_audiobackend.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-01-24 23:39:34 +0100
committerRobin Gareus <robin@gareus.org>2015-01-24 23:39:41 +0100
commitdb28eefc49baeb124275ad53b067c5caa953d363 (patch)
treec520cf38d2a72dc5128f42459db1641c1533e21e /libs/backends/alsa/alsa_audiobackend.cc
parentf2ea059db3b8ea1e52616fc434971adf078340b3 (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.cc16
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;