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

View File

@@ -456,6 +456,30 @@ AudioOutputControl::Task() noexcept
the new command first */
continue;
case Command::RELEASE:
if (!open) {
/* the output has failed after
the PAUSE command was submitted; bail
out */
CommandFinished();
break;
}
if (always_on) {
/* in "always_on" mode, the output is
paused instead of being closed */
InternalPause();
} else {
InternalClose(false);
CommandFinished();
}
/* don't "break" here: this might cause
Play() to be called when command==CLOSE
ends the paused state - "continue" checks
the new command first */
continue;
case Command::DRAIN:
if (open)
InternalDrain();