The sipl_coe_unit_sample application demonstrates the use of the SIPL (Safe Image Processing Library) Camera API with both Camera over Ethernet (CoE) and GMSL camera transports. It supports multi-sensor configurations — all discovered sensors are initialized, streamed, and composited into a single EGL preview window.
The application provides:
NvBufSurfTransformMultiInputBufCompositeBlendSetReadyFrameCallback for isolated frame deliverySupported camera configurations:
Important Notes:
-m (link-mask) option is required to select active deserializer linksvb1940_*.json) are provided in /var/nvidia/nvcam/settings/sipl//var/nvidia/nvcam/settings/sipl/ (or NITO_PATH env)For comprehensive SIPL framework documentation, architecture details, UDDF driver development, and JSON configuration guides, see the Camera Development section of the Jetson Linux Developer Guide.
$ cd /usr/src/jetson_multimedia_api/samples/unittest_samples/sipl_coe_unit_sample $ make
$ ./sipl_coe_unit_sample [OPTIONS]
The captured preview stream displays over HDMI when rendering is enabled. For multi-sensor configurations, all sensors are composited into a single grid-layout window.
CoE (single sensor):
$ ./sipl_coe_unit_sample -c VB1940 -json /var/nvidia/nvcam/settings/sipl/vb1940_1.json
CoE (dual sensor with file output):
$ ./sipl_coe_unit_sample -c VB1940 -json /var/nvidia/nvcam/settings/sipl/vb1940_0.json -o capture.yuv
GMSL (Hawk stereo — 2 sensors):
$ ./sipl_coe_unit_sample -c NOVA0 -m 0001
GMSL with timeout and headless mode:
$ ./sipl_coe_unit_sample -c NOVA0 -m 0001 -t 5 --disable-rendering
GMSL with JSON override:
$ ./sipl_coe_unit_sample -c NOVA0 -json /path/to/nova0.json -m 0001
Platform config (required):
-c <name> Config name for GetSensorSystemConfig (e.g., 'NOVA0', 'VB1940')
Config source (at least one required):
-json <path> JSON config file (CoE or GMSL). Optional if database has the config.
GMSL options:
-m <mask> Link enable mask in hex (e.g., '0001'). Required for GMSL.
Space-separated for multiple transports (e.g., '0001 0001').
General options:
-o <filename> Output file for captured frames from sensor 0 (optional) -t, --timeout <s> Capture timeout in seconds (optional) --disable-rendering Disable EGL rendering (optional) --window-x <x> Window X position (optional) --window-y <y> Window Y position (optional) --window-width <w> Window width (optional) --window-height <h> Window height (optional) -h, --help Display help message
$ ./sipl_coe_unit_sample -h
The following steps show the flow through this sample:
NvSiplCameraInterface and configure via SetSiplCameraConfig().SetupCameraSystemConfig() calls ParseDatabase() → ParseJsonFile() → GetSensorSystemConfig() → ApplyMask() (GMSL only).Initialize() calls SetPlatformCfg() → SetPipelineCfg() per sensor → Init().SetupICPBuffers(i, 4) — ICP buffer allocationSetupISPBuffers(i, 4, true) — ISP buffer allocation with Block Linear outputRegisterAutoControlPlugin(i) — NITO-based AE/AWBSetReadyFrameCallback(i, ...) — per-sensor frame callbackSetEventCallback(i, ...) — per-sensor event callbackNvBufSurfTransformMultiInputBufCompositeBlend parametersStartCapture() — all sensors start streaming together.ProcessReadyFrame() callback:SaveFrameToFile()StopCapture() → PrintStatistics() → cleanup all resources.The application supports preview mode (EGL composite rendering), headless mode (--disable-rendering), and file capture (-o) operations.
The sample uses the following key classes and structures:
| Element | Description |
|---|---|
| NvSiplFrame | Structure containing frame data with NvBufSurface, dimensions, and metadata. |
| NvSiplCameraInterface | High-level interface for SIPL camera operations (CoE + GMSL, multi-sensor). |
| NvSiplCameraConfig | Configuration structure with platform name, JSON path, link masks, and pipeline options. |
| Classes | Description |
|---|---|
| class NvSiplCameraInterface | Main camera interface class providing unified CoE/GMSL multi-sensor abstraction. |
| class NvEglRenderer | EGL-based rendering class for composite frame preview. |
| class NvNvSciBufHelper | Helper class for NvSci buffer management and synchronization. |
NvSiplCameraInterface key methods used in the sample:
| NvSiplCameraInterface | Description |
|---|---|
| SetSiplCameraConfig | Set camera configuration before initialization. |
| SetupCameraSystemConfig | Discover sensors via SIPL Query API (ParseDatabase → ParseJsonFile → GetSensorSystemConfig → ApplyMask). |
| Initialize | Initialize all discovered sensors (SetPlatformCfg → SetPipelineCfg → Init). |
| GetNumSensors | Get the number of discovered sensors. |
| SetupICPBuffers | Configure Image Capture Processor buffers for a sensor. |
| SetupISPBuffers | Configure Image Signal Processor buffers for a sensor. |
| RegisterAutoControlPlugin | Register AE/AWB plugin with NITO calibration for a sensor. |
| SetReadyFrameCallback | Register per-sensor callback for processed ISP0 frames. |
| SetEventCallback | Register per-sensor callback for pipeline events. |
| StartCapture | Start capture for all sensors. |
| StopCapture | Stop capture for all sensors. |
| SaveFrameToFile | Save captured frame data to file. |
| PrintStatistics | Display capture performance statistics. |
| GetSensorSystemConfig | Get the discovered sensor system config (for resolution/layout). |
Key application functions:
| Function | Description |
|---|---|
| ProcessReadyFrame | Per-sensor callback: VIC transform → composite blend → EGL render. |
| OnEventReceived | Per-sensor callback for pipeline notifications. |
| ComputeGridLayout | Compute grid columns/rows for multi-sensor composite display. |
| parse_link_mask | Parse hex link-mask string into vector of uint32_t masks. |
| SignalHandler | Signal handler for graceful application termination. |
| TimeoutHandler | Timer-based automatic capture termination. |
| ShowHelp | Display application usage information. |
JSON Configuration Elements (CoE):
| JSON Section | Description |
|---|---|
| cameraConfigs | Array of camera configuration objects (name, type, MAC/IP, HSB ID). |
| transportSettings | Network transport configuration (interface name, IP, VLAN, HSB ID). |
| sensorInfo | Sensor-specific information including resolution and frame rate. |
| CoECamera | Camera over Ethernet settings including MAC/IP addresses. |
Frame Processing Flow (multi-sensor):
SetReadyFrameCallbackProcessReadyFrame performs VIC transform: SIPL buffer → per-sensor staging NvBufSurfaceNvBufSurfTransformMultiInputBufCompositeBlend composites all staging buffers into a single output surfaceNvEglRenderer::render()SaveFrameToFile()