SIPLCaptureOp
🚧 Documentation is under development
The Holoscan SDK guide is currently under active development. Some sections may be incomplete or change without notice.
Questions? Contact RidgeRun or email to support@ridgerun.com.
-
Overview
-
Build, Run, and Validate
-
Core Concepts
-
Operators and Graphs
-
Tensor Data and Memory
-
Interprocess Communication
-
-
Application and Operator Development
- Building an HSDK Application
- Writing a Minimal Operator
- Typed Parameters and Configuration
- Reading, Writing, and Forwarding Data
- Writing Tensor Operators
- Complete Operator Patterns
- Authoring Runtime Behavior
- Runtime Parameter Updates
- Lifecycle Callbacks and Restart Control
- Performance and Debugging
- SDK Source Map
-
Operator Reference
-
Core Operators
-
Holoscan Camera
-
Holoscan RidgeRun
- Overview
- Build and Installation
- ArgusCameraOp
- V4L2SourceOp
- V4L2UserPtrSourceOp
- BgraToPlanarTensorOp
- RawBayerToBgraOp
- RawBayerToYoloTensorOp
- YuyvToBgraOp
- TensorRtInferenceOp
- DrmDisplayOp
- DrmBgraDisplayOp
- X11DisplayOp
- CudaCompositorOp
- DepthColorizerOp
- FakesinkOp
- FrameSkipperOp
- InterprocessSrcOp
- TestPatternOp
-
-
Migration from Holoscan 4.x
-
Examples
-
Core
-
Holoscan Camera
-
Holoscan RidgeRun
-
-
Benchmark and Use Cases
-
Holoscan vs GStreamer
- Overview
-
Capture and Display
-
Capture and Inference
- Compare the workloads
- Implemented Applications
- Framework Selection
- Interprocess
-
SIPLCaptureOp
SIPLCaptureOp publishes an image and matching sensor metadata from an NvSIPL-managed camera rig. A shared SIPLCaptureService describes the rig, so several operators can use the same service while selecting different camera indices.
Include <sipl_capture_op/sipl_capture_op.hpp> and <sipl_capture_op/sipl_capture_service.hpp>. Link holoscan::sipl_capture_op and build the SIPL path with Build and Installation. The target also needs the matching SIPL/NvSci runtime and camera configuration.
Input arguments
Create one service for the rig and pass it to each operator that should use that rig.
| Service argument | Default | Meaning |
|---|---|---|
camera_config
|
None | SIPL camera configuration name, for example VB1940.
|
json_config
|
None | Platform JSON file describing the connected rig. |
raw_output
|
None | true requests RAW10 Bayer output; false requests NV12 ISP output.
|
capture_queue_depth
|
4
|
Capture queue depth used by the service. |
nito_base_path
|
/var/nvidia/nvcam/settings/sipl
|
Directory containing the camera tuning data. |
timeout_us
|
1000000
|
Capture wait timeout in microseconds. |
cuda_device
|
0
|
CUDA device used when the service imports camera buffers. |
The service constructor takes these arguments in the order shown above. The operator constructor takes a shared service, a zero-based camera_index, and an output MemoryKind. Its default is kCudaDevice; kHost and kPinnedHost are also supported.
Ports and data contract
The frame port uses the SDK's ImageT schema. The sensor port uses the module's SIPLFrameMetadata schema.
| Port | Memory | Queue | Trigger | Contract |
|---|---|---|---|---|
frame
|
Selected by the operator's memory_kind: host, pinned host, or CUDA device.
|
At most one image emission per activation. Capture buffering is managed by the service. | Notification when a new camera frame is available. | ImageT containing supported RAW10 Bayer packing or NV12 image bytes. CUDA output requires an explicit device binding; host output does not.
|
sensor_data
|
Host serialized sensor metadata. | At most one metadata emission per activation. | The same frame-ready notification as frame.
|
SIPLFrameMetadataT with sequence, capture timing, and valid sensor fields when supplied by the camera.
|
The two outputs are correlated by their sample and frame sequence. A metadata publication failure does not turn the image bytes into a different format, so consumers should check the outputs they require.
Image formats and metadata
raw_output=true publishes RAW10 using the module's custom image encoding. Each 32-bit word contains three 10-bit samples and two padding bits. Row pitch includes alignment, and the published byte span represents the active image rows after embedded top rows have been removed. The Bayer phase is carried in the camera information and metadata, not in the custom encoding name alone.
raw_output=false publishes NV12. Use the descriptor's plane offsets and strides when locating the UV plane. Do not assume tightly packed Y rows or that the UV plane begins immediately after a tightly packed Y image.
Capture time is derived from the sensor's start-of-integration counter when it is valid and can be projected to the graph clock. Sequence gaps or camera-reported drops mark the sample degraded. Sensor errors mark it invalid. Check the validity flags in SIPLFrameMetadataT before using exposure, gain, temperature, or white-balance fields.
Example
This fragment creates one service and one host-memory camera operator. The JSON path must match the attached rig:
#include <memory>
#include <holoscan/core/graph.hpp>
#include <sipl_capture_op/sipl_capture_op.hpp>
#include <sipl_capture_op/sipl_capture_service.hpp>
holoscan::Graph graph{"capture"};
auto service = std::make_shared<holoscan::holoscan_camera::SIPLCaptureService>(
"VB1940", "/workspace/holoscan_camera/applications/config/sipl/vb1940_single.json",
true);
auto camera = graph.op<holoscan::holoscan_camera::SIPLCaptureOp>(
"camera", service, 0U, holoscan::MemoryKind::kHost);
For two cameras, construct two operators with the same service and camera indices 0 and 1. Continue with SIPL Frame Saver Example or SIPL Stereo Monitor Example after the platform configuration is ready.
Build
Follow Build and Installation for the module build and runtime prerequisites. Use the SIPL Frame Saver Example and SIPL Stereo Monitor Example pages for platform JSON paths, camera indices, and container mounts.