eSDK Pro API Reference

Use this reference to identify which APIs to call, when to use them, and why. For full signatures, overloads, enums, and members, follow the Doxygen links.

Modules

  • Core APISystem, Server, Pipeline, ports, PTP sync, global logging.
  • Camera API — camera lifecycle + typed camera parameters.
  • Processing API — tasks, frames, task parameters, FlexTrans (Linux).
  • Plugin API — custom processing via Plugin::TaskWorker, plugin ports/params.
  • Support APIESdkProException, ErrorCode, LogLevel, version constants.

Typical flow

  1. Create a System.
  2. Connect a Server.
  3. Discover and add Cameras; set parameters.
  4. Build a Pipeline of Tasks (and plugins).
  5. Start, monitor, stop; handle exceptions.

Doxygen entry point: class index (link → annotated.html).

Core API

Manages systems, servers, pipelines, and synchronization between components. Also provides basic configuration and logging utilities.

Common Tasks

Task API Calls
Initialize SDK and discover cameras System::Create(), Server::DiscoverCameras()
Connect to a server (local or remote) System::ConnectServer(const std::string& ip[, uint16_t port]), System::CreateLocalServer()
Build the pipeline graph Pipeline::Create*Task(...), Pipeline::ConnectTasks(Output&, Input&), Pipeline::DeleteTask(Task&), Pipeline::Reset()
Enable PTP sync before starting Pipeline::SetPtpSyncMode(bool)
Start and stop execution Pipeline::Start(), Pipeline::Stop()
Set global logging level SetLogLevel(LogLevel)

Key Classes and Functions

  • System — creates and manages servers and pipelines. Used as the main entry point for initializing and shutting down SDK components.
  • Server — discovers, connects, and manages camera devices on the network.
  • Pipeline — builds and runs processing graphs that connect cameras, tasks, and plugins.
    Supports Precision Time Protocol (PTP) synchronization through SetPtpSyncMode(bool enable), which aligns timestamps across multiple servers and cameras.
  • Ports — represents task input and output connections that define data flow within the pipeline.
  • LogLevel — defines SDK logging verbosity (Off, Error, Warning, Info, Debug).
  • SetLogLevel(LogLevel level)free function that sets SDK-wide logging verbosity. Not a System method; call it early in program initialization.

Usage Notes

  • Create one System instance per process.
  • Configure tasks and connections before starting the pipeline.
  • Enable PTP only when required for multi-camera or multi-server synchronization.
  • Call SetLogLevel() before initialization to ensure consistent verbosity across logs.

Example

System sys = System::Create();
Server srv = sys.ConnectServer("127.0.0.1");

auto infos = srv.DiscoverCameras();
Camera cam = srv.AddCamera(infos.front());

Pipeline pipe = sys.GetPipeline();
CameraTask camTask = pipe.CreateCameraTask(cam);
RawSavingTask rawTask = pipe.CreateRawSavingTask(srv, "/data/out");
pipe.ConnectTasks(camTask.GetOutput(), rawTask.GetInput());

SetLogLevel(LogLevel::Info);
pipe.SetPtpSyncMode(true);
pipe.Start();
// ...
pipe.Stop();

Camera API

Controls camera lifecycle and typed parameters for exposure, gain, and other adjustable values.

Common Tasks

Task API Calls
Discover and add cameras Server::DiscoverCameras(), Server::AddCamera(const CameraDiscoveryInfo&)
Start or stop streaming Camera::StartStreaming(), Camera::StopStreaming()
Get a typed parameter handle Camera::GetParameter<T>(const std::string& name)
Read or write a parameter T::GetValue(), T::SetValue(...)
Validate supported range T::GetRange()[min, max, step]

Key Classes and Functions

  • Camera — represents a single camera (link → classeSdkPro_1_1Camera.html)
  • UInt32CameraParam / Int32CameraParam / FloatCameraParam / BoolCameraParam / EnumCameraParam / StringCameraParam — typed parameter interfaces (link → parameter pages)
  • CameraDiscoveryInfo — metadata from camera discovery (link → discovery page)

Usage Notes

  • Set parameters before starting the stream.
  • Use GetRange() to validate values.
  • Observe parameter units (e.g., exposure in microseconds).

Example

auto exp = cam.GetParameter<UInt32CameraParam>("Exposure"); // µs
auto [minExp, maxExp, step] = exp.GetRange();
uint32_t desired = 5000;
uint32_t clamped = std::max(minExp, std::min(maxExp, desired - (desired % std::max(step, 1u))));
exp.SetValue(clamped);

cam.StartStreaming();
// ...
cam.StopStreaming();

Processing API

Builds a graph of tasks that process frames through the pipeline. Supports zero-copy FlexTrans connectors on Linux.

Common Tasks

Task API Calls
Create capture/encode/save tasks Pipeline::CreateCameraTask(const Camera&), Pipeline::CreateNvencTask(...), Pipeline::CreateRawSavingTask(const Server&, const std::string& path)
Wire tasks together Pipeline::ConnectTasks(Output&, Input&), Pipeline::DisconnectTasks(...)
Zero-copy connections (Linux) Pipeline::ConnectTasksFlexTrans(Output, Input) (GPU↔GPU), Pipeline::ConnectTasksFlexTrans(Output, srcNicIp, Input, dstNicIp) (NIC↔NIC)
Configure task parameters TaskParam<T>::GetValue(), TaskParam<T>::SetValue(...)
Run control and teardown Pipeline::Start(), Pipeline::Stop(), Pipeline::Reset(), Pipeline::DeleteTask(Task&)

