vlc | branch: master | Rémi Denis-Courmont <[email protected]> | 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; } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
