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