CUDA IPC Texture Export
The CUDA IPC Texture Export entity shares the picture of a video entity with other applications on the same computer, directly in GPU memory. Other applications read it with GStreamer’s cudaipcsrc element, for example to run inference on the cameras that OdenVR receives without decoding the video again. The entity is available on computers with an NVIDIA GPU.
Every time the source gets a new frame, the entity scales it to the share size, converts it to NV12 (BT.709, limited range) and hands it to the readers, so the export runs at the frame rate of its source. The picture stays in GPU memory all the way.
Settings
- Source
-
The video entity to export, for example a 2D Video or one camera of a Remote Streamer.
- Share Width, Share Height
-
Size of the exported picture in pixels.
- Share Path
-
Address that readers connect to: a Unix socket path on Linux (default
/tmp/oden_0), a named pipe name on Windows (defaultoden_0). Only the connection goes through it; the picture itself is shared on the GPU. Use one path per export. - Start, Stop
-
Start or stop sharing.
- Copy Example Receive Pipeline
-
Copies a
gst-launch-1.0command that shows the export in a window. - Advanced Stats
-
Status of the export and how many of its picture buffers are free.
Reading an export
The reader needs GStreamer 1.24 or newer with the cudaipcsrc element (gstreamer1.0-plugins-bad on Ubuntu 24.04 and later) and the NVIDIA driver:
gst-launch-1.0 cudaipcsrc address=/tmp/oden_0 ! cudadownload ! videoconvert ! autovideosink
-
Put a CUDA element directly after
cudaipcsrc(cudadownload,cudaconvert,nvh264enc, …). With a non-CUDA element after it, the pipeline negotiates but no frames arrive. -
To read many exports, use one process with one pipeline that has a
cudaipcsrcbranch per export. Every reader process creates its own CUDA context, which costs GPU memory (around 300 MB on a desktop GPU).
To use exports without showing the video, run OdenVR headless, see Command Line Arguments.