diff --git a/modules/audio_device/audio_engine_device.h b/modules/audio_device/audio_engine_device.h index 4193f846ed..6de4335cdf 100644 --- a/modules/audio_device/audio_engine_device.h +++ b/modules/audio_device/audio_engine_device.h @@ -478,8 +478,7 @@ class AudioEngineDevice : public AudioDeviceModule, public AudioSessionObserver std::vector input_device_labels_; #endif - bool IsMicrophonePermissionGranted(); - bool EnsureMicrophonePermissionSync(); + bool IsMicrophonePermissionAuthorized(); #if !TARGET_OS_OSX bool IsAudioSessionCategoryValid(NSString* category, bool is_input_enabled, diff --git a/modules/audio_device/audio_engine_device.mm b/modules/audio_device/audio_engine_device.mm index 85f726a91e..dbc0b6a09d 100644 --- a/modules/audio_device/audio_engine_device.mm +++ b/modules/audio_device/audio_engine_device.mm @@ -1876,8 +1876,8 @@ if (state.DidEnableInput()) { LOGI() << "Checking microphone permission..."; // Attempt to acquire mic permissions at this point to return an erorr early. - bool isAuthorized = EnsureMicrophonePermissionSync(); - LOGI() << "AudioEngine pre-enable check, device permission: " + bool isAuthorized = IsMicrophonePermissionAuthorized(); + LOGI() << "AudioEngine pre-enable check, mic permission authorized: " << (isAuthorized ? "true" : "false"); if (!isAuthorized) { return rollback(kAudioEngineErrorInsufficientDevicePermission); @@ -2705,38 +2705,11 @@ // ---------------------------------------------------------------------------------------------------- // Private - Microphone permission -bool AudioEngineDevice::IsMicrophonePermissionGranted() { +bool AudioEngineDevice::IsMicrophonePermissionAuthorized() { AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; return status == AVAuthorizationStatusAuthorized; } -bool AudioEngineDevice::EnsureMicrophonePermissionSync() { - AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; - - if (status == AVAuthorizationStatusAuthorized) { - return true; - } - - if (status == AVAuthorizationStatusNotDetermined) { - // Request permission synchronously - this will block WebRTC's worker thread - // but this is acceptable since instantiating AVAudioInputNode would block anyway - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - __block BOOL granted = NO; - - [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio - completionHandler:^(BOOL granted_inner) { - granted = granted_inner; - dispatch_semaphore_signal(semaphore); - }]; - - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - return granted; - } - - // Status is denied or restricted - return false; -} - // ---------------------------------------------------------------------------------------------------- // Private - Audio session