[AFV] Request permission to access microphone on MacOS

This commit is contained in:
Roland Rossgotterer
2019-10-08 21:38:24 +02:00
committed by Mat Sutcliffe
parent 9f276c8dbf
commit 4827c0e4ab
2 changed files with 40 additions and 1 deletions

View File

@@ -111,10 +111,31 @@ namespace BlackCore
m_audioInput.reset(new QAudioInput(selectedDevice, m_inputFormat));
m_audioInputBuffer.start();
#ifdef Q_OS_MAC
CMacOSMicrophoneAccess::AuthorizationStatus status = m_micAccess.getAuthorizationStatus();
if (status == CMacOSMicrophoneAccess::Authorized)
{
m_audioInput->start(&m_audioInputBuffer);
connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable);
m_started = true;
return;
}
else if (status == CMacOSMicrophoneAccess::NotDetermined)
{
connect(&m_micAccess, &CMacOSMicrophoneAccess::permissionRequestAnswered, this, &CInput::delayedInitMicrophone);
m_micAccess.requestAccess();
CLogMessage(this).info(u"MacOS requested input device");
}
else
{
CLogMessage(this).error(u"Microphone access not granted. Voice input will not work.");
return;
}
#else
m_audioInput->start(&m_audioInputBuffer);
connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable);
m_started = true;
#endif
}
void CInput::stop()
@@ -174,6 +195,15 @@ namespace BlackCore
emit opusDataAvailable(opusDataAvailableArgs);
}
#ifdef Q_OS_MAC
void CInput::delayedInitMicrophone()
{
m_audioInput->start(&m_audioInputBuffer);
connect(&m_audioInputBuffer, &CAudioInputBuffer::frameAvailable, this, &CInput::audioInDataAvailable);
m_started = true;
}
#endif
} // ns
} // ns
} // ns

View File

@@ -15,6 +15,10 @@
#include "blacksound/codecs/opusencoder.h"
#include "blackmisc/audio/audiodeviceinfo.h"
#ifdef Q_OS_MAC
#include "blackmisc/macos/microphoneaccess.h"
#endif
#include <QAudioInput>
#include <QString>
#include <QDateTime>
@@ -133,6 +137,11 @@ namespace BlackCore
uint m_audioSequenceCounter = 0;
CAudioInputBuffer m_audioInputBuffer;
#ifdef Q_OS_MAC
BlackMisc::CMacOSMicrophoneAccess m_micAccess;
void delayedInitMicrophone();
#endif
};
} // ns
} // ns