Nvvideoconvert, nvstreammux and nvstreamdemux stall when using too many channels

Hardware Platform: Jetson Xavier NX on custom carrier board
DeepStream Version: 6.3
JetPack Version: 5.1.2

I have been trying to develop an application on the Jetson Xavier using a gstreamer pipeline. However, it seems to stall if I create too many instances of nvvideoconvert. I had a similar problem last year when trying to develop a 4-channel OSD application for DeepStream 6.0; the problem appeared to have been resolved under DeepStream 6.3 but it looks as if there is still a limit.

I can reproduce the problem using the following command:

gst-launch-1.0 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_0 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_1 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_2 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_3 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_4 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_5 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_6 videotestsrc ! ‘video/x-raw,width=1920,height=1080’ ! nvvideoconvert ! m.sink_7 nvstreammux name=m batch-size=1 width=1920 height=1080 ! nvdsosd display-clock=1 ! tee name=t t.src_0 ! nvmultistreamtiler ! queue ! nvegltransform ! nveglglessink sync=0 t.src_1 ! queue ! nvstreamdemux name=d d.src_0 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan0.ts d.src_1 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan1.ts d.src_2 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan2.ts d.src_3 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan3.ts d.src_4 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan4.ts d.src_5 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan5.ts d.src_6 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan6.ts d.src_7 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan7.ts

Reducing the number of recordings to 4 fixes the problem.
Reducing the number of test sources to 5 and the number of recordings to 5 fixes the problem.
Reducing the number of test sources to 6 and the number of recordings to 6 does not fix the problem.

Does DeepStream impose a limit on the number of nvvideoconvert filters that can be active at any time?

Please set the “batch-size” of nvstreammux according to the number of sources.

It works well with 8 sources and 8 recodings in my Xavier NX board.

videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_1 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_2 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_3 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_4 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_5 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_6 \
videotestsrc ! 'video/x-raw,width=1920,height=1080' ! nvvideoconvert ! m.sink_7 \
nvstreammux name=m batch-size=8 width=1920 height=1080 ! nvdsosd display-clock=1 \
! tee name=t \
t.src_0 ! nvmultistreamtiler rows=2 columns=4 ! queue ! nvegltransform ! nveglglessink sync=0 \
t.src_1 ! queue ! nvstreamdemux name=d \
d.src_0 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan0.ts \
d.src_1 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan1.ts \
d.src_2 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan2.ts \
d.src_3 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan3.ts \
d.src_4 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan4.ts \
d.src_5 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan5.ts \
d.src_6 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan6.ts \
d.src_7 ! nvvideoconvert ! nvv4l2h264enc ! mpegtsmux ! filesink location=chan7.ts

chan0.ts (38.6 MB)

chan7.ts (38.5 MB)

chan5.ts (38.6 MB)