High Memory and Application Stuck

adeel arshad.adeel.83 at gmail.com
Mon Oct 10 10:36:52 UTC 2016


Hi Everyone

I am facing two issues after deploying my app 

1. My app is taking too much cpu around 81% and memory around 1.5 GB
2. My app halts after sometime when put in continuous playback or in a loop

My OS is ElCap and decklink driver is 10.5 and gstreamer i am using is 1.8

The scenario is when I put a file in loop it starts from 70 Mb and then it
runs for almost 2 days. The program memory rises up to 1.5 GB

My code is as follow


GstBus *bus;
    GSource *timeout_source;
    GSource *bus_source;
    GError *error = NULL;
    //GstElement *audio_sink;
    GstElement *decklink_video_sink;
    //GstElement *deinterlace, *interlace;
    //GstElement *tee, *queue, *video_sink, *queue1;
    GstElement *video_bin, *audio_bin;
    GstElement *video_filter_bin;
    
    GST_DEBUG("Creating pipeline");
    context = g_main_context_new();
    g_main_context_push_thread_default(context);
    
    video_bin = gst_parse_bin_from_description("tee name=t t. ! queue !
autovideosink t. ! decklinkvideosink mode=3", TRUE, NULL);
    video_filter_bin = gst_parse_bin_from_description("capssetter
caps=video/x-raw,interlace-mode=interleaved", TRUE, NULL);
    audio_bin = gst_parse_bin_from_description("audioconvert !
autoaudiosink", TRUE, NULL);
    
    pipeline = gst_parse_launch("playbin", &error);
    const char *char_uri = [uri UTF8String];
    g_object_set(pipeline, "uri", char_uri, NULL);
    GST_DEBUG("URI set to %s", char_uri);
    
    g_object_set(pipeline, "video-sink", video_bin, NULL);
    g_object_set(pipeline, "video-filter", video_filter_bin, NULL);
    g_object_set(pipeline, "audio-sink", audio_bin, NULL);
    
   if(error){
    gchar *message = g_strdup_printf("Unable to build pipeline: %s",
error->message);
    g_clear_error(&error);
    NSLog(@"pipeline error %s",message);
    [self setUIMessage:message];
    g_free(message);
    return;
   }
   
   GstElement *videosink = gst_bin_get_by_interface(GST_BIN(pipeline),
GST_TYPE_VIDEO_OVERLAY);
   if(!videosink){
       GST_ERROR("Could not retrieve video sink");
       return;
   }
    
   gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videosink),
(guintptr)(id)ui_video_view);
    
    ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
    if (ret == GST_STATE_CHANGE_FAILURE) {
        NSLog(@"Unable to set the pipeline to the playing state.\n");
        gst_object_unref (pipeline);
        return;
    }
   
    bus = gst_element_get_bus(pipeline);
    bus_source = gst_bus_create_watch(bus);
    g_source_set_callback(bus_source,
(GSourceFunc)gst_bus_async_signal_func, NULL, NULL);
    g_source_attach(bus_source, context);
    g_source_unref(bus_source);
    g_signal_connect (G_OBJECT(bus), "message::error", (GCallback)error_cb,
(__bridge void *)self);
    g_signal_connect (G_OBJECT(bus), "message::eos", (GCallback)eos_cb,
(__bridge void *)self);
    g_signal_connect (G_OBJECT(bus), "message::state-changed",
(GCallback)state_changed_cb, (__bridge void *)self);
    g_signal_connect (G_OBJECT(bus), "message::duration",
(GCallback)duration_cb, (__bridge void *)self);
    g_signal_connect (G_OBJECT(bus), "message::clock-lost",
(GCallback)clock_lost_cb, (__bridge void *)self);
    g_signal_connect (pipeline, "about-to-finish",
(GCallback)prepare_next_stream, (__bridge void *)self);
    timeout_source = g_timeout_source_new(1);
    g_source_set_callback(timeout_source, (GSourceFunc)refresh_ui, (__bridge
void *)self,NULL);
    g_source_attach(timeout_source, context);
    g_source_unref(timeout_source);
    
    
    GST_DEBUG("Entering main loop...");
    main_loop = g_main_loop_new(context, FALSE);
    [self check_initializing_complete];
    g_main_loop_run(main_loop);
    GST_DEBUG("Exiting main loop...");
    g_main_loop_unref(main_loop);
    main_loop = NULL;
    
    g_main_context_pop_thread_default(context);
    g_main_context_unref(context);
    gst_object_unref (bus);
    gst_element_set_state (pipeline, GST_STATE_NULL);
    gst_object_unref (pipeline);
    
    pipeline = NULL;
    timeout_source = NULL;
    bus = NULL;
    bus_source = NULL;
    

    return;


How can handle memory

Regards
Adeel Arshad




--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/High-Memory-and-Application-Stuck-tp4680006.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list