mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-17 04:06:26 +01:00
ALSA backend: synchronous switch to/from freewheeling
This commit is contained in:
parent
f2ea059db3
commit
db28eefc49
2 changed files with 11 additions and 6 deletions
|
|
@ -47,6 +47,7 @@ AlsaAudioBackend::AlsaAudioBackend (AudioEngine& e, AudioBackendInfo& info)
|
||||||
, _pcmi (0)
|
, _pcmi (0)
|
||||||
, _run (false)
|
, _run (false)
|
||||||
, _active (false)
|
, _active (false)
|
||||||
|
, _freewheel (false)
|
||||||
, _freewheeling (false)
|
, _freewheeling (false)
|
||||||
, _measure_latency (false)
|
, _measure_latency (false)
|
||||||
, _audio_device("")
|
, _audio_device("")
|
||||||
|
|
@ -657,11 +658,7 @@ AlsaAudioBackend::stop ()
|
||||||
int
|
int
|
||||||
AlsaAudioBackend::freewheel (bool onoff)
|
AlsaAudioBackend::freewheel (bool onoff)
|
||||||
{
|
{
|
||||||
if (onoff == _freewheeling) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_freewheeling = onoff;
|
_freewheeling = onoff;
|
||||||
engine.freewheel_callback (onoff);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1410,7 +1407,13 @@ AlsaAudioBackend::main_process_thread ()
|
||||||
while (_run) {
|
while (_run) {
|
||||||
long nr;
|
long nr;
|
||||||
bool xrun = false;
|
bool xrun = false;
|
||||||
if (!_freewheeling) {
|
|
||||||
|
if (_freewheeling != _freewheel) {
|
||||||
|
_freewheel = _freewheeling;
|
||||||
|
engine.freewheel_callback (_freewheel);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_freewheel) {
|
||||||
nr = _pcmi->pcm_wait ();
|
nr = _pcmi->pcm_wait ();
|
||||||
|
|
||||||
if (_pcmi->state () > 0) {
|
if (_pcmi->state () > 0) {
|
||||||
|
|
@ -1421,7 +1424,8 @@ AlsaAudioBackend::main_process_thread ()
|
||||||
PBD::error << _("AlsaAudioBackend: I/O error. Audio Process Terminated.") << endmsg;
|
PBD::error << _("AlsaAudioBackend: I/O error. Audio Process Terminated.") << endmsg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (nr >= (long)_samples_per_period) {
|
|
||||||
|
while (nr >= (long)_samples_per_period && _freewheeling == _freewheel) {
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
clock1 = g_get_monotonic_time();
|
clock1 = g_get_monotonic_time();
|
||||||
no_proc_errors = 0;
|
no_proc_errors = 0;
|
||||||
|
|
|
||||||
|
|
@ -301,6 +301,7 @@ class AlsaAudioBackend : public AudioBackend {
|
||||||
|
|
||||||
bool _run; /* keep going or stop, ardour thread */
|
bool _run; /* keep going or stop, ardour thread */
|
||||||
bool _active; /* is running, process thread */
|
bool _active; /* is running, process thread */
|
||||||
|
bool _freewheel;
|
||||||
bool _freewheeling;
|
bool _freewheeling;
|
||||||
bool _measure_latency;
|
bool _measure_latency;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue