Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "AVCapture.h"
  2. #if !UNITY_TRAMPOLINE_IN_USE
  3. // in trampoline this is declared in UnityInterface.h
  4. extern "C" void UnityReportAVCapturePermission(void* userData);
  5. #endif
  6. #include <AVFoundation/AVFoundation.h>
  7. static NSString* MediaTypeFromEnum(int captureType)
  8. {
  9. if (captureType == avAudioCapture)
  10. return AVMediaTypeAudio;
  11. else if (captureType == avVideoCapture)
  12. return AVMediaTypeVideo;
  13. return nil;
  14. }
  15. extern "C" int UnityGetAVCapturePermission(int captureType)
  16. {
  17. NSString* mediaType = MediaTypeFromEnum(captureType);
  18. if (mediaType == nil)
  19. return avCapturePermissionDenied;
  20. #if PLATFORM_OSX || ((PLATFORM_IOS || PLATFORM_VISIONOS) && (UNITY_USES_WEBCAM || UNITY_USES_MICROPHONE))
  21. NSInteger status = AVAuthorizationStatusAuthorized;
  22. status = [AVCaptureDevice authorizationStatusForMediaType: mediaType];
  23. if (status == AVAuthorizationStatusNotDetermined)
  24. return avCapturePermissionUnknown;
  25. else if (status == AVAuthorizationStatusAuthorized)
  26. return avCapturePermissionGranted;
  27. #endif
  28. return avCapturePermissionDenied;
  29. }
  30. extern "C" void UnityRequestAVCapturePermission(int captureType, void* userData)
  31. {
  32. #if PLATFORM_OSX || ((PLATFORM_IOS || PLATFORM_VISIONOS) && (UNITY_USES_WEBCAM || UNITY_USES_MICROPHONE))
  33. NSString* mediaType = MediaTypeFromEnum(captureType);
  34. if (mediaType == nil)
  35. return;
  36. [AVCaptureDevice requestAccessForMediaType: mediaType completionHandler:^(BOOL granted) {
  37. UnityReportAVCapturePermission(userData);
  38. }];
  39. #endif
  40. }