Но после установки конвейера в GST_STATE_NULL и вызова unref в конвейере память, похоже, не освобождается.
После каждого перезапуска связанная память при этом процесс продолжает увеличиваться.
Мне удалось воспроизвести проблему, используя только элементы videotestsrc-fakesink, как показано ниже:
//g++ -Wall testpage_Simple.cpp -o testpage_Simple $(pkg-config --cflags --libs gstreamer-1.0)
Код: Выделить всё
#include
GstElement *pipeline;
GstElement *src;
GstElement *sink;
void clearPipeline () {
// g_print ("clearPipeline ");
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
}
void createPipeline () {
pipeline = gst_pipeline_new ("pipelinePlay");
src = gst_element_factory_make ("videotestsrc", "source");
sink = gst_element_factory_make ("fakesink", "sink");
gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
if (gst_element_link (src, sink)!= TRUE) {
g_printerr ("src, sink could not be linked.\n");
}
gst_element_set_state (pipeline, GST_STATE_PLAYING);
}
gint main (gint argc, gchar * argv[])
{
gst_init (NULL, NULL);
system("gst-launch-1.0 --gst-version");
g_print ("Start Test - ");
// for (int i=1; i
Подробнее здесь: [url]https://stackoverflow.com/questions/61337392/memory-not-freed-after-gstreamer-pipeline-set-to-gst-state-null[/url]