Files
cvmmap-streamer/include/cvmmap_streamer/config/runtime_config.hpp
T
crosstyan 2f74a9561d feat(zed): export depth at neural optimal resolution
Restrict ZED depth export to neural modes and default offline MCAP conversion to the SDK-selected optimal depth size instead of camera resolution.

Add a configurable --depth-size option, propagate the actual returned depth dimensions into DepthMap metadata, and emit a dedicated depth calibration topic when depth resolution differs from video.

Update the batch and recording helper scripts to use the new neural-only depth mode surface and pass through depth sizing.

Verification:
- cmake --build build --target zed_svo_to_mcap mcap_multi_record_tester mcap_pose_record_tester -j4
- build/bin/mcap_multi_record_tester
- build/bin/mcap_pose_record_tester
- build/bin/zed_svo_to_mcap --input /workspaces/data/kindergarten/jump/experiment/2/2026-03-18T11-27-15/2026-03-18T11-27-15_zed4.svo2 --output /tmp/zed4_neural_optimal_test.mcap --codec h264 --encoder-device software --mcap-compression zstd --depth-mode neural --depth-size optimal --start-frame 0 --end-frame 9
2026-03-24 16:01:46 +08:00

136 lines
3.1 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <expected>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
namespace cvmmap_streamer {
enum class CodecType {
H264,
H265,
};
enum class RunMode {
Pipeline,
Ingest,
};
enum class RtmpMode {
Enhanced,
};
enum class RtmpTransportType {
Libavformat,
FfmpegProcess,
};
enum class EncoderBackendType {
Auto,
FFmpeg,
};
enum class EncoderDeviceType {
Auto,
Nvidia,
Software,
};
enum class McapCompression {
None,
Lz4,
Zstd,
};
struct InputConfig {
std::string uri{"cvmmap://default"};
std::string nats_url{"nats://localhost:4222"};
};
struct EncoderConfig {
EncoderBackendType backend{EncoderBackendType::Auto};
EncoderDeviceType device{EncoderDeviceType::Auto};
CodecType codec{CodecType::H264};
std::uint32_t gop{30};
std::uint32_t b_frames{0};
};
struct RtmpOutputConfig {
bool enabled{false};
std::vector<std::string> urls{};
RtmpTransportType transport{RtmpTransportType::Libavformat};
std::string ffmpeg_path{"ffmpeg"};
};
struct RtpOutputConfig {
bool enabled{false};
std::optional<std::string> endpoint{std::nullopt};
std::optional<std::string> host{std::nullopt};
std::optional<std::uint16_t> port{std::nullopt};
std::uint8_t payload_type{96};
std::optional<std::string> sdp_path{std::nullopt};
};
struct OutputsConfig {
RtmpOutputConfig rtmp{};
RtpOutputConfig rtp{};
};
struct McapRecordConfig {
bool enabled{false};
std::string path{"capture.mcap"};
std::string topic{"/camera/video"};
std::string depth_topic{"/camera/depth"};
std::string calibration_topic{"/camera/calibration"};
std::string depth_calibration_topic{"/camera/depth_calibration"};
std::string pose_topic{"/camera/pose"};
std::string body_topic{"/camera/body"};
std::string frame_id{"camera"};
McapCompression compression{McapCompression::Zstd};
};
struct RecordConfig {
McapRecordConfig mcap{};
};
struct LatencyConfig {
std::size_t queue_size{1};
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};
EncoderConfig encoder{};
OutputsConfig outputs{};
RecordConfig record{};
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::string_view to_string(RtmpTransportType transport);
std::string_view to_string(EncoderBackendType backend);
std::string_view to_string(EncoderDeviceType device);
std::string_view to_string(McapCompression compression);
std::expected<McapCompression, std::string> parse_mcap_compression(std::string_view raw);
std::expected<RuntimeConfig, std::string> parse_runtime_config(int argc, char **argv);
std::expected<void, std::string> validate_runtime_config(const RuntimeConfig &config);
std::string summarize_runtime_config(const RuntimeConfig &config);
}