// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QWASMMEDIADEVICES_H #define QWASMMEDIADEVICES_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(qWasmMediaDevices) class QWasmAudioEngine; class QWasmCameraDevices : public QPlatformVideoDevices { Q_OBJECT public: QWasmCameraDevices(QPlatformMediaIntegration *integration); QList videoDevices() const override; private: // weak QPlatformMediaDevices *m_mediaDevices; }; class QWasmMediaDevices : public QPlatformMediaDevices { public: QWasmMediaDevices(); QList audioInputs() const override; QList audioOutputs() const override; QList videoInputs() const; QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo, QObject *parent) override; QPlatformAudioSink *createAudioSink(const QAudioDevice &deviceInfo, QObject *parent) override; void initDevices(); private: void updateCameraDevices(); void getMediaDevices(); void getOpenALAudioDevices(); QMap m_audioOutputs; QMap m_audioInputs; QMap m_cameraDevices; std::unique_ptr m_deviceChangedCallback; bool m_videoInputsAdded = false; bool m_audioInputsAdded = false; bool m_audioOutputsAdded = false; emscripten::val m_jsMediaDevicesInterface = emscripten::val::undefined(); bool m_initDone = false; }; QT_END_NAMESPACE #endif