#include "precomp.hpp"
#include "opencv2/imgproc.hpp"
#include <stdio.h>
-#include <AvailabilityMacros.h>
+#include <Availability.h>
#import <AVFoundation/AVFoundation.h>
#define CV_CAP_MODE_BGR CV_FOURCC_MACRO('B','G','R','3')
int CvCaptureCAM::startCaptureDevice(int cameraNum) {
NSAutoreleasePool *localpool = [[NSAutoreleasePool alloc] init];
+#if defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101400
+ AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+ if (status == AVAuthorizationStatusDenied)
+ {
+ fprintf(stderr, "OpenCV: camera access has been denied. Either run 'tccutil reset Camera' "
+ "command in same terminal to reset application authorization status, "
+ "either modify 'System Preferences -> Security & Privacy -> Camera' "
+ "settings for your application.\n");
+ [localpool drain];
+ return 0;
+ }
+ else if (status != AVAuthorizationStatusAuthorized)
+ {
+ fprintf(stderr, "OpenCV: not authorized to capture video (status %ld), requesting...\n", status);
+ // TODO: doesn't work via ssh
+ [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL) { /* we don't care */}];
+ // we do not wait for completion
+ [localpool drain];
+ return 0;
+ }
+#endif
+
// get capture device
NSArray *devices = [[AVCaptureDevice devicesWithMediaType: AVMediaTypeVideo]
arrayByAddingObjectsFromArray:[AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed]];