#ifndef TGCALLS_VIDEO_CAPTURE_INTERFACE_IMPL_H #define TGCALLS_VIDEO_CAPTURE_INTERFACE_IMPL_H #include "VideoCaptureInterface.h" #include #include "ThreadLocalObject.h" #include "api/media_stream_interface.h" #include "platform/PlatformInterface.h" namespace tgcalls { class VideoCapturerInterface; class VideoCaptureInterfaceObject { public: VideoCaptureInterfaceObject(std::shared_ptr platformContext); ~VideoCaptureInterfaceObject(); void switchCamera(); void setState(VideoState state); void setPreferredAspectRatio(float aspectRatio); void setOutput(std::shared_ptr> sink); void setStateUpdated(std::function stateUpdated); public: rtc::scoped_refptr _videoSource; private: std::shared_ptr> _currentUncroppedSink; std::shared_ptr _platformContext; std::pair _videoCapturerResolution; std::unique_ptr _videoCapturer; std::function _stateUpdated; bool _useFrontCamera = true; VideoState _state = VideoState::Active; }; class VideoCaptureInterfaceImpl : public VideoCaptureInterface { public: VideoCaptureInterfaceImpl(std::shared_ptr platformContext); virtual ~VideoCaptureInterfaceImpl(); void switchCamera() override; void setState(VideoState state) override; void setPreferredAspectRatio(float aspectRatio) override; void setOutput(std::shared_ptr> sink) override; ThreadLocalObject *object(); private: ThreadLocalObject _impl; }; } // namespace tgcalls #endif