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