#pragma once #include "cvmmap_streamer/config/runtime_config.hpp" #include "cvmmap_streamer/encode/encoded_access_unit.hpp" #include "cvmmap_streamer/ipc/contracts.hpp" #include #include #include #include #include #include #include namespace cvmmap_streamer::encode { struct RawVideoFrame { ipc::FrameInfo info{}; std::uint64_t source_timestamp_ns{0}; std::span bytes{}; }; class EncoderBackend { public: virtual ~EncoderBackend() = default; [[nodiscard]] virtual std::string_view backend_name() const = 0; [[nodiscard]] virtual bool using_hardware() const = 0; [[nodiscard]] virtual std::expected init(const RuntimeConfig &config, const ipc::FrameInfo &frame_info) = 0; [[nodiscard]] virtual std::expected poll() = 0; [[nodiscard]] virtual std::expected push_frame(const RawVideoFrame &frame) = 0; [[nodiscard]] virtual std::expected, std::string> drain() = 0; [[nodiscard]] virtual std::expected, std::string> flush() = 0; virtual void shutdown() = 0; }; [[nodiscard]] std::expected, std::string> make_encoder_backend(const RuntimeConfig &config); }