Title: [295533] trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm
Revision
295533
Author
eric.carl...@apple.com
Date
2022-06-14 13:33:23 -0700 (Tue, 14 Jun 2022)

Log Message

[Cocoa] Update camera list when system preferred camera changes
https://bugs.webkit.org/show_bug.cgi?id=241604
rdar://89694851

Reviewed by Youenn Fablet.

* Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:
(WebCore::AVCaptureDeviceManager::~AVCaptureDeviceManager):
(WebCore::AVCaptureDeviceManager::registerForDeviceNotifications):
(-[WebCoreAVCaptureDeviceManagerObserver observeValueForKeyPath:ofObject:change:context:]):

Canonical link: https://commits.webkit.org/251538@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm (295532 => 295533)


--- trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm	2022-06-14 20:01:05 UTC (rev 295532)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm	2022-06-14 20:33:23 UTC (rev 295533)
@@ -224,6 +224,7 @@
     [m_objcObserver disconnect];
     for (AVCaptureDevice *device in m_avCaptureDevices.get())
         [device removeObserver:m_objcObserver.get() forKeyPath:@"suspended"];
+    [PAL::getAVCaptureDeviceClass() removeObserver:m_objcObserver.get() forKeyPath:@"systemPreferredCamera"];
 }
 
 void AVCaptureDeviceManager::registerForDeviceNotifications()
@@ -230,6 +231,7 @@
 {
     [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get() selector:@selector(deviceConnectedDidChange:) name:AVCaptureDeviceWasConnectedNotification object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:m_objcObserver.get() selector:@selector(deviceConnectedDidChange:) name:AVCaptureDeviceWasDisconnectedNotification object:nil];
+    [PAL::getAVCaptureDeviceClass() addObserver:m_objcObserver.get() forKeyPath:@"systemPreferredCamera" options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:nil];
 }
 
 } // namespace WebCore
@@ -272,8 +274,13 @@
     if (!m_callback)
         return;
 
-    if ([keyPath isEqualToString:@"suspended"])
-        m_callback->refreshCaptureDevices();
+    if (![keyPath isEqualToString:@"suspended"] && ![keyPath isEqualToString:@"systemPreferredCamera"])
+        return;
+
+    RunLoop::main().dispatch([self, protectedSelf = retainPtr(self)] {
+        if (m_callback)
+            m_callback->refreshCaptureDevices();
+    });
 }
 
 @end
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to