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>
This commit is contained in:
2026-02-04 03:27:22 +00:00
parent 435ea09451
commit 0a08411709
2 changed files with 52 additions and 1 deletions

View File

@ -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);

View File

@ -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()) {