#ifndef MOMO_VIDEO_ENCODER_FACTORY_H_ #define MOMO_VIDEO_ENCODER_FACTORY_H_ #include #include // WebRTC #include #include #include #include #include "video_codec_info.h" struct MomoVideoEncoderFactoryConfig { VideoCodecInfo::Type vp8_encoder; VideoCodecInfo::Type vp9_encoder; VideoCodecInfo::Type av1_encoder; VideoCodecInfo::Type h264_encoder; VideoCodecInfo::Type h265_encoder; bool simulcast; bool hardware_encoder_only; std::string openh264; }; class MomoVideoEncoderFactory : public webrtc::VideoEncoderFactory { MomoVideoEncoderFactoryConfig config_; std::unique_ptr video_encoder_factory_; std::unique_ptr internal_encoder_factory_; public: MomoVideoEncoderFactory(const MomoVideoEncoderFactoryConfig& config); virtual ~MomoVideoEncoderFactory() {} std::vector GetSupportedFormats() const override; std::unique_ptr Create( const webrtc::Environment& env, const webrtc::SdpVideoFormat& format) override; private: std::unique_ptr CreateInternal( const webrtc::Environment& env, const webrtc::SdpVideoFormat& format); std::unique_ptr WithSimulcast( const webrtc::SdpVideoFormat& format, std::function( const webrtc::SdpVideoFormat&)> create); }; #endif // MOMO_VIDEO_ENCODER_FACTORY_H_