#ifndef TGCALLS_PLATFORM_INTERFACE_H #define TGCALLS_PLATFORM_INTERFACE_H #include "rtc_base/thread.h" #include "api/video_codecs/video_encoder_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/media_stream_interface.h" namespace tgcalls { enum class VideoState; class VideoCapturerInterface; class PlatformContext; class PlatformInterface { public: static PlatformInterface *SharedInstance(); virtual ~PlatformInterface() = default; virtual void configurePlatformAudio() { } virtual float getDisplayAspectRatio() { return 0.0f; } virtual std::unique_ptr makeVideoEncoderFactory() = 0; virtual std::unique_ptr makeVideoDecoderFactory() = 0; virtual bool supportsEncoding(const std::string &codecName) = 0; virtual rtc::scoped_refptr makeVideoSource(rtc::Thread *signalingThread, rtc::Thread *workerThread) = 0; virtual void adaptVideoSource(rtc::scoped_refptr videoSource, int width, int height, int fps) = 0; virtual std::unique_ptr makeVideoCapturer(rtc::scoped_refptr source, bool useFrontCamera, std::function stateUpdated, std::shared_ptr platformContext, std::pair &outResolution) = 0; }; std::unique_ptr CreatePlatformInterface(); inline PlatformInterface *PlatformInterface::SharedInstance() { static const auto result = CreatePlatformInterface(); return result.get(); } } // namespace tgcalls #endif