Key Classes and Functions

  • Task — base class for processing nodes (CameraTask, NvencTask, RawSavingTask) (link → task pages)
  • Frame — container for image data and metadata (link → classeSdkPro_1_1Frame.html)
  • TaskParam<T> — typed parameter interface (link → task parameter pages)
  • Pipeline::ConnectTasksFlexTrans(...) — zero-copy linking (Linux only) (link → classeSdkPro_1_1Pipeline.html)

Usage Notes

  • Create and connect tasks before starting.
  • Delete a task before rebuilding the graph.
  • Some parameters cannot change at runtime.
  • Use FlexTrans for GPU↔GPU or NIC↔NIC transfers on supported hardware.

Example

CameraTask camTask = pipe.CreateCameraTask(cam);
NvencTask encTask = pipe.CreateNvencTask(srv /*, codec/bitrate/etc. */);
RawSavingTask rawTask = pipe.CreateRawSavingTask(srv, "/data/out");

pipe.ConnectTasks(camTask.GetOutput(), encTask.GetInput());
pipe.ConnectTasks(camTask.GetOutput(), rawTask.GetInput());

// Linux zero-copy variants:
// pipe.ConnectTasksFlexTrans(camTask.GetOutput(), encTask.GetInput());
// pipe.ConnectTasksFlexTrans(camTask.GetOutput(), "192.168.10.11", rawTask.GetInput(), "192.168.10.12");

pipe.Start();
// ...
pipe.Stop();

Plugin API

Enables custom processing through user-defined plugins. Implement a Plugin::TaskWorker, define ports, and expose optional parameters.

Common Tasks

Task API Calls
Define a custom processing task class MyTask : public Plugin::TaskWorker { bool Process() override; }
Name the task SetName(const std::string&)
Create input/output ports CreateFrameInput(name, HWPlatform), CreateFrameOutput(name, HWPlatform)
Receive and emit frames FrameInput::GetFrame(), FrameOutput::Push(frame)
Expose plugin parameters (optional) TaskParam<T> (plugin context)
Use the plugin in a pipeline Pipeline::CreatePluginTask(const Server&, "MyTask"), Pipeline::ConnectTasks(...)

Key Classes and Functions

  • Plugin::TaskWorker — base class for custom processing nodes (link → classeSdkPro_1_1Plugin_1_1TaskWorker.html)
  • FrameInput / FrameOutput — plugin ports for data exchange (link → plugin port pages)
  • TaskParam<T> — plugin-side parameter interface (link → plugin task param pages)

Usage Notes

  • Create ports in the constructor.
  • Keep Process() non-blocking and fast.
  • Match HWPlatform between tasks to avoid unnecessary copies.
  • Validate parameters at startup and document thread safety.

Example

class CustomTask : public Plugin::TaskWorker {
public:
    static inline const std::string c_name{"CustomTask"};
    static inline const std::string c_in{"InputFrame"};
    static inline const std::string c_out{"OutputFrame"};

    CustomTask() {
        SetName(c_name);
        in_  = CreateFrameInput(c_in,  HWPlatform::Host);
        out_ = CreateFrameOutput(c_out, HWPlatform::Host);
    }

    bool Process() override {
        auto frame = in_.GetFrame();
        if (!frame.IsValid()) return false;
        // ... processing ...
        out_.Push(frame);
        return true;
    }
private:
    Plugin::FrameInput  in_{};
    Plugin::FrameOutput out_{};
};

Support API

Provides diagnostics, exceptions, logging, and version information.

Common Tasks

Task API Calls
Set global logging verbosity SetLogLevel(LogLevel::Off|Error|Warning|Info|Debug)
Handle SDK errors with typed codes catch(const ESdkProException&), ESdkProException::GetErrorCode()ErrorCode::{Success, General, NotFound, Invalid}
Report SDK version in logs c_eSdkProVersionStr = "1.3.0", c_eSdkProVersionMajor = 1, c_eSdkProVersionMinor = 3

Key Classes and Functions

  • ESdkProException — exception type thrown by SDK operations; retrieve reason codes with GetErrorCode().
  • ErrorCode — defines SDK error results: Success, General, NotFound, Invalid.
  • LogLevel — defines log output verbosity: Off, Error, Warning, Info, Debug.
  • SetLogLevel(LogLevel level)free function that adjusts SDK-wide log verbosity. Should be called early in program execution.
  • Version Constants — compile-time identifiers for the SDK version:
    • c_eSdkProVersionStr = "1.3.0"
    • c_eSdkProVersionMajor = 1
    • c_eSdkProVersionMinor = 3

Usage Notes

  • Call SetLogLevel() early in main().
  • Catch ESdkProException at critical boundaries.
  • Include c_eSdkProVersionStr in support logs to match builds.

Example

SetLogLevel(LogLevel::Info);
try {
    System sys = System::Create();
    sys.GetPipeline().Start();
    // ...
    sys.GetPipeline().Stop();
} catch (const ESdkProException& ex) {
    auto code = ex.GetErrorCode(); // ErrorCode::{Success,General,NotFound,Invalid}
    // log/report
}

See Also

Updated on
October 20, 2025
Questions?


Get in touch with us today and our team of imaging professionals will be pleased to assist you.

Contact Us