imxcompositer_g2d occasional severe video stuttering in pause/unpause
Terry Barnaby
terry1 at beam.ltd.uk
Wed Nov 9 13:40:57 UTC 2022
We are working on a video inspection system that is using an NXP IMX8MP
CPU based system that this using gstreamer for its image processing
pipeline. Generally the system is working fine but occasionally when you
pause and unpause the pipeline we get large video stuttering (frames
could take 20 seconds to update etc.).
This is using NXP gstreamer Elements as well as NXP hardware blocks and
also one of our own gstreamer elements. I know this is not the standard
gstreamer code, but I am just after some debug advice as I have now
spent a week trying to get to the bottom of the issue and maybe someone
might have some ideas/pointers.
I have got it down to a simple 'C' program example that shows the issue
after a few minutes. The basic pipeline for this is:
imxcompositor_g2d name=c sink_0::alpha=1.0 sink_1::alpha=0.5 ! queue !
waylandsink v4l2src device=/dev/video3 ! beamdeinterlace !
video/x-raw,width=720,height=576,framerate=25/1 ! c.sink_0 appsrc
name=appsrc ! c.sink_1
There is a 720x576 at 25 video stream from a CSI camera and a 720x576 at 25
overlay stream generated by an appsrc. The beamdeinterlace Element is a
very simple GstVideoFilterClass based Element that just uses a
transform_frame() function.
If this stream is paused and unpaused, sometimes the camera video stream
will have this severe stuttering while the overlay stream is unaffected
when looking at the video output from the compositor.
Adding probes to the imxcompositor_g2d sinks show that the buffer times
on both sinks are updating fine. Indeed if I tee of the stream after the
beamdeinterlace this looks fine whilst the issue is happening.
Digging down into the imxcompositor_g2d it is using gstvideoaggregator
and gstaggregator. When I add printf's to its
gst_imxcompositor_aggregate_frames() function I see that its
gst_video_aggregator_pad_get_current_buffer() call is returning the same
frame continuously when the problem occurs. So it looks like something
in the GStreamer gstvideoaggregator or gstaggregator is dropping the
camera's video frames for some reason.
Setting GST_DEBUG=imxcompositor:7 shows no obvious issues (no dropping
frame like messages).
The GStreamer being used is 1.18.0 although I suspect with a few NXP mods.
Has anyone seen this sort of behaviour with a compositor before ?
Any ideas on what may be happening and where/how to look ?
More information about the gstreamer-devel
mailing list