For debugging purposes, add a gst_deinit() call at the end of your application and then run the application with GST_TRACERS=leaks GST_DEBUG=*TRACE*:7.
If you’re lucky, it will show you what kind of (mini)object is leaked.
It could be that another kind of allocation is leaked of course, in which case you’d need to perhaps try valgrind --leak-check=yes or somesuch (there are suppression files in the GStreamer repo for GObject things etc which might be useful to cut through the noise).
I didn’t mean to suggest that it would fix the leak, but it’s required for the leak tracer to output any leaks on shutdown (unless you interact with it programmatically via the api).
Sounds like it’s something else that’s leaked then and you’ll have to investigate with valgrind or heaptrack or similar.
It might also be worth cutting down your pipeline to the bare minimum to narrow it down (remove elements at the end and replace with fakesink)
We tested it on embeded boards, linux and windows, they all show the same issue.
We checked the GST_TRACERS=leaks and did not find leaks
We measured the memory usage over time. cycles of 30 - 180
Loading HD-Video and play it for 10 second .
And we tested it with 3 versions 1.18.6, 1.22.2 and 1.24.5.
The graphs show the memory consumption 30 times every time the
pipeline_func is called
The text on the graph
befparse is the memory just before gst_parse_launch(.,.)
afterready is the memory after the pipeline is set in READY state
afterplay is the memory after PLAYED is done
statnull is the memory after state NULL
Do you have a small code example where you can reproduce this ? It may make sense to run it in valgrind, or even Valgrind’s massif tool to see where the memory is allocated.