Память не освобождена после того, как конвейер gstreamer установлен в GST_STATE_NULL - PullRequest
0 голосов
/ 21 апреля 2020

Мое приложение требует, чтобы конвейер gstreamer был перезапущен несколько раз. Но после установки конвейера в GST_STATE_NULL и вызова unref в конвейере память кажется не освобожденной. После каждого перезапуска память, связанная с процессом, продолжает увеличиваться.

Мне удалось воспроизвести проблему только с элементами videotestsr c -fakesink, как показано ниже:

// g ++ -Wall testpage_Simple. cpp -o testpage_Simple $ (pkg-config --cflags --libs gstreamer-1.0)

#include <gst/gst.h> 
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<=10; i++) {
        system ("top -b -n 1 | grep testpage | awk '{print $6}'");
        createPipeline();
        clearPipeline(); 
 //   }
    g_print ("End of test !! ");
    system ("top -b -n 1 | grep testpage | awk '{print $6}'");
    gst_deinit();
    return 0; 
}

Пример выходных данных в Ubuntu 19.04 (показаны только значения столбца RES из верхней команды для этого процесса) :
GStreamer Core Library версия 1.16.1
Начало теста - 7140
Конец теста !! 8504

Мы наблюдали сходную тенденцию памяти в Ubuntu 18.04 и gstreamer 1.12.4.

Это ожидаемое поведение или я что-то упустил при очистке конвейера ??

Я проверил ссылку ниже. Похоже, похожая проблема, но этот вопрос остается без ответа
Утечка памяти GStreamer после перезапуска конвейера

Я попытался предложить кеш диска в приведенной ниже ссылке, с похожей проблемой , Но это тоже не помогло.
http://gstreamer-devel.966125.n4.nabble.com/Properly-freeing-resources-td4658631.html

...