output/Thread: move code to BeginPause(), IteratePause()

This commit is contained in:
Max Kellermann 2017-04-28 22:01:20 +02:00
parent 2a831fa547
commit 59181ac5fb
2 changed files with 31 additions and 14 deletions

View File

@ -516,6 +516,9 @@ private:
*/ */
bool Play(); bool Play();
void BeginPause();
bool IteratePause();
void Pause(); void Pause();
/** /**

View File

@ -365,7 +365,7 @@ AudioOutput::Play()
} }
inline void inline void
AudioOutput::Pause() AudioOutput::BeginPause()
{ {
{ {
const ScopeUnlock unlock(mutex); const ScopeUnlock unlock(mutex);
@ -373,26 +373,40 @@ AudioOutput::Pause()
} }
pause = true; pause = true;
}
inline bool
AudioOutput::IteratePause()
{
bool success;
try {
const ScopeUnlock unlock(mutex);
success = ao_plugin_pause(*this);
} catch (const std::runtime_error &e) {
FormatError(e, "\"%s\" [%s] failed to pause",
name, plugin.name);
success = false;
}
if (!success)
Close(false);
return success;
}
inline void
AudioOutput::Pause()
{
BeginPause();
CommandFinished(); CommandFinished();
do { do {
if (!WaitForDelay()) if (!WaitForDelay())
break; break;
bool success; if (!IteratePause())
try {
const ScopeUnlock unlock(mutex);
success = ao_plugin_pause(*this);
} catch (const std::runtime_error &e) {
FormatError(e, "\"%s\" [%s] failed to pause",
name, plugin.name);
success = false;
}
if (!success) {
Close(false);
break; break;
}
} while (command == Command::NONE); } while (command == Command::NONE);
pause = false; pause = false;