#pragma once #include #include #include #include #include #include #include namespace cvmmap_streamer { enum class CodecType { H264, H265, }; enum class RunMode { Pipeline, Ingest, }; enum class RtmpMode { Enhanced, Domestic, }; struct InputConfig { std::string shm_name{"cvmmap_default"}; std::string zmq_endpoint{"ipc:///tmp/cvmmap_default"}; }; struct RtmpOutputConfig { bool enabled{false}; std::vector urls{}; RtmpMode mode{RtmpMode::Enhanced}; }; struct RtpOutputConfig { bool enabled{false}; std::optional endpoint{std::nullopt}; std::optional host{std::nullopt}; std::optional port{std::nullopt}; std::uint8_t payload_type{96}; std::optional sdp_path{std::nullopt}; }; struct OutputsConfig { RtmpOutputConfig rtmp{}; RtpOutputConfig rtp{}; }; struct LatencyConfig { std::size_t queue_size{1}; std::uint32_t gop{30}; std::uint32_t b_frames{0}; bool realtime_sync{true}; bool force_idr_on_reset{true}; std::uint32_t ingest_max_frames{0}; std::uint32_t ingest_idle_timeout_ms{1000}; std::uint32_t ingest_consumer_delay_ms{0}; std::uint32_t snapshot_copy_delay_us{0}; std::uint32_t emit_stall_ms{0}; }; struct RuntimeConfig { InputConfig input{}; RunMode run_mode{RunMode::Pipeline}; CodecType codec{CodecType::H264}; OutputsConfig outputs{}; LatencyConfig latency{}; static RuntimeConfig defaults(); }; std::string_view to_string(CodecType codec); std::string_view to_string(RunMode mode); std::string_view to_string(RtmpMode mode); std::expected parse_runtime_config(int argc, char **argv); std::expected validate_runtime_config(const RuntimeConfig &config); std::string summarize_runtime_config(const RuntimeConfig &config); }