1 // This file is part of Desktop App Toolkit,
2 // a set of libraries for developing nice desktop applications.
3 //
4 // For license and copyright information please follow this link:
5 // https://github.com/desktop-app/legal/blob/master/LEGAL
6 //
7 #pragma once
8 
9 #include <rpl/producer.h>
10 #include <optional>
11 
12 namespace Webrtc {
13 
14 enum class Backend;
15 
16 struct VideoInput {
17 	QString id;
18 	QString name;
19 };
20 
21 [[nodiscard]] std::vector<VideoInput> GetVideoInputList();
22 
23 struct AudioInput {
24 	QString id;
25 	QString name;
26 };
27 
28 [[nodiscard]] std::vector<AudioInput> GetAudioInputList(Backend backend);
29 
30 struct AudioOutput {
31 	QString id;
32 	QString name;
33 };
34 
35 [[nodiscard]] std::vector<AudioOutput> GetAudioOutputList(Backend backend);
36 
37 class MediaDevices {
38 public:
39 	virtual ~MediaDevices() = default;
40 
41 	[[nodiscard]] virtual rpl::producer<QString> audioInputId() = 0;
42 	[[nodiscard]] virtual rpl::producer<QString> audioOutputId() = 0;
43 	[[nodiscard]] virtual rpl::producer<QString> videoInputId() = 0;
44 
45 	virtual void switchToAudioInput(QString id) = 0;
46 	virtual void switchToAudioOutput(QString id) = 0;
47 	virtual void switchToVideoInput(QString id) = 0;
48 };
49 
50 [[nodiscard]] std::unique_ptr<MediaDevices> CreateMediaDevices(
51 	QString audioInput,
52 	QString audioOutput,
53 	QString videoInput);
54 
55 [[nodiscard]] bool DesktopCaptureAllowed();
56 [[nodiscard]] std::optional<QString> UniqueDesktopCaptureSource();
57 
58 } // namespace Webrtc
59