mmdevice: support WASAPI device endpoint activation events
authorThomas Guillem <thomas@gllm.fr>
Tue, 17 May 2016 16:36:40 +0000 (12:36 -0400)
committerThomas Guillem <thomas@gllm.fr>
Wed, 25 May 2016 12:32:58 +0000 (14:32 +0200)
Some devices expose more than one endpoint such as speakers and headphone
output. Disconnecting headphones does not remove the endpoint but instead marks
it as being in unplugged state.

Respond to the appropriate activation events in order to enable/disable
endpoints correctly when they are added/removed from set of "active" endpoints.

Fix #15966

Original patch by Sean McGovern <gseanmcg@gmail.com>

modules/audio_output/mmdevice.c

index a46449f..a975ecc 100644 (file)
@@ -619,7 +619,7 @@ vlc_MMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *this,
             break;
         case DEVICE_STATE_ACTIVE:
             msg_Dbg(aout, "device %ls state changed: active", wid);
-            break;
+            return DeviceUpdated(aout, wid);
         case DEVICE_STATE_DISABLED:
             msg_Dbg(aout, "device %ls state changed: disabled", wid);
             break;
@@ -628,9 +628,16 @@ vlc_MMNotificationClient_OnDeviceStateChanged(IMMNotificationClient *this,
             break;
         default:
             msg_Dbg(aout, "device %ls state changed: unknown: %08lx", wid, state);
-            break;
+            return E_FAIL;
     }
 
+    /* Unplugged, disabled or notpresent */
+    char *id = FromWide(wid);
+    if (unlikely(id == NULL))
+        return E_OUTOFMEMORY;
+    aout_HotplugReport(aout, id, NULL);
+    free(id);
+
     return S_OK;
 }