Pulseaudio: tweak freewheel recovery
Always cork stream before calling pa_stream_flush.
This commit is contained in:
parent
853b2a7f52
commit
03a17df68c
@ -665,6 +665,9 @@ PulseAudioBackend::stop ()
|
|||||||
_run = false;
|
_run = false;
|
||||||
|
|
||||||
pa_threaded_mainloop_lock (p_mainloop);
|
pa_threaded_mainloop_lock (p_mainloop);
|
||||||
|
if (pa_stream_is_corked (p_stream) == 0) {
|
||||||
|
cork_pulse (true);
|
||||||
|
}
|
||||||
sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this));
|
sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this));
|
||||||
|
|
||||||
if (pthread_join (_main_thread, &status)) {
|
if (pthread_join (_main_thread, &status)) {
|
||||||
@ -1019,23 +1022,32 @@ PulseAudioBackend::main_process_thread ()
|
|||||||
_freewheel = _freewheeling;
|
_freewheel = _freewheeling;
|
||||||
engine.freewheel_callback (_freewheel);
|
engine.freewheel_callback (_freewheel);
|
||||||
|
|
||||||
/* flush stream before freewheeling */
|
if (_freewheel) {
|
||||||
|
assert (!pa_stream_is_corked (p_stream));
|
||||||
|
if (!cork_pulse (true)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* flush stream before and after freewheeling */
|
||||||
|
assert (pa_stream_is_corked (p_stream));
|
||||||
pa_threaded_mainloop_lock (p_mainloop);
|
pa_threaded_mainloop_lock (p_mainloop);
|
||||||
_operation_succeeded = false;
|
_operation_succeeded = false;
|
||||||
if (!sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this)) || !_operation_succeeded) {
|
if (!sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this)) || !_operation_succeeded) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* suspend output while freewheeling, re-anable after */
|
|
||||||
if (!cork_pulse (_freewheel)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!_freewheel) {
|
if (!_freewheel) {
|
||||||
|
if (!cork_pulse (false)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
pa_threaded_mainloop_lock (p_mainloop);
|
pa_threaded_mainloop_lock (p_mainloop);
|
||||||
_operation_succeeded = false;
|
_operation_succeeded = false;
|
||||||
if (!sync_pulse (pa_stream_drain (p_stream, stream_operation_cb, this)) || !_operation_succeeded) {
|
if (!sync_pulse (pa_stream_drain (p_stream, stream_operation_cb, this)) || !_operation_succeeded) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
_dsp_load_calc.reset ();
|
_dsp_load_calc.reset ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user