Hololink CSI to Bayer GPU-Resident Operator#
Authors: Holoscan Team (NVIDIA)
Supported platforms: aarch64
Language: C++
Last modified: March 13, 2026
Latest version: 0.1.0
Minimum Holoscan SDK version: 4.0.0
Tested Holoscan SDK versions: 4.0.0
Contribution metric: Level 1 - Highly Reliable
This operator converts CSI (Camera Serial Interface) packed data to Bayer format using GPU-resident processing. It supports RAW8, RAW10, and RAW12 pixel formats.
Overview#
The CsiToBayerGpuResidentOp is a GPU-resident Holoscan operator that:
- Receives packed CSI data from camera sensors
- Unpacks the data to 16-bit Bayer format
- Operates entirely on GPU memory for low-latency processing
Requirements#
- Holoscan SDK 4.0.0 or later
- Holoscan Sensor Bridge ("Hololink") library installed and available
- CUDA-capable GPU
Usage#
C++#
#include <csi_to_bayer_gpu_resident/csi_to_bayer_gpu_resident.hpp>
// In your application setup:
auto csi_to_bayer = make_operator<hololink::operators::CsiToBayerGpuResidentOp>("csi_to_bayer");
// Configure the operator before initialization
csi_to_bayer->configure(
start_byte, // Offset to first pixel data
bytes_per_line, // Bytes per line in CSI data
pixel_width, // Image width in pixels
pixel_height, // Image height in pixels
pixel_format, // hololink::csi::PixelFormat::RAW_8/RAW_10/RAW_12
trailing_bytes // Trailing bytes after image data
);
// Add to your pipeline
add_flow(receiver, csi_to_bayer, ('out', 'in'));
add_flow(csi_to_bayer, next_operator, ('out', 'in'));
Supported Pixel Formats#
RAW_8: 8-bit raw data, unpacked to 16-bit (upper 8 bits)RAW_10: 10-bit raw data (4 pixels packed in 5 bytes), unpacked to 16-bitRAW_12: 12-bit raw data (2 pixels packed in 3 bytes), unpacked to 16-bit
Build#
This operator is built as part of the HoloHub build system:
./run build csi_to_bayer_gpu_resident
Dependencies#
hololink::core- Core hololink libraryhololink::common- Common hololink utilities (CUDA helpers)holoscan::core- Holoscan SDKfmt- Formatting libraryCUDA- CUDA driver API
API Reference#
C++#
hololink::operators::CsiToBayerConverterBase#
Inherits from: hololink::csi::CsiConverter
Base CSI-to-Bayer conversion state and CsiConverter implementation. Used by both CsiToBayerOp and CsiToBayerGpuResidentOp to avoid code duplication.
Methods#
| Method | Description |
|---|---|
uint32_t receiver_start_byte() override |
|
uint32_t received_line_bytes(uint32_t line_bytes) override |
|
uint32_t transmitted_line_bytes(hololink::csi::PixelFormat pixel_format, uint32_t pixel_width) override |
|
void configure(uint32_t start_byte, uint32_t bytes_per_line, uint32_t pixel_width, uint32_t pixel_height, hololink::csi::PixelFormat pixel_format, uint32_t trailing_bytes) override |
|
size_t get_csi_length() const |
|
size_t get_frame_size() const |
hololink::operators::CsiToBayerGpuResidentOp#
Inherits from: holoscan::GPUResidentOperator, hololink::operators::CsiToBayerConverterBase
Methods#
| Method | Description |
|---|---|
void setup(holoscan::OperatorSpec &spec) override |
|
void initialize() override |
|
void stop() override |
|
void compute(holoscan::InputContext &, holoscan::OutputContext &, holoscan::ExecutionContext &) override |