Skip to content

Commit b13fac7

Browse files
committed
iOS Update AVFoundationVideoGrabber Device Types to latest available 17+ (LiDARDepth, TrueDepth, Continuity, External (iPad))
1 parent cc5107d commit b13fac7

File tree

1 file changed

+39
-33
lines changed

1 file changed

+39
-33
lines changed

addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm

+39-33
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,23 @@ - (instancetype)init {
5353
}
5454

5555
- (BOOL)initCapture:(int)framerate capWidth:(int)w capHeight:(int)h{
56-
AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
57-
AVCaptureDeviceTypeBuiltInWideAngleCamera,
58-
AVCaptureDeviceTypeBuiltInTelephotoCamera,
59-
AVCaptureDeviceTypeBuiltInUltraWideCamera,
60-
AVCaptureDeviceTypeBuiltInDualCamera,
61-
AVCaptureDeviceTypeBuiltInDualWideCamera,
62-
AVCaptureDeviceTypeBuiltInTripleCamera,
63-
AVCaptureDeviceTypeExternal
64-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
56+
57+
NSMutableArray *deviceTypes = [NSMutableArray arrayWithObjects:AVCaptureDeviceTypeBuiltInWideAngleCamera,
58+
AVCaptureDeviceTypeBuiltInTelephotoCamera,
59+
AVCaptureDeviceTypeBuiltInUltraWideCamera,
60+
AVCaptureDeviceTypeBuiltInDualCamera,
61+
AVCaptureDeviceTypeBuiltInDualWideCamera,
62+
AVCaptureDeviceTypeBuiltInTripleCamera,
63+
AVCaptureDeviceTypeBuiltInTrueDepthCamera, nil];
64+
if (@available(iOS 17.0, macCatalyst 17.0, tvOS 17.0, *)) {
65+
if (&AVCaptureDeviceTypeContinuityCamera != nil) {
66+
[deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera];
67+
[deviceTypes addObject:AVCaptureDeviceTypeBuiltInLiDARDepthCamera];
68+
[deviceTypes addObject:AVCaptureDeviceTypeBuiltInTrueDepthCamera];
69+
[deviceTypes addObject:AVCaptureDeviceTypeExternal];
70+
}
71+
}
72+
AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
6573

6674
NSArray<AVCaptureDevice *> *devices = discoverySession.devices;
6775
if([devices count] > 0) {
@@ -251,28 +259,26 @@ -(CGImageRef)getCurrentFrame{
251259
-(std::vector <std::string>)listDevices{
252260
std::vector <std::string> deviceNames;
253261
NSArray<AVCaptureDevice *> *devices;
254-
if (@available(iOS 17.0, *)) {
255-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
256-
AVCaptureDeviceTypeBuiltInWideAngleCamera,
257-
AVCaptureDeviceTypeBuiltInTelephotoCamera,
258-
AVCaptureDeviceTypeBuiltInUltraWideCamera,
259-
AVCaptureDeviceTypeBuiltInDualCamera,
260-
AVCaptureDeviceTypeBuiltInDualWideCamera,
261-
AVCaptureDeviceTypeBuiltInTripleCamera,
262-
AVCaptureDeviceTypeExternal
263-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
264-
devices = session.devices;
265-
} else {
266-
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[
267-
AVCaptureDeviceTypeBuiltInWideAngleCamera,
268-
AVCaptureDeviceTypeBuiltInTelephotoCamera,
269-
AVCaptureDeviceTypeBuiltInUltraWideCamera,
270-
AVCaptureDeviceTypeBuiltInDualCamera,
271-
AVCaptureDeviceTypeBuiltInDualWideCamera,
272-
AVCaptureDeviceTypeBuiltInTripleCamera,
273-
] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
274-
devices = session.devices;
275-
}
262+
263+
NSMutableArray *deviceTypes = [NSMutableArray arrayWithObjects:AVCaptureDeviceTypeBuiltInWideAngleCamera,
264+
AVCaptureDeviceTypeBuiltInTelephotoCamera,
265+
AVCaptureDeviceTypeBuiltInUltraWideCamera,
266+
AVCaptureDeviceTypeBuiltInDualCamera,
267+
AVCaptureDeviceTypeBuiltInDualWideCamera,
268+
AVCaptureDeviceTypeBuiltInTripleCamera,
269+
AVCaptureDeviceTypeBuiltInTrueDepthCamera,
270+
nil
271+
];
272+
if (@available(iOS 17.0, macCatalyst 17.0, tvOS 17.0, *)) {
273+
if (&AVCaptureDeviceTypeContinuityCamera != nil) {
274+
[deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera];
275+
[deviceTypes addObject:AVCaptureDeviceTypeBuiltInLiDARDepthCamera];
276+
[deviceTypes addObject:AVCaptureDeviceTypeBuiltInTrueDepthCamera];
277+
[deviceTypes addObject:AVCaptureDeviceTypeExternal];
278+
}
279+
}
280+
AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
281+
devices = discoverySession.devices;
276282
int i=0;
277283
for (AVCaptureDevice * captureDevice in devices){
278284
deviceNames.push_back([captureDevice.localizedName UTF8String]);
@@ -320,8 +326,8 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput
320326
// Create a CGImageRef from the CVImageBufferRef
321327
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
322328

323-
CGContextRef newContext = CGBitmapContextCreate(baseAddress, widthIn, heightIn, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
324-
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
329+
CGContextRef newContext = CGBitmapContextCreate(baseAddress, widthIn, heightIn, 8, bytesPerRow, colorSpace, (CGBitmapInfo)kCGBitmapByteOrder32Little | (CGBitmapInfo)kCGImageAlphaPremultipliedFirst);
330+
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
325331

326332
CGImageRelease(currentFrame);
327333
currentFrame = CGImageCreateCopy(newImage);

0 commit comments

Comments
 (0)