#pragma once #include "cvmmap_streamer/config/runtime_config.hpp" #include "cvmmap_streamer/core/status.hpp" #include "cvmmap_streamer/encode/encoded_access_unit.hpp" #include "cvmmap_streamer/ipc/contracts.hpp" #include #include #include #include #include namespace cvmmap_streamer::encode { struct RawVideoFrame { ipc::FrameInfo info{}; std::uint64_t source_timestamp_ns{0}; std::size_t row_stride_bytes{0}; bool force_keyframe{false}; std::span bytes{}; }; PRO_DEF_MEM_DISPATCH(MemBackendName, backend_name); PRO_DEF_MEM_DISPATCH(MemUsingHardware, using_hardware); PRO_DEF_MEM_DISPATCH(MemInit, init); PRO_DEF_MEM_DISPATCH(MemStreamInfo, stream_info); PRO_DEF_MEM_DISPATCH(MemPoll, poll); PRO_DEF_MEM_DISPATCH(MemPushFrame, push_frame); PRO_DEF_MEM_DISPATCH(MemDrain, drain); PRO_DEF_MEM_DISPATCH(MemFlush, flush); PRO_DEF_MEM_DISPATCH(MemShutdown, shutdown); struct EncoderBackendFacade : pro::facade_builder ::add_convention ::add_convention ::add_convention ::add_convention() const> ::add_convention ::add_convention ::add_convention>()> ::add_convention>()> ::add_convention ::build {}; using EncoderBackend = pro::proxy; [[nodiscard]] Result make_encoder_backend(const RuntimeConfig &config); }