vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Dec  6 
12:46:42 2012 +0200| [4a1c30a05481c31cc6580954920a2f67fc432426] | committer: 
Rémi Denis-Courmont

mmdevice: improve handling of session disconnect event

It could still be better. If the disconnection is unrecoverable,
I suspect a flood of identical errors will be emitted continuously
as the core keeps pushing audio buffers.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4a1c30a05481c31cc6580954920a2f67fc432426
---

 modules/audio_output/mmdevice.c |   28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c
index 258e99b..8b8e9e2 100644
--- a/modules/audio_output/mmdevice.c
+++ b/modules/audio_output/mmdevice.c
@@ -428,12 +428,36 @@ vlc_AudioSessionEvents_OnStateChanged(IAudioSessionEvents 
*this,
 
 static STDMETHODIMP
 vlc_AudioSessionEvents_OnSessionDisconnected(IAudioSessionEvents *this,
-                                             AudioSessionDisconnectReason 
reason)
+                                           AudioSessionDisconnectReason reason)
 {
     aout_sys_t *sys = vlc_AudioSessionEvents_sys(this);
     audio_output_t *aout = sys->aout;
 
-    msg_Dbg(aout, "session disconnected: reason %d", reason);
+    switch (reason)
+    {
+        case DisconnectReasonDeviceRemoval:
+            msg_Warn(aout, "session disconnected: %s", "device removed");
+            break;
+        case DisconnectReasonServerShutdown:
+            msg_Err(aout, "session disconnected: %s", "service stopped");
+            return S_OK;
+        case DisconnectReasonFormatChanged:
+            msg_Warn(aout, "session disconnected: %s", "format changed");
+            break;
+        case DisconnectReasonSessionLogoff:
+            msg_Err(aout, "session disconnected: %s", "user logged off");
+            return S_OK;
+        case DisconnectReasonSessionDisconnected:
+            msg_Err(aout, "session disconnected: %s", "session disconnected");
+            return S_OK;
+        case DisconnectReasonExclusiveModeOverride:
+            msg_Err(aout, "session disconnected: %s", "stream overriden");
+            return S_OK;
+        default:
+            msg_Warn(aout, "session disconnected: unknown reason %d", reason);
+            return S_OK;
+    }
+    var_TriggerCallback(aout, "audio-device");
     return S_OK;
 }
 

_______________________________________________
vlc-commits mailing list
[email protected]
http://mailman.videolan.org/listinfo/vlc-commits

Reply via email to