Interprocess Zero-Copy Image Transfer

On JetPack 4.6, we used the nvbuf_utils library to send NvBuffers between processes without copying the image (like this How to share the buffer in process context? ). We were also able to interface between NvBuffers and gstreamer ( like this Opencv gpu mat into GStreamer without downloading to cpu - #11 by fd1) and go from NvBuffer to VPI ( like this ttps:// ). It seems like going from NvBuffers to CUDA is also possible (How to process NvBuffer video data in CUDA ) but we haven’t tested this.

In JetPack 5, the nvbuf_utils library is deprecated in favor of the NvBufSurface library, but it seems like there is no way to transfer NvBufSurfaces between processes ( according to this How to share buffers across processes using jetpack 5 ). We are looking for a zero-copy way of sending images between processes and also has interoperability with gstreamer, VPI, and CUDA on JetPack 5.


1 – Is there a recommended way of doing this?

2 – It seems like the focus of the NvSci library is transfering images between processes. Is this zero-copy? Is there interoperability between NvSci and gstreamer, VPI, CUDA, and NvBufSurfaces?

3 – Although nvbuf_utils is deprecated on JetPack 5, it still compiles and runs, but no longer works with gstreamer since the nvidia gstreamer plugins now use NvBufSurface under the hood. Do you think it is feasible to just compile the older gstreamer plugins, which use nvbuf_utils, on JetPack 5 and use them? Does nvbuffer to vpi interoperability still work on JetPack 5? Does NvBuffer to cuda interoperability still work on JetPack 5?

4 - Is there a way of converting between NvBuffer objects and NvBufSurface objects?

On Jetpack 5, we use NvBufSurface and the function of sharing NvBufSurface is under development. On Jetpack 5.0.2, it is not ready yet.

Do you know when the ability to share NvBufSurfaces between processes is planned to be released?

1 Like

For now we have confirmed it will not be ready in next Jetpack 5.1 release. It is under evaluation.