gstappsr c pu sh - утечка памяти в буфере - PullRequest
0 голосов
/ 23 апреля 2020

Я столкнулся с проблемой при использовании gstappsr c pu sh -buffer, которая могла привести к утечке памяти. Я получаю внешний поток данных в функции обратного вызова need-data, а затем вызываю pu sh -buffer для pu sh потока данных, но не каждый раз, когда поступает действительный поток данных. После долгого В то время я обнаружил, что RES процесса под командой TOP росли медленно. Я полагаю, нужно ли использовать pu sh -buffer в функции обратного вызова need-data? Ниже приведен фрагмент моего кода

static gboolean cb_need_data (GstElement *appsrc, guint       unused_size, gpointer    user_data)
{
    if (condition)// condition check
    {


        static gboolean white = FALSE;
        gst_buffer_memset(buf, 0, white ? 0x00 : 0xFF, VIDEO_SIZE);
        white = !white;
        GST_BUFFER_PTS (buf) = timestamp;
        GST_BUFFER_DURATION (buf) =  gst_util_uint64_scale_int (1, GST_SECOND, FRAMERATE);
        timestamp += GST_BUFFER_DURATION (buf);
//        ret = gst_app_src_push_buffer(GST_APP_SRC(appsrc), buf);
        g_signal_emit_by_name(appsrc, "push-buffer", buf, &ret);
        gst_buffer_unref(buf);
        if (ret != GST_FLOW_OK)
        {
            g_print("gst flow is not ok !\n");
            ok = FALSE;
        }
        return ok;
    }
    return TRUE;
}

static void start_feed(GstElement *appsrc, guint size, gpointer data)
{
    //g_print("start_feed\n");

    guint ret = g_idle_add((GSourceFunc)cb_need_data, appsrc);
}

gint main(gint argc, gchar* argv[])
{
.....
    g_signal_connect (appsrc, "need-data", G_CALLBACK (start_feed), NULL);
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
 g_main_loop_run (loop);gg
.....
}
...