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
5#include "qmediadevices.h"
6#include "private/qcameradevice_p.h"
7
11#include "qopenslesengine_p.h"
12#include "private/qplatformmediaintegration_p.h"
13
14#include <qjnienvironment.h>
15#include <QJniObject>
16#include <QCoreApplication>
17
19
20Q_DECLARE_JNI_CLASS(QtAudioDeviceManager,
21 "org/qtproject/qt/android/multimedia/QtAudioDeviceManager");
22
23
25{
26 QtJniTypes::QtAudioDeviceManager::callStaticMethod<void>("registerAudioHeadsetStateReceiver");
27}
28
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
41
46
48 QObject *parent)
49{
50 return new QAndroidAudioSource(deviceInfo.id(), parent);
51}
52
54 QObject *parent)
55{
56 return new QAndroidAudioSink(deviceInfo.id(), parent);
57}
58
63
68
69static void onAudioInputDevicesUpdated(JNIEnv */*env*/, jobject /*thiz*/)
70{
71 static_cast<QAndroidMediaDevices*>(QPlatformMediaIntegration::instance()->mediaDevices())->forwardAudioInputsChanged();
72}
73
74static void onAudioOutputDevicesUpdated(JNIEnv */*env*/, jobject /*thiz*/)
75{
76 static_cast<QAndroidMediaDevices*>(QPlatformMediaIntegration::instance()->mediaDevices())->forwardAudioOutputsChanged();
77}
78
79Q_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
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
static JNINativeMethod methods[]
QPlatformAudioSink * createAudioSink(const QAudioDevice &deviceInfo, QObject *parent) override
QPlatformAudioSource * createAudioSource(const QAudioDevice &deviceInfo, QObject *parent) override
QList< QAudioDevice > audioInputs() const override
QList< QAudioDevice > audioOutputs() const override
The QAudioDevice class provides an information about audio devices and their functionality.
QByteArray id
\qmlproperty string QtMultimedia::audioDevice::id
\inmodule QtCore
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
static QList< QAudioDevice > availableDevices(QAudioDevice::Mode mode)
static QPlatformMediaIntegration * instance()
Combined button and popup list for selecting options.
static void onAudioInputDevicesUpdated(JNIEnv *, jobject)
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *)
QT_BEGIN_NAMESPACE Q_DECLARE_JNI_CLASS(QtAudioDeviceManager, "org/qtproject/qt/android/multimedia/QtAudioDeviceManager")
static void onAudioOutputDevicesUpdated(JNIEnv *, jobject)
#define Q_DECL_EXPORT
#define emit