output/Thread: move OpenSoftwareMixer() to the end
This call cannot fail, but needs cleanup if others fail. By moving it to the end, we eliminate some cleanup.
This commit is contained in:
parent
4f7f577a57
commit
d4ee165253
@ -52,8 +52,6 @@ AudioOutputControl::InternalOpen2(const AudioFormat in_audio_format)
|
|||||||
{
|
{
|
||||||
assert(in_audio_format.IsValid());
|
assert(in_audio_format.IsValid());
|
||||||
|
|
||||||
output->OpenSoftwareMixer();
|
|
||||||
|
|
||||||
const auto cf = in_audio_format.WithMask(output->config_audio_format);
|
const auto cf = in_audio_format.WithMask(output->config_audio_format);
|
||||||
|
|
||||||
if (open && cf != output->filter_audio_format)
|
if (open && cf != output->filter_audio_format)
|
||||||
@ -64,13 +62,9 @@ AudioOutputControl::InternalOpen2(const AudioFormat in_audio_format)
|
|||||||
output->filter_audio_format = cf;
|
output->filter_audio_format = cf;
|
||||||
|
|
||||||
if (!open) {
|
if (!open) {
|
||||||
try {
|
{
|
||||||
const ScopeUnlock unlock(mutex);
|
const ScopeUnlock unlock(mutex);
|
||||||
output->OpenOutputAndConvert(output->filter_audio_format);
|
output->OpenOutputAndConvert(output->filter_audio_format);
|
||||||
} catch (...) {
|
|
||||||
const ScopeUnlock unlock(mutex);
|
|
||||||
output->CloseSoftwareMixer();
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open = true;
|
open = true;
|
||||||
@ -86,13 +80,18 @@ AudioOutputControl::InternalOpen2(const AudioFormat in_audio_format)
|
|||||||
|
|
||||||
{
|
{
|
||||||
const ScopeUnlock unlock(mutex);
|
const ScopeUnlock unlock(mutex);
|
||||||
output->Close(false);
|
output->CloseOutput(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::throw_with_nested(FormatRuntimeError("Failed to convert for \"%s\" [%s]",
|
std::throw_with_nested(FormatRuntimeError("Failed to convert for \"%s\" [%s]",
|
||||||
GetName(), output->plugin.name));
|
GetName(), output->plugin.name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const ScopeUnlock unlock(mutex);
|
||||||
|
output->OpenSoftwareMixer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
|
Loading…
Reference in New Issue
Block a user