Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qandroidmediadevices.cpp
Go to the documentation of this file.
1
// Copyright (C) 2021 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#include "
qandroidmediadevices_p.h
"
5
#include "
qmediadevices.h
"
6
#include "private/qcameradevice_p.h"
7
8
#include "
qandroidaudiosource_p.h
"
9
#include "
qandroidaudiosink_p.h
"
10
#include "
qandroidaudiodevice_p.h
"
11
#include "
qopenslesengine_p.h
"
12
#include "private/qplatformmediaintegration_p.h"
13
14
#include <
qjnienvironment.h
>
15
#include <QJniObject>
16
#include <QCoreApplication>
17
18
QT_BEGIN_NAMESPACE
19
20
Q_DECLARE_JNI_CLASS
(QtAudioDeviceManager,
21
"org/qtproject/qt/android/multimedia/QtAudioDeviceManager"
);
22
23
24
QAndroidMediaDevices::QAndroidMediaDevices
() :
QPlatformMediaDevices
()
25
{
26
QtJniTypes::QtAudioDeviceManager::callStaticMethod<void>(
"registerAudioHeadsetStateReceiver"
);
27
}
28
29
QAndroidMediaDevices::~QAndroidMediaDevices
()
30
{
31
// Object of QAndroidMediaDevices type is static. Unregistering will happend only when closing
32
// the application. In such case it is probably not needed, but let's leave it for
33
// compatibility with Android documentation
34
QtJniTypes::QtAudioDeviceManager::callStaticMethod<void>(
"unregisterAudioHeadsetStateReceiver"
);
35
}
36
37
QList<QAudioDevice>
QAndroidMediaDevices::audioInputs
()
const
38
{
39
return
QOpenSLESEngine::availableDevices
(
QAudioDevice::Input
);
40
}
41
42
QList<QAudioDevice>
QAndroidMediaDevices::audioOutputs
()
const
43
{
44
return
QOpenSLESEngine::availableDevices
(
QAudioDevice::Output
);
45
}
46
47
QPlatformAudioSource
*
QAndroidMediaDevices::createAudioSource
(
const
QAudioDevice
&deviceInfo,
48
QObject
*parent)
49
{
50
return
new
QAndroidAudioSource
(deviceInfo.
id
(),
parent
);
51
}
52
53
QPlatformAudioSink
*
QAndroidMediaDevices::createAudioSink
(
const
QAudioDevice
&deviceInfo,
54
QObject
*parent)
55
{
56
return
new
QAndroidAudioSink
(deviceInfo.
id
(),
parent
);
57
}
58
59
void
QAndroidMediaDevices::forwardAudioOutputsChanged
()
60
{
61
emit
audioOutputsChanged
();
62
}
63
64
void
QAndroidMediaDevices::forwardAudioInputsChanged
()
65
{
66
emit
audioInputsChanged
();
67
}
68
69
static
void
onAudioInputDevicesUpdated
(JNIEnv *
/*env*/
, jobject
/*thiz*/
)
70
{
71
static_cast<
QAndroidMediaDevices
*
>
(
QPlatformMediaIntegration::instance
()->mediaDevices())->forwardAudioInputsChanged();
72
}
73
74
static
void
onAudioOutputDevicesUpdated
(JNIEnv *
/*env*/
, jobject
/*thiz*/
)
75
{
76
static_cast<
QAndroidMediaDevices
*
>
(
QPlatformMediaIntegration::instance
()->mediaDevices())->forwardAudioOutputsChanged();
77
}
78
79
Q_DECL_EXPORT
jint JNICALL
JNI_OnLoad
(JavaVM *vm,
void
*
/*reserved*/
)
80
{
81
static
bool
initialized =
false
;
82
if
(initialized)
83
return
JNI_VERSION_1_6;
84
initialized =
true
;
85
86
QT_USE_NAMESPACE
87
typedef
union
{
88
JNIEnv *nativeEnvironment;
89
void
*venv;
90
} UnionJNIEnvToVoid;
91
92
UnionJNIEnvToVoid uenv;
93
uenv.venv = NULL;
94
95
if
(vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK)
96
return
JNI_ERR;
97
98
const
JNINativeMethod
methods
[] = {
99
{
"onAudioInputDevicesUpdated"
,
"()V"
, (
void
*)
onAudioInputDevicesUpdated
},
100
{
"onAudioOutputDevicesUpdated"
,
"()V"
, (
void
*)
onAudioOutputDevicesUpdated
}
101
};
102
103
bool
registered =
QJniEnvironment
().registerNativeMethods(
104
"org/qtproject/qt/android/multimedia/QtAudioDeviceManager"
,
methods
,
105
std::size(
methods
));
106
107
if
(!registered)
108
return
JNI_ERR;
109
110
return
JNI_VERSION_1_6;
111
}
112
113
QT_END_NAMESPACE
methods
static JNINativeMethod methods[]
Definition
androidjnimain.cpp:735
QAndroidAudioSink
Definition
qandroidaudiosink_p.h:28
QAndroidAudioSource
Definition
qandroidaudiosource_p.h:39
QAndroidMediaDevices
Definition
qandroidmediadevices_p.h:24
QAndroidMediaDevices::createAudioSink
QPlatformAudioSink * createAudioSink(const QAudioDevice &deviceInfo, QObject *parent) override
Definition
qandroidmediadevices.cpp:53
QAndroidMediaDevices::forwardAudioOutputsChanged
void forwardAudioOutputsChanged()
Definition
qandroidmediadevices.cpp:59
QAndroidMediaDevices::QAndroidMediaDevices
QAndroidMediaDevices()
Definition
qandroidmediadevices.cpp:24
QAndroidMediaDevices::createAudioSource
QPlatformAudioSource * createAudioSource(const QAudioDevice &deviceInfo, QObject *parent) override
Definition
qandroidmediadevices.cpp:47
QAndroidMediaDevices::audioInputs
QList< QAudioDevice > audioInputs() const override
Definition
qandroidmediadevices.cpp:37
QAndroidMediaDevices::forwardAudioInputsChanged
void forwardAudioInputsChanged()
Definition
qandroidmediadevices.cpp:64
QAndroidMediaDevices::~QAndroidMediaDevices
~QAndroidMediaDevices()
Definition
qandroidmediadevices.cpp:29
QAndroidMediaDevices::audioOutputs
QList< QAudioDevice > audioOutputs() const override
Definition
qandroidmediadevices.cpp:42
QAudioDevice
The QAudioDevice class provides an information about audio devices and their functionality.
Definition
qaudiodevice.h:25
QAudioDevice::Output
@ Output
Definition
qaudiodevice.h:35
QAudioDevice::Input
@ Input
Definition
qaudiodevice.h:34
QAudioDevice::id
QByteArray id
\qmlproperty string QtMultimedia::audioDevice::id
Definition
qaudiodevice.h:27
QJniEnvironment
\inmodule QtCore
QObject
\inmodule QtCore
Definition
qobject.h:103
QObject::parent
QObject * parent() const
Returns a pointer to the parent object.
Definition
qobject.h:346
QOpenSLESEngine::availableDevices
static QList< QAudioDevice > availableDevices(QAudioDevice::Mode mode)
Definition
qopenslesengine.cpp:101
QPlatformAudioSink
Definition
qaudiosystem_p.h:43
QPlatformAudioSource
Definition
qaudiosystem_p.h:69
QPlatformMediaDevices
Definition
qplatformmediadevices_p.h:31
QPlatformMediaDevices::audioInputsChanged
void audioInputsChanged()
QPlatformMediaDevices::audioOutputsChanged
void audioOutputsChanged()
QPlatformMediaIntegration::instance
static QPlatformMediaIntegration * instance()
Definition
qplatformmediaintegration.cpp:103
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qstandardpaths_haiku.cpp:21
QT_END_NAMESPACE
Definition
qsharedpointer.cpp:1590
QT_USE_NAMESPACE
Definition
avfmediaassetwriter.mm:18
qandroidaudiodevice_p.h
qandroidaudiosink_p.h
qandroidaudiosource_p.h
onAudioInputDevicesUpdated
static void onAudioInputDevicesUpdated(JNIEnv *, jobject)
Definition
qandroidmediadevices.cpp:69
JNI_OnLoad
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *)
Definition
qandroidmediadevices.cpp:79
Q_DECLARE_JNI_CLASS
QT_BEGIN_NAMESPACE Q_DECLARE_JNI_CLASS(QtAudioDeviceManager, "org/qtproject/qt/android/multimedia/QtAudioDeviceManager")
onAudioOutputDevicesUpdated
static void onAudioOutputDevicesUpdated(JNIEnv *, jobject)
Definition
qandroidmediadevices.cpp:74
qandroidmediadevices_p.h
Q_DECL_EXPORT
#define Q_DECL_EXPORT
Definition
qcompilerdetection.h:1050
qjnienvironment.h
qmediadevices.h
qopenslesengine_p.h
emit
#define emit
Definition
qtmetamacros.h:49
qtmultimedia
src
multimedia
android
qandroidmediadevices.cpp
Generated by
1.10.0