[vlc-commits] wasapi: retry if device is invalidated during open (refs #6826)
Rémi Denis-Courmont
git at videolan.org
Thu Aug 2 17:26:05 CEST 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Aug 2 17:52:43 2012 +0300| [f0362f182cbfe976492454c9ff8811fecb64e2ea] | committer: Rémi Denis-Courmont
wasapi: retry if device is invalidated during open (refs #6826)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f0362f182cbfe976492454c9ff8811fecb64e2ea
---
modules/audio_output/wasapi.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/modules/audio_output/wasapi.c b/modules/audio_output/wasapi.c
index 6c45b83..97b45a1 100644
--- a/modules/audio_output/wasapi.c
+++ b/modules/audio_output/wasapi.c
@@ -479,7 +479,7 @@ static int Open(vlc_object_t *obj)
free(sys);
return VLC_EGENERIC;
}
-
+retry:
/* Get audio device according to policy */
var_Create (aout, "audio-device", VLC_VAR_STRING|VLC_VAR_HASCHOICE);
@@ -546,7 +546,6 @@ static int Open(vlc_object_t *obj)
vlc_ToWave(&wf, &format);
hr = IAudioClient_IsFormatSupported(sys->client, AUDCLNT_SHAREMODE_SHARED,
&wf.Format, &pwf);
- // TODO: deal with (hr == AUDCLNT_E_DEVICE_INVALIDATED) ?
if (FAILED(hr))
{
msg_Err(aout, "cannot negotiate audio format (error 0x%lx)", hr);
@@ -617,8 +616,13 @@ error:
CloseHandle(sys->done);
if (sys->client != NULL)
IAudioClient_Release(sys->client);
+ var_Destroy(aout, "audio-device");
+ if (hr == AUDCLNT_E_DEVICE_INVALIDATED)
+ {
+ msg_Warn(aout, "device invalidated, retrying");
+ goto retry;
+ }
Leave();
- var_Destroy (aout, "audio-device");
free(sys);
return VLC_EGENERIC;
}
More information about the vlc-commits
mailing list