Skip to content

Commit cc5107d

Browse files
committed
Fix macOS 13 SDK issue with AVCaptureDeviceTypeExternal.
1 parent 4777b61 commit cc5107d

File tree

1 file changed

+36
-39
lines changed

1 file changed

+36
-39
lines changed

libs/openFrameworks/video/ofAVFoundationGrabber.mm

+36-39
Original file line numberDiff line numberDiff line change
@@ -38,33 +38,29 @@ - (instancetype)init {
3838
- (BOOL)initCapture:(int)framerate capWidth:(int)w capHeight:(int)h{
3939
NSArray * devices;
4040
if (@available(macOS 10.15, *)) {
41-
if (@available(macOS 14.0, *)) {
42-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
43-
AVCaptureDeviceTypeBuiltInWideAngleCamera,
44-
AVCaptureDeviceTypeExternal
45-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
46-
devices = [session devices];
47-
} else {
48-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession
49-
discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]
50-
mediaType:AVMediaTypeVideo
51-
position:AVCaptureDevicePositionUnspecified];
52-
devices = [session devices];
53-
}
41+
NSMutableArray *deviceTypes = [NSMutableArray arrayWithObject:AVCaptureDeviceTypeBuiltInWideAngleCamera];
42+
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000
43+
if (@available(macOS 14.0, *)) {
44+
if (&AVCaptureDeviceTypeExternal != nil) {
45+
[deviceTypes addObject:AVCaptureDeviceTypeExternal];
46+
[deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera];
47+
}
48+
}
49+
#endif
50+
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession
51+
discoverySessionWithDeviceTypes:deviceTypes
52+
mediaType:AVMediaTypeVideo
53+
position:AVCaptureDevicePositionUnspecified];
54+
devices = [session devices];
5455
} else {
55-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession
56-
discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]
57-
mediaType:AVMediaTypeVideo
58-
position:AVCaptureDevicePositionUnspecified];
59-
devices = [session devices];
60-
56+
#pragma clang diagnostic push
57+
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
58+
devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
59+
#pragma clang diagnostic pop
6160
}
62-
6361
if([devices count] > 0) {
6462
if(deviceID>[devices count]-1)
6563
deviceID = [devices count]-1;
66-
67-
6864
// We set the device
6965
device = [devices objectAtIndex:deviceID];
7066

@@ -267,24 +263,25 @@ -(CGImageRef)getCurrentFrame{
267263
std::vector <std::string> deviceNames;
268264
NSArray * devices;
269265
if (@available(macOS 10.15, *)) {
270-
if (@available(macOS 14.0, *)) {
271-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
272-
AVCaptureDeviceTypeBuiltInWideAngleCamera,
273-
AVCaptureDeviceTypeExternal
274-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
275-
devices = [session devices];
276-
} else {
277-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
278-
AVCaptureDeviceTypeBuiltInWideAngleCamera
279-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
280-
devices = [session devices];
281-
}
266+
NSMutableArray *deviceTypes = [NSMutableArray arrayWithObject:AVCaptureDeviceTypeBuiltInWideAngleCamera];
267+
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000
268+
if (@available(macOS 14.0, *)) {
269+
if (&AVCaptureDeviceTypeExternal != nil) {
270+
[deviceTypes addObject:AVCaptureDeviceTypeExternal];
271+
[deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera];
272+
}
273+
}
274+
#endif
275+
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession
276+
discoverySessionWithDeviceTypes:deviceTypes
277+
mediaType:AVMediaTypeVideo
278+
position:AVCaptureDevicePositionUnspecified];
279+
devices = [session devices];
282280
} else {
283-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession
284-
discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]
285-
mediaType:AVMediaTypeVideo
286-
position:AVCaptureDevicePositionUnspecified];
287-
devices = [session devices];
281+
#pragma clang diagnostic push
282+
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
283+
devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
284+
#pragma clang diagnostic pop
288285
}
289286

290287
int i=0;

0 commit comments

Comments
 (0)