Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 39 additions & 33 deletions addons/ofxiOS/src/video/AVFoundationVideoGrabber.mm
Original file line number Diff line number Diff line change
Expand Up @@ -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<AVCaptureDevice *> *devices = discoverySession.devices;
if([devices count] > 0) {
Expand Down Expand Up @@ -251,28 +259,26 @@ -(CGImageRef)getCurrentFrame{
-(std::vector <std::string>)listDevices{
std::vector <std::string> deviceNames;
NSArray<AVCaptureDevice *> *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]);
Expand Down Expand Up @@ -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);
Expand Down
75 changes: 36 additions & 39 deletions libs/openFrameworks/video/ofAVFoundationGrabber.mm
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down Expand Up @@ -267,24 +263,25 @@ -(CGImageRef)getCurrentFrame{
std::vector <std::string> 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;
Expand Down
Loading