From 0a08411709150e519fa74963fdbe456246464a63 Mon Sep 17 00:00:00 2001 From: crosstyan Date: Wed, 4 Feb 2026 03:27:22 +0000 Subject: [PATCH] feat: add backward-compatible open() overload for local cameras Add overload to maintain backward compatibility with existing code that uses local USB cameras or SVO files. New API: // For network stream cameras open(const std::string& ip, int port, Trigger* ref, int sdk_gpu_id) // For local cameras (USB, SVO, etc.) - backward compatible open(sl::InputType input, Trigger* ref, int sdk_gpu_id) This allows the same ClientPublisher class to work with both: - Remote cameras via streaming (new use case) - Local cameras via USB/SVO (original use case) Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- include/ClientPublisher.hpp | 6 ++++- src/ClientPublisher.cpp | 47 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/include/ClientPublisher.hpp b/include/ClientPublisher.hpp index feeb5dd..ee27ce8 100755 --- a/include/ClientPublisher.hpp +++ b/include/ClientPublisher.hpp @@ -54,8 +54,12 @@ public: ClientPublisher(); ~ClientPublisher(); - // Open camera from stream (IP:port) instead of local input + // Open camera from stream (IP:port) - for network camera streaming bool open(const std::string& ip, int port, Trigger* ref, int sdk_gpu_id); + + // Open local camera (USB/serial/SVO) - backward compatible overload + bool open(sl::InputType input, Trigger* ref, int sdk_gpu_id); + void start(); void stop(); void setStartSVOPosition(unsigned pos); diff --git a/src/ClientPublisher.cpp b/src/ClientPublisher.cpp index 004dff9..3b5552c 100755 --- a/src/ClientPublisher.cpp +++ b/src/ClientPublisher.cpp @@ -57,6 +57,53 @@ bool ClientPublisher::open(const std::string& ip, int port, Trigger* ref, int sd return true; } +bool ClientPublisher::open(sl::InputType input, Trigger* ref, int sdk_gpu_id) { + + p_trigger = ref; + + sl::InitParameters init_parameters; + init_parameters.depth_mode = sl::DEPTH_MODE::NEURAL; + init_parameters.input = input; + init_parameters.coordinate_units = sl::UNIT::METER; + init_parameters.depth_stabilization = 30; + init_parameters.sdk_gpu_id = sdk_gpu_id; + + auto state = zed.open(init_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error opening local camera: " << state << std::endl; + return false; + } + + serial = zed.getCameraInformation().serial_number; + p_trigger->states[serial] = false; + + // in most cases in body tracking setup, the cameras are static + sl::PositionalTrackingParameters positional_tracking_parameters; + positional_tracking_parameters.set_as_static = true; + + state = zed.enablePositionalTracking(positional_tracking_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error enabling positional tracking: " << state << std::endl; + return false; + } + + sl::BodyTrackingParameters body_tracking_parameters; + body_tracking_parameters.detection_model = sl::BODY_TRACKING_MODEL::HUMAN_BODY_ACCURATE; + body_tracking_parameters.body_format = sl::BODY_FORMAT::BODY_18; + body_tracking_parameters.enable_body_fitting = false; + body_tracking_parameters.enable_tracking = false; + state = zed.enableBodyTracking(body_tracking_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error enabling body tracking: " << state << std::endl; + return false; + } + + return true; +} + void ClientPublisher::start() { if (zed.isOpened()) {