diff --git a/addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm b/addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm index 59677b2529c..6fb5eed007f 100644 --- a/addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm +++ b/addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm @@ -53,15 +53,23 @@ - (instancetype)init { } - (BOOL)initCapture:(int)framerate capWidth:(int)w capHeight:(int)h{ - AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeBuiltInTelephotoCamera, - AVCaptureDeviceTypeBuiltInUltraWideCamera, - AVCaptureDeviceTypeBuiltInDualCamera, - AVCaptureDeviceTypeBuiltInDualWideCamera, - AVCaptureDeviceTypeBuiltInTripleCamera, - AVCaptureDeviceTypeExternal - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; + + NSMutableArray *deviceTypes = [NSMutableArray arrayWithObjects:AVCaptureDeviceTypeBuiltInWideAngleCamera, + AVCaptureDeviceTypeBuiltInTelephotoCamera, + AVCaptureDeviceTypeBuiltInUltraWideCamera, + AVCaptureDeviceTypeBuiltInDualCamera, + AVCaptureDeviceTypeBuiltInDualWideCamera, + AVCaptureDeviceTypeBuiltInTripleCamera, + AVCaptureDeviceTypeBuiltInTrueDepthCamera, nil]; + if (@available(iOS 17.0, macCatalyst 17.0, tvOS 17.0, *)) { + if (&AVCaptureDeviceTypeContinuityCamera != nil) { + [deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeBuiltInLiDARDepthCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeBuiltInTrueDepthCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeExternal]; + } + } + AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; NSArray *devices = discoverySession.devices; if([devices count] > 0) { @@ -251,28 +259,26 @@ -(CGImageRef)getCurrentFrame{ -(std::vector )listDevices{ std::vector deviceNames; NSArray *devices; - if (@available(iOS 17.0, *)) { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeBuiltInTelephotoCamera, - AVCaptureDeviceTypeBuiltInUltraWideCamera, - AVCaptureDeviceTypeBuiltInDualCamera, - AVCaptureDeviceTypeBuiltInDualWideCamera, - AVCaptureDeviceTypeBuiltInTripleCamera, - AVCaptureDeviceTypeExternal - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; - devices = session.devices; - } else { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeBuiltInTelephotoCamera, - AVCaptureDeviceTypeBuiltInUltraWideCamera, - AVCaptureDeviceTypeBuiltInDualCamera, - AVCaptureDeviceTypeBuiltInDualWideCamera, - AVCaptureDeviceTypeBuiltInTripleCamera, - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; - devices = session.devices; - } + + NSMutableArray *deviceTypes = [NSMutableArray arrayWithObjects:AVCaptureDeviceTypeBuiltInWideAngleCamera, + AVCaptureDeviceTypeBuiltInTelephotoCamera, + AVCaptureDeviceTypeBuiltInUltraWideCamera, + AVCaptureDeviceTypeBuiltInDualCamera, + AVCaptureDeviceTypeBuiltInDualWideCamera, + AVCaptureDeviceTypeBuiltInTripleCamera, + AVCaptureDeviceTypeBuiltInTrueDepthCamera, + nil + ]; + if (@available(iOS 17.0, macCatalyst 17.0, tvOS 17.0, *)) { + if (&AVCaptureDeviceTypeContinuityCamera != nil) { + [deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeBuiltInLiDARDepthCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeBuiltInTrueDepthCamera]; + [deviceTypes addObject:AVCaptureDeviceTypeExternal]; + } + } + AVCaptureDeviceDiscoverySession *discoverySession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; + devices = discoverySession.devices; int i=0; for (AVCaptureDevice * captureDevice in devices){ deviceNames.push_back([captureDevice.localizedName UTF8String]); @@ -320,8 +326,8 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput // Create a CGImageRef from the CVImageBufferRef CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef newContext = CGBitmapContextCreate(baseAddress, widthIn, heightIn, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); - CGImageRef newImage = CGBitmapContextCreateImage(newContext); + CGContextRef newContext = CGBitmapContextCreate(baseAddress, widthIn, heightIn, 8, bytesPerRow, colorSpace, (CGBitmapInfo)kCGBitmapByteOrder32Little | (CGBitmapInfo)kCGImageAlphaPremultipliedFirst); + CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGImageRelease(currentFrame); currentFrame = CGImageCreateCopy(newImage); diff --git a/libs/openFrameworks/video/ofAVFoundationGrabber.mm b/libs/openFrameworks/video/ofAVFoundationGrabber.mm index 9f1257a56ab..fbd80266464 100644 --- a/libs/openFrameworks/video/ofAVFoundationGrabber.mm +++ b/libs/openFrameworks/video/ofAVFoundationGrabber.mm @@ -38,33 +38,29 @@ - (instancetype)init { - (BOOL)initCapture:(int)framerate capWidth:(int)w capHeight:(int)h{ NSArray * devices; if (@available(macOS 10.15, *)) { - if (@available(macOS 14.0, *)) { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeExternal - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; - } else { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession - discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] - mediaType:AVMediaTypeVideo - position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; - } + NSMutableArray *deviceTypes = [NSMutableArray arrayWithObject:AVCaptureDeviceTypeBuiltInWideAngleCamera]; +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000 + if (@available(macOS 14.0, *)) { + if (&AVCaptureDeviceTypeExternal != nil) { + [deviceTypes addObject:AVCaptureDeviceTypeExternal]; + [deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera]; + } + } +#endif + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession + discoverySessionWithDeviceTypes:deviceTypes + mediaType:AVMediaTypeVideo + position:AVCaptureDevicePositionUnspecified]; + devices = [session devices]; } else { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession - discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] - mediaType:AVMediaTypeVideo - position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; - +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; +#pragma clang diagnostic pop } - if([devices count] > 0) { if(deviceID>[devices count]-1) deviceID = [devices count]-1; - - // We set the device device = [devices objectAtIndex:deviceID]; @@ -267,24 +263,25 @@ -(CGImageRef)getCurrentFrame{ std::vector deviceNames; NSArray * devices; if (@available(macOS 10.15, *)) { - if (@available(macOS 14.0, *)) { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeExternal - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; - } else { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ - AVCaptureDeviceTypeBuiltInWideAngleCamera - ] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; - } + NSMutableArray *deviceTypes = [NSMutableArray arrayWithObject:AVCaptureDeviceTypeBuiltInWideAngleCamera]; +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000 + if (@available(macOS 14.0, *)) { + if (&AVCaptureDeviceTypeExternal != nil) { + [deviceTypes addObject:AVCaptureDeviceTypeExternal]; + [deviceTypes addObject:AVCaptureDeviceTypeContinuityCamera]; + } + } +#endif + AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession + discoverySessionWithDeviceTypes:deviceTypes + mediaType:AVMediaTypeVideo + position:AVCaptureDevicePositionUnspecified]; + devices = [session devices]; } else { - AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession - discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] - mediaType:AVMediaTypeVideo - position:AVCaptureDevicePositionUnspecified]; - devices = [session devices]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; +#pragma clang diagnostic pop } int i=0;