|
|
|
@ -316,6 +316,8 @@ 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 |
|
|
|
|
if (@available(macOS 10.14, *)) |
|
|
|
|
{ |
|
|
|
|
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; |
|
|
|
|
if (status == AVAuthorizationStatusDenied) |
|
|
|
|
{ |
|
|
|
@ -327,14 +329,33 @@ int CvCaptureCAM::startCaptureDevice(int cameraNum) { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
else if (status != AVAuthorizationStatusAuthorized) |
|
|
|
|
{ |
|
|
|
|
if (!cv::utils::getConfigurationParameterBool("OPENCV_AVFOUNDATION_SKIP_AUTH", false)) |
|
|
|
|
{ |
|
|
|
|
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 |
|
|
|
|
if ([NSThread isMainThread]) |
|
|
|
|
{ |
|
|
|
|
// we run the main loop for 0.1 sec to show the message |
|
|
|
|
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
fprintf(stderr, "OpenCV: can not spin main run loop from other thread, set " |
|
|
|
|
"OPENCV_AVFOUNDATION_SKIP_AUTH=1 to disable authorization request " |
|
|
|
|
"and perform it in your application.\n"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
fprintf(stderr, "OpenCV: not authorized to capture video (status %ld), set " |
|
|
|
|
"OPENCV_AVFOUNDATION_SKIP_AUTH=0 to enable authorization request or " |
|
|
|
|
"perform it in your application.\n", status); |
|
|
|
|
} |
|
|
|
|
[localpool drain]; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// get capture device |
|
|
|
|