Compositor sink stream synchronisation

Terry Barnaby terry1 at beam.ltd.uk
Wed Nov 16 15:45:39 UTC 2022


We are having a problem with NXP hardware based compositor's where 
occasionally (after pause/unpause) the pipeline gets into a state where 
the output video Buffers only contain frames from one of the compositors 
input sinks. Digging into the code it looks like the compositor (which 
uses GstVideoAggregator) is dropping buffers from the main live camera 
stream because its Buffer timestamps are before the compositors current 
output Buffer timestamps. So the compositor just uses the last camera 
Buffer it had often from 10's of seconds ago.

We have two Video frame sources a v4l2src through one of our own simple 
video deinterlacer elements to a compositor and an overlay stream coming 
from an appsrc. The CPU is only lightly used.

We have seen a harder issue with a different NXP hardware based 
compositor (no frames at all solid from the camera source) and seen some 
interesting frame drops with the standard software compositor.

Our problem may be due to our deinterlacer element somehow (latency ?) 
but it is pretty simple just a VideoFilter (GstVideoFilterClass) 
implementing a transform_frame function.

My question is how in general is gstreamer compositor frame 
synchronisation supposed to work as I can't find any info on this ?

Our v4l2src is a live video source at 30 fps and our appsrc is a non 
live source at 5 fps (although I have tried 30fps). I would have assumed 
that the compositor's output frames should be synchronised to the 
cameras live stream predominantly but this does not seem to be the case. 
It does output 30 fps but is obviously not synchronised in time to the 
cameras Buffer stream.

Terry



More information about the gstreamer-devel mailing list