51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
#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 <cstdint>
|
|
#include <span>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
#include <proxy/proxy.h>
|
|
|
|
namespace cvmmap_streamer::encode {
|
|
|
|
struct RawVideoFrame {
|
|
ipc::FrameInfo info{};
|
|
std::uint64_t source_timestamp_ns{0};
|
|
std::span<const std::uint8_t> 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<MemBackendName, std::string_view() const>
|
|
::add_convention<MemUsingHardware, bool() const>
|
|
::add_convention<MemInit, Status(const RuntimeConfig &, const ipc::FrameInfo &)>
|
|
::add_convention<MemStreamInfo, Result<EncodedStreamInfo>() const>
|
|
::add_convention<MemPoll, Status()>
|
|
::add_convention<MemPushFrame, Status(const RawVideoFrame &)>
|
|
::add_convention<MemDrain, Result<std::vector<EncodedAccessUnit>>()>
|
|
::add_convention<MemFlush, Result<std::vector<EncodedAccessUnit>>()>
|
|
::add_convention<MemShutdown, void()>
|
|
::build {};
|
|
|
|
using EncoderBackend = pro::proxy<EncoderBackendFacade>;
|
|
|
|
[[nodiscard]]
|
|
Result<EncoderBackend> make_encoder_backend(const RuntimeConfig &config);
|
|
|
|
}
|