gst-interpipe
gst-interpipe copied to clipboard
Interpipes getting locked when using NVMM + num-buffers in the sink
Here are a few pipelines to reproduce the issue
# Works
gst-launch-1.0 \
videotestsrc ! interpipesink name=video_sink \
interpipesrc listen-to=video_sink ! perf name=first_pipe ! fakesink \
interpipesrc listen-to=video_sink num-buffers=6000 ! perf name=second_pipe ! fakesink
Using nvvidconv
# Blocks after 6000 buffers
gst-launch-1.0 \
videotestsrc ! nvvidconv ! "video/x-raw(memory:NVMM)" ! interpipesink name=video_sink \
interpipesrc listen-to=video_sink ! perf name=first_pipe ! fakesink \
interpipesrc listen-to=video_sink num-buffers=6000 ! perf name=second_pipe ! fakesink
# Blocks after 6000 buffers
gst-launch-1.0 \
videotestsrc ! nvvidconv ! "video/x-raw(memory:NVMM)" ! queue leaky=2 ! interpipesink name=video_sink \
interpipesrc listen-to=video_sink ! queue leaky=2 ! perf name=first_pipe ! fakesink \
interpipesrc listen-to=video_sink num-buffers=6000 ! queue leaky=2 ! perf name=second_pipe ! fakesink
# Blocks after 6000 buffers
gst-launch-1.0 \
videotestsrc ! nvvidconv ! "video/x-raw(memory:NVMM)" ! queue leaky=2 ! interpipesink name=video_sink async=true sync=false \
interpipesrc listen-to=video_sink ! queue leaky=2 ! perf name=first_pipe ! fakesink \
interpipesrc listen-to=video_sink num-buffers=6000 ! queue leaky=2 ! perf name=second_pipe ! fakesink
Using NvArgus
# Blocks after 300 buffers
gst-launch-1.0 \
nvarguscamerasrc ! "video/x-raw(memory:NVMM)" ! queue leaky=2 ! interpipesink name=video_sink async=true sync=false \
interpipesrc listen-to=video_sink ! queue leaky=2 ! perf name=first_pipe ! fakesink \
interpipesrc listen-to=video_sink num-buffers=300 ! queue leaky=2 ! perf name=second_pipe ! fakesink```
When we found this issue we were testing using gstd, and moving the num-buffers
pipeline to stopped, unblocked the other pipeline