summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/android/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/android/audio')
-rw-r--r--src/multimedia/platform/android/audio/qopenslesaudioinput.cpp27
-rw-r--r--src/multimedia/platform/android/audio/qopenslesaudioinput_p.h2
-rw-r--r--src/multimedia/platform/android/audio/qopenslesengine.cpp78
3 files changed, 50 insertions, 57 deletions
diff --git a/src/multimedia/platform/android/audio/qopenslesaudioinput.cpp b/src/multimedia/platform/android/audio/qopenslesaudioinput.cpp
index ecd4e2140..e0845a129 100644
--- a/src/multimedia/platform/android/audio/qopenslesaudioinput.cpp
+++ b/src/multimedia/platform/android/audio/qopenslesaudioinput.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Toolkit.
@@ -40,14 +40,13 @@
#include "qopenslesaudioinput_p.h"
#include "qopenslesengine_p.h"
-#include <qbuffer.h>
#include <private/qaudiohelpers_p.h>
+#include <qbuffer.h>
#include <qdebug.h>
#ifdef ANDROID
#include <SLES/OpenSLES_AndroidConfiguration.h>
-#include <QtCore/private/qjnihelpers_p.h>
-#include <QtCore/private/qjni_p.h>
+#include <QtCore/qcoreapplication.h>
#endif
QT_BEGIN_NAMESPACE
@@ -59,24 +58,16 @@ QT_BEGIN_NAMESPACE
#ifdef ANDROID
static bool hasRecordingPermission()
{
- using namespace QtAndroidPrivate;
- if (androidSdkVersion() < 23)
+ if (QNativeInterface::QAndroidApplication::sdkVersion() < 23)
return true;
- const QString key(QLatin1String("android.permission.RECORD_AUDIO"));
- PermissionsResult res = checkPermission(key);
- if (res == PermissionsResult::Granted) // Permission already granted?
+ const QPermission::PermisionType key(QPermission::Microphone);
+ // Permission already granted?
+ if (QCoreApplication::checkPermission(key).result() == QPermission::Authorized)
return true;
- QJNIEnvironmentPrivate env;
- const auto &results = requestPermissionsSync(env, QStringList() << key);
- if (!results.contains(key)) {
- qWarning("No permission found for key: %s", qPrintable(key));
- return false;
- }
-
- if (results[key] == PermissionsResult::Denied) {
- qDebug("%s - Permission denied by user!", qPrintable(key));
+ if (QCoreApplication::requestPermission(key).result() != QPermission::Authorized) {
+ qDebug("Microphone permission denied by user!");
return false;
}
diff --git a/src/multimedia/platform/android/audio/qopenslesaudioinput_p.h b/src/multimedia/platform/android/audio/qopenslesaudioinput_p.h
index 92494069e..e442d16af 100644
--- a/src/multimedia/platform/android/audio/qopenslesaudioinput_p.h
+++ b/src/multimedia/platform/android/audio/qopenslesaudioinput_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Toolkit.
diff --git a/src/multimedia/platform/android/audio/qopenslesengine.cpp b/src/multimedia/platform/android/audio/qopenslesengine.cpp
index 878820a11..5c53e0f7b 100644
--- a/src/multimedia/platform/android/audio/qopenslesengine.cpp
+++ b/src/multimedia/platform/android/audio/qopenslesengine.cpp
@@ -44,11 +44,10 @@
#include <qdebug.h>
-#ifdef ANDROID
+#ifdef Q_OS_ANDROID
#include <SLES/OpenSLES_Android.h>
-#include <QtCore/private/qjnihelpers_p.h>
-#include <QtCore/private/qjni_p.h>
-#include <QtCore/QJniObject>
+#include <QtCore/qjniobject.h>
+#include <QtCore/qcoreapplication.h>
#endif
#define MINIMUM_PERIOD_TIME_MS 5
@@ -161,7 +160,7 @@ int QOpenSLESEngine::getOutputValue(QOpenSLESEngine::OutputValue type, int defau
#if defined(Q_OS_ANDROID)
static int sampleRate = 0;
static int framesPerBuffer = 0;
- static const int sdkVersion = QtAndroidPrivate::androidSdkVersion();
+ static const int sdkVersion = QNativeInterface::QAndroidApplication::sdkVersion();
if (sdkVersion < 17) // getProperty() was added in API level 17...
return defaultValue;
@@ -172,33 +171,34 @@ int QOpenSLESEngine::getOutputValue(QOpenSLESEngine::OutputValue type, int defau
if (type == SampleRate && sampleRate != 0)
return sampleRate;
- QJNIObjectPrivate ctx(QtAndroidPrivate::activity());
+ QJniObject ctx(QNativeInterface::QAndroidApplication::context());
if (!ctx.isValid())
return defaultValue;
- QJNIObjectPrivate audioServiceString = ctx.getStaticObjectField("android/content/Context",
- "AUDIO_SERVICE",
- "Ljava/lang/String;");
- QJNIObjectPrivate am = ctx.callObjectMethod("getSystemService",
- "(Ljava/lang/String;)Ljava/lang/Object;",
- audioServiceString.object());
+ QJniObject audioServiceString = ctx.getStaticObjectField("android/content/Context",
+ "AUDIO_SERVICE",
+ "Ljava/lang/String;");
+ QJniObject am = ctx.callObjectMethod("getSystemService",
+ "(Ljava/lang/String;)Ljava/lang/Object;",
+ audioServiceString.object());
if (!am.isValid())
return defaultValue;
- QJNIObjectPrivate sampleRateField = QJNIObjectPrivate::getStaticObjectField("android/media/AudioManager",
- "PROPERTY_OUTPUT_SAMPLE_RATE",
- "Ljava/lang/String;");
- QJNIObjectPrivate framesPerBufferField = QJNIObjectPrivate::getStaticObjectField("android/media/AudioManager",
- "PROPERTY_OUTPUT_FRAMES_PER_BUFFER",
- "Ljava/lang/String;");
-
- QJNIObjectPrivate sampleRateString = am.callObjectMethod("getProperty",
- "(Ljava/lang/String;)Ljava/lang/String;",
- sampleRateField.object());
- QJNIObjectPrivate framesPerBufferString = am.callObjectMethod("getProperty",
- "(Ljava/lang/String;)Ljava/lang/String;",
- framesPerBufferField.object());
+ auto sampleRateField = QJniObject::getStaticObjectField("android/media/AudioManager",
+ "PROPERTY_OUTPUT_SAMPLE_RATE",
+ "Ljava/lang/String;");
+ auto framesPerBufferField = QJniObject::getStaticObjectField(
+ "android/media/AudioManager",
+ "PROPERTY_OUTPUT_FRAMES_PER_BUFFER",
+ "Ljava/lang/String;");
+
+ auto sampleRateString = am.callObjectMethod("getProperty",
+ "(Ljava/lang/String;)Ljava/lang/String;",
+ sampleRateField.object());
+ auto framesPerBufferString = am.callObjectMethod("getProperty",
+ "(Ljava/lang/String;)Ljava/lang/String;",
+ framesPerBufferField.object());
if (!sampleRateString.isValid() || !framesPerBufferString.isValid())
return defaultValue;
@@ -237,7 +237,8 @@ int QOpenSLESEngine::getDefaultBufferSize(const QAudioFormat &format)
const int audioFormat = [&format]() -> int
{
- if (format.sampleFormat() == QAudioFormat::Float && QtAndroidPrivate::androidSdkVersion() >= 21)
+ const int sdkVersion = QNativeInterface::QAndroidApplication::sdkVersion();
+ if (format.sampleFormat() == QAudioFormat::Float && sdkVersion >= 21)
return 4; /* PCM_FLOAT */
else if (format.sampleFormat() == QAudioFormat::UInt8)
return 3; /* PCM_8BIT */
@@ -248,12 +249,12 @@ int QOpenSLESEngine::getDefaultBufferSize(const QAudioFormat &format)
}();
const int sampleRate = format.sampleRate();
- const int minBufferSize = QJNIObjectPrivate::callStaticMethod<jint>("android/media/AudioTrack",
- "getMinBufferSize",
- "(III)I",
- sampleRate,
- channelConfig,
- audioFormat);
+ const int minBufferSize = QJniObject::callStaticMethod<jint>("android/media/AudioTrack",
+ "getMinBufferSize",
+ "(III)I",
+ sampleRate,
+ channelConfig,
+ audioFormat);
return minBufferSize > 0 ? minBufferSize : format.bytesForDuration(DEFAULT_PERIOD_TIME_MS);
#else
return format.bytesForDuration(DEFAULT_PERIOD_TIME_MS);
@@ -274,17 +275,18 @@ bool QOpenSLESEngine::supportsLowLatency()
if (isSupported != -1)
return (isSupported == 1);
- QJNIObjectPrivate ctx(QtAndroidPrivate::activity());
+ QJniObject ctx(QNativeInterface::QAndroidApplication::context());
if (!ctx.isValid())
return false;
- QJNIObjectPrivate pm = ctx.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
+ QJniObject pm = ctx.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
if (!pm.isValid())
return false;
- QJNIObjectPrivate audioFeatureField = QJNIObjectPrivate::getStaticObjectField("android/content/pm/PackageManager",
- "FEATURE_AUDIO_LOW_LATENCY",
- "Ljava/lang/String;");
+ QJniObject audioFeatureField = QJniObject::getStaticObjectField(
+ "android/content/pm/PackageManager",
+ "FEATURE_AUDIO_LOW_LATENCY",
+ "Ljava/lang/String;");
if (!audioFeatureField.isValid())
return false;
@@ -357,7 +359,7 @@ bool QOpenSLESEngine::inputFormatIsSupported(SLDataFormat_PCM format)
SL_DEFAULTDEVICEID_AUDIOINPUT, NULL };
SLDataSource audioSrc = { &loc_dev, NULL };
-#ifdef ANDROID
+#ifdef Q_OS_ANDROID
SLDataLocator_AndroidSimpleBufferQueue loc_bq = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 1 };
#else
SLDataLocator_BufferQueue loc_bq = { SL_DATALOCATOR_BUFFERQUEUE, 1 };