nvtee ?

Can someone explain what are the difference between Nvidia own “nvtee” and regular “tee” plugins in gstreamer?
I would guess it must be a reason Nvidia came up with their own implementation of tee?


Hi albertr, nvtee supports the internal memory:NVMM type as to avoid extra memory copies between GPU<->CPU.

Thanks, Dustin! Is there any documentation available on how to use it? If I’m using “name” parameter with regular “tee” plugin in the following pipeline:

$PREFIX/bin/gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! 'video/x-raw, format=I420, width=1280, height=720, framerate=30/1' ! tee name=t \
t. ! queue ! nvvidconv ! 'video/x-raw(memory:NVMM), width=1280, height=720, format=I420, framerate=30/1'  ! nvoverlaysink sync=false -e -vvv \
t. ! queue ! omxh264enc bitrate=12000000 ! h264parse ! matroskamux ! filesink location=/tmp/test.mkv sync=false -e  -vvv

gst-inspect-1.0 nvtee says that “nvtee” has name parameter too, but if I replace “tee” with “nvtee” in the pipeline above, I’m getting the following error (which identified itself as a “warning” but terminates my pipeline nevertheless):

WARNING: erroneous pipeline: could not link v4l2src0 to t

Does it mean I cannot use nvtee with v4l2 devices?

How exactly “memory:NVMM” was implemented? Is it the same as userptr buffer allocation in gsteamer?

If v4l2src device will use userptr buffer allocation (io-mode=userptr), will it be able to work with nvtee?

Or should I put nvvidconv before nvtee so both can use “memory:NVMM” buffers?


@albertr, you may find usage in the L4T Accelerated GStreamer User Guide.

Well, I read it before. Unfortunately, it doesn’t give any description neither about nvtee nor “memory:NVMM”.


There are example pipelines in the documentation that show using nvtee, otherwise you can gst-inspect nvtee.

memory:NVMM is an internal NVIDIA memory format that is not exposed to the user, but is passed between NVIDIA gstreamer elements.

The L4T Accelerated GStreamer User Guide Can’t help me !
I use gst-inspect to see its function,it can Convert single stream to three;However, I did not find the task’s description of 1 to N. Could your engineer who wrote the nvtee plug-in give me some help or write a reference example?Otherwise more people won’t be able to use this plug-in.

We can only use the pad of “pre_src” at present. Can you tell me what conditions need to be met if other SRC pads are to be used.

I found this on a search. Is nvtee actually required to avoid a copy or is it no longer required. I just did a search for nvtee within the deepstream source and it’s not used at all, while a regular tee element is. Based on the names of the element I am guessing it was removed at some point.

Also, I don’t undrestand why it doesn’t have request pads, rather a fixed number of ‘always’ pads, and there seems to be no documentation for it in the current version of the gstreamer accelerated user’s guide. If it’s isn’t deprecated, am I supposed to put queues on the src pads like a regular tee? and which pads should I use:

  SRC: 'pre_src'
    Pad Template: 'vid_src'
  SRC: 'img_src'
    Pad Template: 'img_src'
  SRC: 'vid_src'
    Pad Template: 'pre_src'
  SRC: 'vsnap_src'
    Pad Template: 'vsnap_src'