feat: Allow users to select Continuity Camera

Added Continuity Camera to the device discovery session to provide
users with more camera options. Users on macOS 13+ can now select
their Continuity Camera device within the application.
This commit is contained in:
KOGA Mitsuhiro
2025-04-01 01:49:51 +09:00
parent cc7217970d
commit e37d785a0a

View File

@@ -309,17 +309,21 @@ MyDeviceNotifications *device_notifications = nil;
// CameraMacOS - Subclass for our camera server on macOS
void CameraMacOS::update_feeds() {
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500
AVCaptureDeviceDiscoverySession *session;
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 140000
// Avoid deprecated warning if the minimum SDK is 14.0.
session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:[NSArray arrayWithObjects:AVCaptureDeviceTypeExternal, AVCaptureDeviceTypeBuiltInWideAngleCamera, nil] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
#else
session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:[NSArray arrayWithObjects:AVCaptureDeviceTypeExternalUnknown, AVCaptureDeviceTypeBuiltInWideAngleCamera, nil] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
NSArray<AVCaptureDevice *> *devices = nullptr;
#if defined(__x86_64__)
if (@available(macOS 10.15, *)) {
#endif
NSArray<AVCaptureDevice *> *devices = session.devices;
#else
NSArray<AVCaptureDevice *> *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceDiscoverySession *session;
if (@available(macOS 14.0, *)) {
session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:[NSArray arrayWithObjects:AVCaptureDeviceTypeExternal, AVCaptureDeviceTypeBuiltInWideAngleCamera, AVCaptureDeviceTypeContinuityCamera, nil] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
} else {
session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:[NSArray arrayWithObjects:AVCaptureDeviceTypeExternalUnknown, AVCaptureDeviceTypeBuiltInWideAngleCamera, nil] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
}
devices = session.devices;
#if defined(__x86_64__)
} else {
devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
}
#endif
// remove devices that are gone..