Qt 6.x
The Qt SDK
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
21
23{
25}
26
28{
30}
31
34{
35 return new QAndroidAudioSource(deviceInfo.id(), parent);
36}
37
40{
41 return new QAndroidAudioSink(deviceInfo.id(), parent);
42}
43
45{
47}
48
50{
52}
53
54static void onAudioInputDevicesUpdated(JNIEnv */*env*/, jobject /*thiz*/)
55{
56 static_cast<QAndroidMediaDevices*>(QPlatformMediaDevices::instance())->forwardAudioInputsChanged();
57}
58
59static void onAudioOutputDevicesUpdated(JNIEnv */*env*/, jobject /*thiz*/)
60{
61 static_cast<QAndroidMediaDevices*>(QPlatformMediaDevices::instance())->forwardAudioOutputsChanged();
62}
63
64Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/)
65{
66 static bool initialized = false;
67 if (initialized)
68 return JNI_VERSION_1_6;
69 initialized = true;
70
72 typedef union {
73 JNIEnv *nativeEnvironment;
74 void *venv;
75 } UnionJNIEnvToVoid;
76
77 UnionJNIEnvToVoid uenv;
78 uenv.venv = NULL;
79
80 if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK)
81 return JNI_ERR;
82
83 const JNINativeMethod methods[] = {
84 { "onAudioInputDevicesUpdated", "()V", (void *)onAudioInputDevicesUpdated },
85 { "onAudioOutputDevicesUpdated", "()V", (void *)onAudioOutputDevicesUpdated }
86 };
87
88 bool registered = QJniEnvironment().registerNativeMethods(
89 "org/qtproject/qt/android/multimedia/QtAudioDeviceManager", methods,
90 std::size(methods));
91
92 if (!registered)
93 return JNI_ERR;
94
95 QJniObject::callStaticMethod<void>("org/qtproject/qt/android/multimedia/QtAudioDeviceManager",
96 "registerAudioHeadsetStateReceiver",
97 "(Landroid/content/Context;)V",
98 QNativeInterface::QAndroidApplication::context());
99
100 return JNI_VERSION_1_6;
101}
102
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
Definition qlist.h:74
\inmodule QtCore
Definition qobject.h:90
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:311
static QList< QAudioDevice > availableDevices(QAudioDevice::Mode mode)
static QPlatformMediaDevices * instance()
Combined button and popup list for selecting options.
static void onAudioInputDevicesUpdated(JNIEnv *, jobject)
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *)
static void onAudioOutputDevicesUpdated(JNIEnv *, jobject)
#define Q_DECL_EXPORT
#define emit
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent