### Compile and Run Sample Application Source: https://github.com/stereolabs/zedx-one-capture/blob/main/README.md Compiles a sample mono application using CMake after the library has been built and installed. It then runs the compiled sample application. ```bash cd ../sample_mono/ mkdir build; cd build; cmake .. make ./argus_camera ``` -------------------------------- ### CMake Project Setup and Dependencies Source: https://github.com/stereolabs/zedx-one-capture/blob/main/sample_mono/CMakeLists.txt Configures the CMake project, finds OpenCV, and sets up include and link directories. It also checks for the Tegra Multimedia API and includes its headers and libraries if found. ```cmake cmake_minimum_required(VERSION 3.5) project(argus_camera) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) set(TegraMM_ROOT /usr/src/jetson_multimedia_api) set(TegraMM_FOUND FALSE) if(EXISTS ${TegraMM_ROOT}) # set packages set(TegraMM_INCLUDE_DIRS ${TegraMM_ROOT}/include ${TegraMM_ROOT}/include/libjpeg-8b /usr/include/libdrm) set(TegraMM_LIBRARY_DIRS /usr/lib/aarch64-linux-gnu/tegra /usr/lib/aarch64-linux-gnu) set(TegraMM_LIBRARIES nvargus_socketclient nvjpeg drm nvbufsurftransform nvbufsurface nvosd EGL v4l2 GLESv2 X11 pthread vulkan) file(GLOB TegraMM_COMMON_SOURCES ${TegraMM_ROOT}/samples/common/classes/*.cpp) include_directories(${TegraMM_INCLUDE_DIRS}) link_directories(${TegraMM_LIBRARY_DIRS}) set(TegraMM_FOUND TRUE) endif() ``` -------------------------------- ### Clone and Build ZED X One Capture Library Source: https://github.com/stereolabs/zedx-one-capture/blob/main/README.md Clones the repository, builds the C++ library using CMake, installs it, and updates the dynamic linker cache. This is a prerequisite for using the camera control API. ```bash git clone https://github.com/stereolabs/zedx-one-capture.git cd zedx-one-capture/lib mkdir build; cd build; cmake .. make sudo make install sudo ldconfig ``` -------------------------------- ### CMake Project Setup and Dependencies Source: https://github.com/stereolabs/zedx-one-capture/blob/main/sample/CMakeLists.txt Configures the CMake project, finds OpenCV, and sets up include and link directories. It also checks for the Tegra Multimedia API and includes its headers and libraries if found. ```cmake cmake_minimum_required(VERSION 3.5) project(argus_camera) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) set(TegraMM_ROOT /usr/src/jetson_multimedia_api) set(TegraMM_FOUND FALSE) if(EXISTS ${TegraMM_ROOT}) # set packages set(TegraMM_INCLUDE_DIRS ${TegraMM_ROOT}/include ${TegraMM_ROOT}/include/libjpeg-8b /usr/include/libdrm) set(TegraMM_LIBRARY_DIRS /usr/lib/aarch64-linux-gnu/tegra /usr/lib/aarch64-linux-gnu) set(TegraMM_LIBRARIES nvargus_socketclient nvjpeg drm nvbufsurftransform nvbufsurface nvosd EGL v4l2 GLESv2 X11 pthread vulkan) file(GLOB TegraMM_COMMON_SOURCES ${TegraMM_ROOT}/samples/common/classes/*.cpp) include_directories(${TegraMM_INCLUDE_DIRS}) link_directories(${TegraMM_LIBRARY_DIRS}) set(TegraMM_FOUND TRUE) endif() ``` -------------------------------- ### Library Creation and Installation Source: https://github.com/stereolabs/zedx-one-capture/blob/main/lib/CMakeLists.txt Defines the shared library for the project, links necessary Tegra Multimedia API libraries, and specifies installation paths for headers and the library itself. ```cmake ### Add sources for library add_library(${PROJECT_NAME} SHARED ${ARGUS_CAPTURE_SRC} ${ARGUS_CAPTURE_HDR} ${TegraMM_COMMON_SOURCES}) ### Link library with deps target_link_directories(${PROJECT_NAME} PUBLIC ${TegraMM_LIBRARY_DIRS} ${TegraMM_LIBRARY_DIRS_CROSSCPL} ) target_link_libraries(${PROJECT_NAME} ${SPECIAL_OS_LIBS}) set(ARGUSCAPTURE_PUBLIC_INCLUDE_FILES "include/ArgusCapture.hpp") SET(ARGUS_CAPTURE_LIB_DIR /usr/local/lib) SET(ARGUS_CAPTURE_INC_DIR /usr/local/include) set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${ARGUSCAPTURE_PUBLIC_INCLUDE_FILES}" ) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${ARGUS_CAPTURE_LIB_DIR} LIBRARY DESTINATION ${ARGUS_CAPTURE_LIB_DIR} PUBLIC_HEADER DESTINATION ${ARGUS_CAPTURE_INC_DIR}) ``` -------------------------------- ### CMake Project Setup and Dependencies Source: https://github.com/stereolabs/zedx-one-capture/blob/main/stereo_calibration/CMakeLists.txt Configures the CMake build system for the zedx_one_stereo_calibration project. It sets the minimum CMake version, project name, enables export of compile commands, and finds/links the OpenCV library. It also conditionally sets up paths and libraries for the Tegra Multimedia API if available. ```cmake cmake_minimum_required(VERSION 3.5) project(zedx_one_stereo_calibration) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) set(TegraMM_ROOT /usr/src/jetson_multimedia_api) set(TegraMM_FOUND FALSE) if(EXISTS ${TegraMM_ROOT}) # set packages set(TegraMM_INCLUDE_DIRS ${TegraMM_ROOT}/include ${TegraMM_ROOT}/include/libjpeg-8b /usr/include/libdrm) set(TegraMM_LIBRARY_DIRS /usr/lib/aarch64-linux-gnu/tegra /usr/lib/aarch64-linux-gnu) set(TegraMM_LIBRARIES nvargus_socketclient nvjpeg drm nvbufsurftransform nvbufsurface nvosd EGL v4l2 GLESv2 X11 pthread vulkan) file(GLOB TegraMM_COMMON_SOURCES ${TegraMM_ROOT}/samples/common/classes/*.cpp) include_directories(${TegraMM_INCLUDE_DIRS}) link_directories(${TegraMM_LIBRARY_DIRS}) set(TegraMM_FOUND TRUE) endif() add_definitions(-std=c++17 -O3) IF (BUILD_WITH_DEBUGINFOS) message("!! Building with -g !!") add_definitions(-g) set(ARGUS_LIB arguscaptured) ELSE() set(ARGUS_LIB arguscapture) ENDIF() include_directories(include/) add_executable(zedx_one_stereo_calibration main.cpp) target_link_libraries(zedx_one_stereo_calibration ${ARGUS_LIB} pthread ${OpenCV_LIBRARIES} ${TegraMM_LIBRARIES}) ``` -------------------------------- ### CMake Project Setup and TegraMM Integration Source: https://github.com/stereolabs/zedx-one-capture/blob/main/lib/CMakeLists.txt Configures the CMake project, sets C++ standards, and finds the Tegra Multimedia API. It includes platform-specific library paths and dependencies for ARM64 architectures, such as v4l2, nvargus_socketclient, and nvbuf_utils. ```cmake cmake_minimum_required(VERSION 3.5) project (arguscapture) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_BUILD_TYPE "Release") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_DEBUG_POSTFIX "d") find_package(TegraMM REQUIRED) if(${TegraMM_FOUND}) message(STATUS "Found Tegra Multimedia API") else() message(STATUS "Could not find Tegra Multimedia API") endif() if (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) set(TegraMM_LIBRARY_DIRS "/usr/lib/aarch64-linux-gnu" "/usr/lib/aarch64-linux-gnu/tegra") set(TegraMM_LIBRARY_DIRS_CROSSCPL "/usr/xcc/aarch64-unknown-linux-gnu/lib/aarch64-linux-gnu/tegra" "/usr/xcc/aarch64-unknown-linux-gnu/lib/aarch64-linux-gnu" "/usr/xcc/aarch64-unknown-linux-gnu/lib/" "${cross_root}/lib") SET(SPECIAL_OS_LIBS v4l2 nvargus_socketclient nvbufsurftransform nvbufsurface EGL pthread) SET(NATIV_CMD "find /usr/lib/aarch64-linux-gnu/ -type f -name libnvbuf_utils* 2> /dev/null") SET(CROSS_CMD "find /usr/xcc/aarch64-unknown-linux-gnu/ -type f -name libnvbuf_utils* 2> /dev/null") execute_process(COMMAND bash "-c" ${NATIV_CMD} OUTPUT_VARIABLE NVBUF_UTILS_LIBRARY_NATIV) execute_process(COMMAND bash "-c" ${CROSS_CMD} OUTPUT_VARIABLE NVBUF_UTILS_LIBRARY_CC) if(NVBUF_UTILS_LIBRARY_NATIV OR NVBUF_UTILS_LIBRARY_CC) SET(SPECIAL_OS_LIBS ${SPECIAL_OS_LIBS} nvbuf_utils) endif() endif() ### Set folder for sources and includes SET(SRC_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/src) SET(HDR_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${HDR_FOLDER}) ### List source files of library FILE(GLOB_RECURSE ARGUS_CAPTURE_SRC "${SRC_FOLDER}/*.c*") FILE(GLOB_RECURSE ARGUS_CAPTURE_HDR "${HDR_FOLDER}/*.h*") ``` -------------------------------- ### CMake Build Configuration for raw_camera Source: https://github.com/stereolabs/zedx-one-capture/blob/main/sample_raw/CMakeLists.txt This snippet details the CMake configuration for the 'raw_camera' project. It sets up the minimum CMake version, project name, enables compilation database export, finds and includes OpenCV, and conditionally includes Tegra multimedia API paths and libraries. It also defines C++ standard and optimization flags, and links necessary libraries. ```cmake cmake_minimum_required(VERSION 3.5) project(raw_camera) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(OpenCV REQUIRED) include_directories(${OPENCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) set(TegraMM_ROOT /usr/src/jetson_multimedia_api) set(TegraMM_FOUND FALSE) if(EXISTS ${TegraMM_ROOT}) # set packages set(TegraMM_INCLUDE_DIRS ${TegraMM_ROOT}/include ${TegraMM_ROOT}/include/libjpeg-8b /usr/include/libdrm) set(TegraMM_LIBRARY_DIRS /usr/lib/aarch64-linux-gnu/tegra /usr/lib/aarch64-linux-gnu) set(TegraMM_LIBRARIES nvargus_socketclient nvjpeg drm nvbufsurftransform nvbufsurface nvosd EGL v4l2 GLESv2 X11 pthread vulkan) file(GLOB TegraMM_COMMON_SOURCES ${TegraMM_ROOT}/samples/common/classes/*.cpp) include_directories(${TegraMM_INCLUDE_DIRS}) link_directories(${TegraMM_LIBRARY_DIRS}) set(TegraMM_FOUND TRUE) endif() add_definitions(-std=c++14 -O3) IF (BUILD_WITH_DEBUGINFOS) message("!! Building with -g !!") add_definitions(-g) set(ARGUS_LIB arguscapture) ELSE() set(ARGUS_LIB arguscapture) ENDIF() add_executable(raw_camera main.cpp) target_link_libraries(raw_camera ${ARGUS_LIB} pthread ${OpenCV_LIBRARIES} ${TegraMM_LIBRARIES}) ``` -------------------------------- ### ZED X One Stereo Calibration Usage Source: https://github.com/stereolabs/zedx-one-capture/blob/main/stereo_calibration/README.md Commands to compile and run the ZED X One stereo calibration application. The application can be launched using camera IDs or a ZED Media Server configuration file. ```bash # Compile the application mkdir build && cd build cmake .. make # Open cameras by id ./zedx_one_stereo_calibration # Open cameras by using the ZED_Media_Server configuration file ./zedx_one_stereo_calibration /usr/local/zed/settings/virtual_xone_config.json ``` -------------------------------- ### Compiler Flags and Library Linking Source: https://github.com/stereolabs/zedx-one-capture/blob/main/sample_mono/CMakeLists.txt Sets C++ standard and optimization flags. It conditionally adds debug symbols and defines the target library name based on the build configuration. Finally, it links the executable with required libraries. ```cmake add_definitions(-std=c++14 -O3) IF (BUILD_WITH_DEBUGINFOS) message("!! Building with -g !!") add_definitions(-g) set(ARGUS_LIB arguscaptured) ELSE() set(ARGUS_LIB arguscapture) ENDIF() add_executable(argus_camera main.cpp) target_link_libraries(argus_camera ${ARGUS_LIB} pthread ${OpenCV_LIBRARIES} ${TegraMM_LIBRARIES}) ``` -------------------------------- ### Compiler Flags and Library Linking Source: https://github.com/stereolabs/zedx-one-capture/blob/main/sample/CMakeLists.txt Sets C++ standard and optimization flags. It conditionally adds debug symbols and defines the target library name based on the build configuration. Finally, it links the executable with required libraries. ```cmake add_definitions(-std=c++14 -O3) IF (BUILD_WITH_DEBUGINFOS) message("!! Building with -g !!") add_definitions(-g) set(ARGUS_LIB arguscaptured) ELSE() set(ARGUS_LIB arguscapture) ENDIF() add_executable(argus_camera main.cpp) target_link_libraries(argus_camera ${ARGUS_LIB} pthread ${OpenCV_LIBRARIES} ${TegraMM_LIBRARIES}) ``` -------------------------------- ### ZED X One Stereo Calibration Configuration Source: https://github.com/stereolabs/zedx-one-capture/blob/main/stereo_calibration/README.md Configuration parameters for the ZED X One stereo calibration process. These values should be adjusted based on the specific chessboard pattern used for calibration. ```C++ // CHANGE THIS PARAM BASED ON THE CHECKERBOARD USED // https://docs.opencv.org/4.x/da/d0d/tutorial_camera_calibration_pattern.html int target_w = 9; // number of horizontal inner edges int target_h = 6; // number of vertical inner edges float square_size = 25.0; // mm ``` -------------------------------- ### Build Options: Sanitizers and Debug Info Source: https://github.com/stereolabs/zedx-one-capture/blob/main/lib/CMakeLists.txt Enables build-time options for AddressSanitizer and debug information. When enabled, it adds specific compiler and linker flags to detect memory errors and include debugging symbols. ```cmake ## DEBUG/ SANITIZER options add_definitions(-Werror=return-type) IF (BUILD_WITH_SANITIZER) message("!! Building with address sanitizer and -g !!") set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -static-libasan -fsanitize=address") set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -static-libasan -fsanitize=address") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -static-libasan -fsanitize=address -Wall -Wextra -g") set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -static-libasan -fsanitize=address -Wall -Wextra -g") add_definitions(-g -fsanitize=address -fno-omit-frame-pointer -static-libasan -Wall -Wextra) ENDIF() IF (BUILD_WITH_DEBUGINFOS) message("!! Building with -g !!") add_definitions(-g) ENDIF() ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.