From c46f97454af67014caf9444c6f8d68b5fdd4424b Mon Sep 17 00:00:00 2001
From: Shen-Ta Hsieh <ibmibmibm.tw@gmail.com>
Date: Wed, 2 Dec 2020 07:57:05 +0800
Subject: [PATCH] src/output: Reopen device on error

---
 src/output/plugins/WasapiOutputPlugin.cxx | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/output/plugins/WasapiOutputPlugin.cxx b/src/output/plugins/WasapiOutputPlugin.cxx
index b2833b2d9..b17c4ab7a 100644
--- a/src/output/plugins/WasapiOutputPlugin.cxx
+++ b/src/output/plugins/WasapiOutputPlugin.cxx
@@ -333,6 +333,15 @@ void WasapiOutput::DoOpen(AudioFormat &audio_format) {
 
 	client.reset();
 
+	DWORD state;
+	if (HRESULT result = device->GetState(&state); FAILED(result)) {
+		throw FormatHResultError(result, "Unable to get device status");
+	}
+	if (state != DEVICE_STATE_ACTIVE) {
+		device.reset();
+		OpenDevice();
+	}
+
 	HRESULT result;
 	result = device->Activate(__uuidof(IAudioClient), CLSCTX_ALL, nullptr,
 				  client.AddressCast());