Commit a9d72938 authored by Max Kellermann's avatar Max Kellermann

output/Thread: wake up the player thread periodically while playing

Without this, the pipe would run empty very often, which may result in an xrun if the roundtrip to the PlayerThread and back takes too long. By waking up the PlayerThread before the pipe runs empty, we make MPD much more latency tolerant, which is a major optimization.
parent add42e9e
......@@ -52,6 +52,7 @@ ver 0.20 (not yet released)
- soxr: allow multi-threaded resampling
* player
- reset song priority on playback
- reduce xruns
* write database and state file atomically
* always write UTF-8 to the log file.
* remove dependency on GLib
......
......@@ -493,10 +493,21 @@ AudioOutput::Play()
in_playback_loop = false;
};
unsigned n = 0;
do {
if (command != Command::NONE)
return true;
if (++n >= 64) {
/* wake up the player every now and then to
give it a chance to refill the pipe before
it runs empty */
const ScopeUnlock unlock(mutex);
player_control->LockSignal();
n = 0;
}
if (!PlayChunk(chunk))
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment