We’re compositing 4 synchronised v4l2 camera sources in a Gstreamer pipeline. To improve the performance we substituted the Gstreamer ‘compositor’ element for the NVIDIA hardware accelerated ‘nvcompositor’ version.
It seems that nvcompositor doesn’t synchronise inputs from the buffer timestamps. I’ve included a screenshot showing the issue. The buffer timestamps are drawn with the gstreamer element ‘timeoverlay’
From what I understand, nvcompositor does not have synchronization capabilities, which means that you will probably need your streams to already be synchronized before composing them.
When you say:
Does this mean your cameras are already synchronized to each other?
Is it possible for you to test using nvarguscamerasrc, perhaps something like this?
We’re using a 4x GMSL camera kit for the AGX Orin which uses a single clock to drive the CSI sensor modules. I believe they are capturing synchronised because when I look at at camera frames with the same buffer timestamp, the image captured matches. Having said that, I’m not sure timeoverlay uses the v4l2 captured frame timestamp, but rather gstreamers own buffer timestamp.
In case you’re wondering why we have videorate in there, it’s because the underlying camera’s only expose 1080p60, so we’re using videorate to cut it down to 30fps.
Hi,
We know there is synchronization in gstreamer frameworks but uncertain how the sources are handled. You may need to check source code of gstreamer: