summary refs log tree commit diff
path: root/src/voip/CallDevices.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/voip/CallDevices.h')
-rw-r--r--src/voip/CallDevices.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/voip/CallDevices.h b/src/voip/CallDevices.h
new file mode 100644
index 00000000..d30ce644
--- /dev/null
+++ b/src/voip/CallDevices.h
@@ -0,0 +1,47 @@
+// SPDX-FileCopyrightText: 2021 Nheko Contributors
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#pragma once
+
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <QObject>
+
+typedef struct _GstDevice GstDevice;
+
+class CallDevices : public QObject
+{
+    Q_OBJECT
+
+public:
+    static CallDevices &instance()
+    {
+        static CallDevices instance;
+        return instance;
+    }
+
+    bool haveMic() const;
+    bool haveCamera() const;
+    std::vector<std::string> names(bool isVideo, const std::string &defaultDevice) const;
+    std::vector<std::string> resolutions(const std::string &cameraName) const;
+    std::vector<std::string> frameRates(const std::string &cameraName,
+                                        const std::string &resolution) const;
+
+signals:
+    void devicesChanged();
+
+private:
+    CallDevices();
+
+    friend class WebRTCSession;
+    void init();
+    GstDevice *audioDevice() const;
+    GstDevice *videoDevice(std::pair<int, int> &resolution, std::pair<int, int> &frameRate) const;
+
+public:
+    CallDevices(CallDevices const &) = delete;
+    void operator=(CallDevices const &) = delete;
+};