[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