momo_video_encoder_factory.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef MOMO_VIDEO_ENCODER_FACTORY_H_
  2. #define MOMO_VIDEO_ENCODER_FACTORY_H_
  3. #include <memory>
  4. #include <vector>
  5. // WebRTC
  6. #include <api/environment/environment.h>
  7. #include <api/video_codecs/sdp_video_format.h>
  8. #include <api/video_codecs/video_encoder.h>
  9. #include <api/video_codecs/video_encoder_factory.h>
  10. #include "video_codec_info.h"
  11. struct MomoVideoEncoderFactoryConfig {
  12. VideoCodecInfo::Type vp8_encoder;
  13. VideoCodecInfo::Type vp9_encoder;
  14. VideoCodecInfo::Type av1_encoder;
  15. VideoCodecInfo::Type h264_encoder;
  16. VideoCodecInfo::Type h265_encoder;
  17. bool simulcast;
  18. bool hardware_encoder_only;
  19. std::string openh264;
  20. };
  21. class MomoVideoEncoderFactory : public webrtc::VideoEncoderFactory {
  22. MomoVideoEncoderFactoryConfig config_;
  23. std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory_;
  24. std::unique_ptr<MomoVideoEncoderFactory> internal_encoder_factory_;
  25. public:
  26. MomoVideoEncoderFactory(const MomoVideoEncoderFactoryConfig& config);
  27. virtual ~MomoVideoEncoderFactory() {}
  28. std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
  29. std::unique_ptr<webrtc::VideoEncoder> Create(
  30. const webrtc::Environment& env,
  31. const webrtc::SdpVideoFormat& format) override;
  32. private:
  33. std::unique_ptr<webrtc::VideoEncoder> CreateInternal(
  34. const webrtc::Environment& env,
  35. const webrtc::SdpVideoFormat& format);
  36. std::unique_ptr<webrtc::VideoEncoder> WithSimulcast(
  37. const webrtc::SdpVideoFormat& format,
  38. std::function<std::unique_ptr<webrtc::VideoEncoder>(
  39. const webrtc::SdpVideoFormat&)> create);
  40. };
  41. #endif // MOMO_VIDEO_ENCODER_FACTORY_H_