Dynamic-Pipeline ( Vidoetestsrc element works but Filesink element fails )

Luis de Bethencourt luisbg at osg.samsung.com
Thu Dec 10 11:43:32 PST 2015


Ashish Kumar Mishra writes:

> Hi All ,
>
> static GstPadProbeReturn eos_cb (GstPad * pad, GstPadProbeInfo *
> info,gpointer user_data)
> {
>   gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
>
>  gst_element_set_state (mux, GST_STATE_NULL);
>   gst_element_set_state (filesink, GST_STATE_NULL);
>
>   gst_bin_remove (GST_BIN (pipeline), filesink);
>   gst_bin_remove (GST_BIN (pipeline), mux);
>
>   gst_object_unref (filesink);
>   gst_object_unref (mux);
>
>   mux = gst_element_factory_make("avimux",NULL);
>
>   filesink = gst_element_factory_make ("filesink", NULL);
>   attempt = attempt+1;
>   sprintf( buffer, "test_%d.avi" , attempt);
>   g_object_set(G_OBJECT (filesink),"location", buffer, NULL);
>
>   gst_bin_add_many (GST_BIN (pipeline),mux,filesink, NULL);
>
>   if (!gst_element_link_many (mux,filesink, NULL)) {
> 	    g_print ("[APP]: Failed to link STATIC_2 Pad's of elements");
> 	    return -3;
>   }
>
>   muxsinkpad = gst_element_get_request_pad (mux, "video_%u");
>
>   if (!gst_element_link_many (q1, mux,NULL )) {
> 	    g_print ("[APP]: Failed to link DYNAMIC Pad's of elements");
> 	    return -3;
>   }
>
>   muxsrcpad   = gst_element_get_static_pad (mux,"src");
>   filesinkpad = gst_element_get_static_pad (filesink,"sink");
>   q1sinkpad   = gst_element_get_static_pad (filesink,"sink");
>
>   gst_element_set_state (filesink , GST_STATE_PLAYING);
>   gst_element_set_state (mux     , GST_STATE_PLAYING);
>
>   newfile = NO_NEW_FILE;
>
>   return GST_PAD_PROBE_DROP;
>
> }
>
>
> static GstPadProbeReturn pad_probe_cb (GstPad * pad, GstPadProbeInfo * info,
> gpointer user_data)
> {
>
>   gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
>   gst_pad_add_probe  (muxsrcpad,GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, eos_cb,
> user_data, NULL);
>   gst_pad_send_event (muxsinkpad, gst_event_new_eos ());
>
>   // Wait til the EOS have been processed
>   while(newfile != NO_NEW_FILE)
> 	sleep(1);
>
>  return GST_PAD_PROBE_OK;
>
> } // End brace of pad_probe_cb
>
>
> static gboolean timeout_cb (gpointer user_data)
> {
>
>   timer_count=timer_count+1;
>   newfile = NEW_FILE;
> gst_pad_add_probe (q1sinkpad,
> GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,pad_probe_cb, user_data, NULL);
>
>   if ( timer_count == 10 ){
>  	return FALSE;
>   }
>
>   return TRUE;
> } // End brace of "timeout_cb"
>
>
>
> ** (dynamic-filter:3227): CRITICAL **: gst_collect_pads_pop: assertion
> 'GST_IS_COLLECT_PADS (pads)' failed
>
> (dynamic-filter:3227): GStreamer-CRITICAL **: gst_object_unref: assertion
> '((GObject *) object)->ref_count > 0' failed
>
>
> Could group member let me know cause of the problem
> or
> Share a code snip of changing MUX + FILESINK at run time .
>
> Thanks ,
> Ashish


Something is calling gst_collect_pads_pop() and failing defined in:
gstreamer/libs/gst/base/gstcollectpads.c

It would be easier if you generated a full GST_DEBUG log.

Enjoy,
Luis


More information about the gstreamer-devel mailing list