]> git.sesse.net Git - vlc/commitdiff
mmdevice: improve handling of session disconnect event
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 6 Dec 2012 10:46:42 +0000 (12:46 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 6 Dec 2012 11:09:42 +0000 (13:09 +0200)
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.

modules/audio_output/mmdevice.c

index 258e99bec538802df8646c7306040f3f7bdea849..8b8e9e2275b05e4728d094256cb3aaee0c8f38c8 100644 (file)
@@ -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;
 }