output/control: add command RELEASE

With the new command, the decision to pause or close the output moves
into the output thread.
This commit is contained in:
Max Kellermann
2018-11-12 11:30:05 +01:00
parent 9a813cd3b1
commit e097fef79e
3 changed files with 45 additions and 3 deletions
+15 -3
View File
@@ -347,10 +347,22 @@ AudioOutputControl::LockAllowPlay() noexcept
void
AudioOutputControl::LockRelease() noexcept
{
if (always_on)
LockPauseAsync();
if (output->mixer != nullptr &&
(!always_on || !output->SupportsPause()))
/* the device has no pause mode: close the mixer,
unless its "global" flag is set (checked by
mixer_auto_close()) */
mixer_auto_close(output->mixer);
const std::lock_guard<Mutex> protect(mutex);
assert(!open || !fail_timer.IsDefined());
assert(allow_play);
if (IsOpen())
CommandWait(Command::RELEASE);
else
LockCloseWait();
fail_timer.Reset();
}
void