I have a general question regarding the placement of GStreamer queues in a DeepStream pipeline. In sample pipelines in the documentation, I see in many instances that queue elements are placed at several positions within the pipeline:
- Between nvstreammux and nvinfer elements.
- Between nvinfer and nvtracker elements.
- After nvstreamdemux source pads. This is also recommended by the official documentation although no specific motivation is provided.
Based on my knowledge of gstreamer, I assume that the main utility of queue elements is to provide thread boundaries such that parts of a pipeline with differing speeds/latencies can be de-coupled. At the same time, I can imagine that excessive usage of queue elements can lead to increased memory usage and end-to-end latency.
Can you provide advice and details regarding the queue placement in DeepStream pipelines? Are there specific reasons for placing queue elements as in the 3 examples I listed above?