build(streamer): make ZED SDK optional

This commit is contained in:
2026-03-20 17:34:30 +08:00
parent 1691274e85
commit 1ef318bde4
2 changed files with 143 additions and 117 deletions
+48 -41
View File
@@ -56,15 +56,14 @@ find_package(ZeroMQ QUIET)
find_package(spdlog REQUIRED) find_package(spdlog REQUIRED)
find_package(Protobuf REQUIRED) find_package(Protobuf REQUIRED)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4)
find_package(OpenCV REQUIRED COMPONENTS core imgproc)
endif()
find_package(rvl CONFIG QUIET) find_package(rvl CONFIG QUIET)
set(ZED_DIR "/usr/local/zed" CACHE PATH "Path to the local ZED SDK") set(ZED_DIR "/usr/local/zed" CACHE PATH "Path to the local ZED SDK")
find_package(ZED REQUIRED) find_package(ZED QUIET)
find_package(CUDA ${ZED_CUDA_VERSION} REQUIRED) set(CVMMAP_HAS_ZED_SDK OFF)
find_library(CVMMAP_STREAMER_LIBUSB_LIBRARY NAMES usb-1.0 libusb-1.0) if (ZED_FOUND)
if (CVMMAP_STREAMER_LIBUSB_LIBRARY) find_package(CUDA ${ZED_CUDA_VERSION} REQUIRED)
find_library(CVMMAP_STREAMER_LIBUSB_LIBRARY NAMES usb-1.0 libusb-1.0)
if (CVMMAP_STREAMER_LIBUSB_LIBRARY)
set(_CVMMAP_STREAMER_ZED_LIBRARIES "") set(_CVMMAP_STREAMER_ZED_LIBRARIES "")
foreach(_zed_lib IN LISTS ZED_LIBRARIES) foreach(_zed_lib IN LISTS ZED_LIBRARIES)
if (_zed_lib STREQUAL "/usr/lib/x86_64-linux-gnu/libusb-1.0.so") if (_zed_lib STREQUAL "/usr/lib/x86_64-linux-gnu/libusb-1.0.so")
@@ -74,6 +73,17 @@ if (CVMMAP_STREAMER_LIBUSB_LIBRARY)
endif() endif()
endforeach() endforeach()
set(ZED_LIBRARIES "${_CVMMAP_STREAMER_ZED_LIBRARIES}") set(ZED_LIBRARIES "${_CVMMAP_STREAMER_ZED_LIBRARIES}")
endif()
set(CVMMAP_HAS_ZED_SDK ON)
message(STATUS "ZED SDK found: enabling zed_svo_to_mcap and zed_svo_to_mp4")
else()
message(STATUS "ZED SDK not found: skipping ZED conversion tools")
endif()
if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4 AND CVMMAP_HAS_ZED_SDK)
find_package(OpenCV REQUIRED COMPONENTS core imgproc)
elseif (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4)
message(STATUS "CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4=ON but ZED SDK is unavailable; zed_svo_grid_to_mp4 will not be built")
endif() endif()
add_subdirectory(third_party) add_subdirectory(third_party)
@@ -343,21 +353,24 @@ set_target_properties(mcap_replay_tester PROPERTIES
OUTPUT_NAME "mcap_replay_tester" OUTPUT_NAME "mcap_replay_tester"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
add_executable( set(CVMMAP_STREAMER_INSTALL_TARGETS cvmmap_streamer)
if (CVMMAP_HAS_ZED_SDK)
add_executable(
zed_svo_to_mcap zed_svo_to_mcap
src/tools/zed_svo_to_mcap.cpp src/tools/zed_svo_to_mcap.cpp
src/config/runtime_config.cpp) src/config/runtime_config.cpp)
target_include_directories(zed_svo_to_mcap target_include_directories(zed_svo_to_mcap
PRIVATE PRIVATE
"${CMAKE_CURRENT_LIST_DIR}/include" "${CMAKE_CURRENT_LIST_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
${ZED_INCLUDE_DIRS} ${ZED_INCLUDE_DIRS}
${CUDA_INCLUDE_DIRS}) ${CUDA_INCLUDE_DIRS})
target_link_directories(zed_svo_to_mcap target_link_directories(zed_svo_to_mcap
PRIVATE PRIVATE
${ZED_LIBRARY_DIR} ${ZED_LIBRARY_DIR}
${CUDA_LIBRARY_DIRS}) ${CUDA_LIBRARY_DIRS})
target_link_libraries(zed_svo_to_mcap target_link_libraries(zed_svo_to_mcap
PRIVATE PRIVATE
cvmmap_streamer_record_support cvmmap_streamer_record_support
CLI11::CLI11 CLI11::CLI11
@@ -365,62 +378,64 @@ target_link_libraries(zed_svo_to_mcap
${ZED_LIBRARIES} ${ZED_LIBRARIES}
${CUDA_CUDA_LIBRARY} ${CUDA_CUDA_LIBRARY}
${CUDA_CUDART_LIBRARY}) ${CUDA_CUDART_LIBRARY})
if (TARGET spdlog::spdlog) if (TARGET spdlog::spdlog)
target_link_libraries(zed_svo_to_mcap PRIVATE spdlog::spdlog) target_link_libraries(zed_svo_to_mcap PRIVATE spdlog::spdlog)
elseif (TARGET spdlog) elseif (TARGET spdlog)
target_link_libraries(zed_svo_to_mcap PRIVATE spdlog) target_link_libraries(zed_svo_to_mcap PRIVATE spdlog)
endif() endif()
set_target_properties(zed_svo_to_mcap PROPERTIES set_target_properties(zed_svo_to_mcap PROPERTIES
OUTPUT_NAME "zed_svo_to_mcap" OUTPUT_NAME "zed_svo_to_mcap"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
list(APPEND CVMMAP_STREAMER_INSTALL_TARGETS zed_svo_to_mcap)
add_library( add_library(
cvmmap_streamer_zed_svo_mp4_support cvmmap_streamer_zed_svo_mp4_support
STATIC STATIC
src/tools/zed_svo_mp4_support.cpp) src/tools/zed_svo_mp4_support.cpp)
target_include_directories(cvmmap_streamer_zed_svo_mp4_support target_include_directories(cvmmap_streamer_zed_svo_mp4_support
PUBLIC PUBLIC
"${CMAKE_CURRENT_LIST_DIR}/include" "${CMAKE_CURRENT_LIST_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}") "${CMAKE_CURRENT_BINARY_DIR}")
target_link_libraries(cvmmap_streamer_zed_svo_mp4_support target_link_libraries(cvmmap_streamer_zed_svo_mp4_support
PUBLIC PUBLIC
PkgConfig::FFMPEG) PkgConfig::FFMPEG)
if (TARGET spdlog::spdlog) if (TARGET spdlog::spdlog)
target_link_libraries(cvmmap_streamer_zed_svo_mp4_support PUBLIC spdlog::spdlog) target_link_libraries(cvmmap_streamer_zed_svo_mp4_support PUBLIC spdlog::spdlog)
elseif (TARGET spdlog) elseif (TARGET spdlog)
target_link_libraries(cvmmap_streamer_zed_svo_mp4_support PUBLIC spdlog) target_link_libraries(cvmmap_streamer_zed_svo_mp4_support PUBLIC spdlog)
endif() endif()
add_executable( add_executable(
zed_svo_to_mp4 zed_svo_to_mp4
src/tools/zed_svo_to_mp4.cpp) src/tools/zed_svo_to_mp4.cpp)
target_include_directories(zed_svo_to_mp4 target_include_directories(zed_svo_to_mp4
PRIVATE PRIVATE
"${CMAKE_CURRENT_LIST_DIR}/include" "${CMAKE_CURRENT_LIST_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
${ZED_INCLUDE_DIRS} ${ZED_INCLUDE_DIRS}
${CUDA_INCLUDE_DIRS}) ${CUDA_INCLUDE_DIRS})
target_link_directories(zed_svo_to_mp4 target_link_directories(zed_svo_to_mp4
PRIVATE PRIVATE
${ZED_LIBRARY_DIR} ${ZED_LIBRARY_DIR}
${CUDA_LIBRARY_DIRS}) ${CUDA_LIBRARY_DIRS})
target_link_libraries(zed_svo_to_mp4 target_link_libraries(zed_svo_to_mp4
PRIVATE PRIVATE
CLI11::CLI11 CLI11::CLI11
cvmmap_streamer_zed_svo_mp4_support cvmmap_streamer_zed_svo_mp4_support
${ZED_LIBRARIES} ${ZED_LIBRARIES}
${CUDA_CUDA_LIBRARY} ${CUDA_CUDA_LIBRARY}
${CUDA_CUDART_LIBRARY}) ${CUDA_CUDART_LIBRARY})
if (TARGET spdlog::spdlog) if (TARGET spdlog::spdlog)
target_link_libraries(zed_svo_to_mp4 PRIVATE spdlog::spdlog) target_link_libraries(zed_svo_to_mp4 PRIVATE spdlog::spdlog)
elseif (TARGET spdlog) elseif (TARGET spdlog)
target_link_libraries(zed_svo_to_mp4 PRIVATE spdlog) target_link_libraries(zed_svo_to_mp4 PRIVATE spdlog)
endif() endif()
set_target_properties(zed_svo_to_mp4 PROPERTIES set_target_properties(zed_svo_to_mp4 PROPERTIES
OUTPUT_NAME "zed_svo_to_mp4" OUTPUT_NAME "zed_svo_to_mp4"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
list(APPEND CVMMAP_STREAMER_INSTALL_TARGETS zed_svo_to_mp4)
if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4) if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4)
add_executable( add_executable(
zed_svo_grid_to_mp4 zed_svo_grid_to_mp4
src/tools/zed_svo_grid_to_mp4.cpp) src/tools/zed_svo_grid_to_mp4.cpp)
@@ -451,18 +466,10 @@ if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4)
set_target_properties(zed_svo_grid_to_mp4 PROPERTIES set_target_properties(zed_svo_grid_to_mp4 PROPERTIES
OUTPUT_NAME "zed_svo_grid_to_mp4" OUTPUT_NAME "zed_svo_grid_to_mp4"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
list(APPEND CVMMAP_STREAMER_INSTALL_TARGETS zed_svo_grid_to_mp4)
endif()
endif() endif()
install( install(
TARGETS TARGETS ${CVMMAP_STREAMER_INSTALL_TARGETS}
cvmmap_streamer
zed_svo_to_mcap
zed_svo_to_mp4
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
if (CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4)
install(
TARGETS
zed_svo_grid_to_mp4
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
+19
View File
@@ -45,6 +45,17 @@ cmake -B build -S .
cmake --build build cmake --build build
``` ```
When the ZED SDK is available, the build also enables `zed_svo_to_mcap` and
`zed_svo_to_mp4` automatically. When the SDK is absent, those tools are skipped
and the main streamer plus non-ZED testers still build normally.
`zed_svo_grid_to_mp4` remains optional and additionally requires OpenCV. Disable
it explicitly with:
```bash
cmake -B build -S . -DCVMMAP_BUILD_ZED_SVO_GRID_TO_MP4=OFF
```
```bash ```bash
# Use a local cv-mmap build tree # Use a local cv-mmap build tree
cmake -B build -S . \ cmake -B build -S . \
@@ -60,6 +71,8 @@ ls -la build/{cvmmap_streamer,rtp_receiver_tester,rtmp_stub_tester}
### ZED SVO/SVO2 To MP4 ### ZED SVO/SVO2 To MP4
This tool is only built when the ZED SDK is detected during CMake configure.
The repo also includes an offline conversion tool for the left ZED color stream: The repo also includes an offline conversion tool for the left ZED color stream:
```bash ```bash
@@ -130,6 +143,9 @@ The batch tool mirrors the common encoder options from `zed_svo_to_mp4`, skips e
### ZED SVO Grid To MP4 ### ZED SVO Grid To MP4
This tool is only built when the ZED SDK is detected and
`CVMMAP_BUILD_ZED_SVO_GRID_TO_MP4=ON`.
Use the grid converter to merge four synced ZED recordings into a 2x2 CCTV-style MP4 with a Unix timestamp overlay in the top-left corner: Use the grid converter to merge four synced ZED recordings into a 2x2 CCTV-style MP4 with a Unix timestamp overlay in the top-left corner:
```bash ```bash
@@ -213,6 +229,9 @@ timestamp,activity,group_path,segment_dir,camera,relative_path
### Batch ZED Segments To MCAP ### Batch ZED Segments To MCAP
This workflow depends on the `zed_svo_to_mcap` binary, which is only built when
the ZED SDK is detected during CMake configure.
Use the wrapper to recurse through a dataset root, run `zed_svo_to_mcap --segment-dir` on every matched multi-camera segment, and show one aggregate tqdm progress bar: Use the wrapper to recurse through a dataset root, run `zed_svo_to_mcap --segment-dir` on every matched multi-camera segment, and show one aggregate tqdm progress bar:
```bash ```bash