gst-nvmm-cpp¶
Zero-copy NVMM-native GStreamer elements for NVIDIA Jetson (Xavier, Orin): hardware-accelerated video processing, TensorRT inference graphs, and inter-process video sharing with no CPU copies on the data path. C++14 internals, C-ABI boundary to GStreamer, LGPL, no DeepStream dependency.
On Jetson the native buffer type is NvBufSurface (NVMM) — physically
contiguous, DMA-coherent memory operated on by the Tegra VIC. The stock
nvcodec plugin targets desktop GPUs and does not understand NVMM; DeepStream
does, but is heavyweight and single-process. This suite provides small
standalone elements for that memory model, including a cross-process zero-copy
NVMM transport (nvmmsink → nvmmappsrc) for which NVIDIA ships no stock
element. See Zero-copy IPC.
Elements¶
Memory & IPC — the allocator and the cross-process transport.
| Element | Role |
|---|---|
nvmmalloc |
GstAllocator for NvBufSurface; underpins the suite's buffer pools |
nvmmsink |
Publish NVMM frames to a shared pool; pass DMA-buf fds to consumers |
nvmmappsrc |
Import a producer's pool fds and read GPU memory in place |
Video processing — 2D operations on the VIC.
| Element | Role |
|---|---|
nvmmconvert |
Crop / scale / format-convert / rotate-flip |
nvmmcompositor |
Composite multiple NVMM inputs into one frame (mosaic / PiP) |
Inference & analytics — composable nodes for building inference graphs; each passes the frame through untouched and reads or attaches metadata.
| Element | Role |
|---|---|
nvmminfer |
TensorRT object detection; attaches GstNvmmDetMeta |
nvmmtracker |
IOU multi-object tracking; assigns stable tracker_ids |
nvmmofa |
Dense optical flow on the Orin OFA engine; flow rides as metadata |
nvmmfusion |
Joins detector + flow branches by PTS; computes per-object motion |
nvmmsecondaryinfer |
Cascade classifier on detected objects, with per-track caching |
nvmmdrawdet |
Renders boxes, ids, motion and classification onto the frame |
Where to start¶
- Getting started — build and run the first pipeline.
- Pipeline examples — transport, processing and encoding.
- Inference graphs — combining the analytics elements.
- Creating a new element — extend the suite with your own node.
Status¶
Validated on Jetson Xavier NX (JP5.1.2) and Orin NX (JP6); the unit/integration
suite runs on x86 CI against a mock NvBufSurface and on-device against the
real stack — see Validation & benchmarks.