#pragma once
#include <cstdint>
#include <memory>
#include <optional>
#include <vector>
#include "api/video_codecs/video_encoder.h"
#include "api/video_codecs/video_encoder_factory.h"
namespace livekit_ffi {
enum class VideoEncoderBackend : std::int32_t;
struct VideoEncoderBackendFactory {
VideoEncoderBackend backend;
std::unique_ptr<webrtc::VideoEncoderFactory> factory;
};
class VideoEncoderFactory : public webrtc::VideoEncoderFactory {
class InternalFactory : public webrtc::VideoEncoderFactory {
public:
InternalFactory();
std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
std::vector<webrtc::SdpVideoFormat> GetImplementations() const override;
CodecSupport QueryCodecSupport(
const webrtc::SdpVideoFormat& format,
std::optional<std::string> scalability_mode) const override;
std::unique_ptr<webrtc::VideoEncoder> Create(
const webrtc::Environment& env, const webrtc::SdpVideoFormat& format) override;
private:
std::vector<VideoEncoderBackendFactory> factories_;
};
public:
VideoEncoderFactory();
std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
std::vector<webrtc::SdpVideoFormat> GetImplementations() const override;
CodecSupport QueryCodecSupport(
const webrtc::SdpVideoFormat& format,
std::optional<std::string> scalability_mode) const override;
std::unique_ptr<webrtc::VideoEncoder> Create(
const webrtc::Environment& env, const webrtc::SdpVideoFormat& format) override;
private:
std::unique_ptr<InternalFactory> internal_factory_;
};
}