ksvideosrc: fix device enumeration when hotplugging a camera
authorJerome Laheurte <jlaheurte@quividi.net>
Thu, 16 Aug 2018 10:35:50 +0000 (12:35 +0200)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Sun, 19 Aug 2018 20:58:22 +0000 (16:58 -0400)
Since both audio and video capture devices declare the KSCATEGORY_CAPTURE interface,
plugging a camera that supports both could result in an audio device being mistaken
for a video one.

https://bugzilla.gnome.org/show_bug.cgi?id=796958

sys/winks/ksdeviceprovider.c

index 609794d44848b639b140a2fa2c0951d8bec28c2d..b54cba2c6798735f82580122aec542211af180bf 100644 (file)
@@ -338,13 +338,14 @@ msg_window_message_proc (HWND window_handle, UINT message,
 
           bcdi = (PDEV_BROADCAST_DEVICEINTERFACE) lparam;
 
-          if (!IsEqualGUID (&bcdi->dbcc_classguid, &KSCATEGORY_CAPTURE) &&
-              !IsEqualGUID (&bcdi->dbcc_classguid, &KSCATEGORY_RENDER))
+          /* Since both video and audio capture device declare KSCATEGORY_CAPTURE, we filter on
+             KSCATEGORY_VIDEO here. To add audio support we should accept also KSCATEGORY_AUDIO. */
+          if (!IsEqualGUID (&bcdi->dbcc_classguid, &KSCATEGORY_VIDEO))
             break;
 
           devices =
               ks_enumerate_devices (&bcdi->dbcc_classguid,
-              &bcdi->dbcc_classguid);
+              &KSCATEGORY_CAPTURE);
           if (devices == NULL)
             break;
 
@@ -356,7 +357,7 @@ msg_window_message_proc (HWND window_handle, UINT message,
 
             if ((source == NULL) &&
                 (g_ascii_strcasecmp (entry->path, bcdi->dbcc_name) == 0))
-              source = new_video_source (entry);
+              source = new_video_source (entry); /* Or audio source, not implemented yet */
 
             ks_device_entry_free (entry);
           }