<div dir="ltr"><div dir="ltr"><div dir="ltr">I don't have an answer for you (I am not an expert) but I would suggest using the function <b>gst_debug_bin_to_dot_data(m_pPipeline, GST_DEBUG_GRAPH_SHOW_ALL)</b> to save a dot file of the pipeline graph at the point where it gets stuck. You can use graphviz to convert the file to an SVG which will allow you to look at the graph.</div><div dir="ltr"><br></div><div>You might consider comparing the two graphs.</div><div><ol><li>After your problematic pipeline gets stuck (this probably happens during the attempted transition READY --> PAUSED).</li><li>After your working pipeline successfully transitions to PAUSED.</li></ol><div>You will probably notice a difference in the graphs. Either there will be a missing link in the first graph, or you will see that caps didn't get negotiated properly ... or something like that. It should provide a hint about what is wrong.</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 16, 2019 at 2:57 AM Duchassin Frederic <<a href="mailto:duchassin@sefram.fr">duchassin@sefram.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
This is a code snippets of my application :<br>
<br>
// Firstly, i link my scanning branch :<br>
<br>
/* CreateGstreamer element */<br>
m_pQueueTsParse = gst_element_factory_make("queue", "queueTsParse");<br>
g_object_set(G_OBJECT(m_pQueueTsParse), "max-size-buffers", <br>
(guint)0, NULL);<br>
g_object_set(G_OBJECT(m_pQueueTsParse), "max-size-bytes", <br>
(guint)0, NULL);<br>
g_object_set(G_OBJECT(m_pQueueTsParse), "max-size-time", <br>
(guint64)0, NULL);<br>
<br>
m_pTsparse = gst_element_factory_make("tsparse", "tsparse");<br>
m_pFakesink = gst_element_factory_make("fakesink", "fakesink");<br>
g_object_set(G_OBJECT(m_pFakesink), "async", false, NULL);<br>
<br>
/*add gstelement to pipeline bin*/<br>
gst_bin_add_many(GST_BIN(m_pPipeline), m_pQueueTsParse, <br>
m_pTsparse, m_pFakesink, NULL);<br>
<br>
/*link element*/<br>
gst_element_link_many(m_pTee, m_pQueueTsParse, m_pTsparse, <br>
m_pFakesink, NULL);<br>
<br>
// Secondly, i link my playing branch :<br>
<br>
m_pDecodebin = gst_element_factory_make("decodebin", "decodebin1");<br>
g_object_set(G_OBJECT(m_pDecodebin), "max-size-buffers", (guint) <br>
0, NULL);<br>
g_object_set(G_OBJECT(m_pDecodebin), "max-size-bytes", (guint) <br>
100000000, NULL);<br>
g_object_set(G_OBJECT(m_pDecodebin), "max-size-time", (guint64) <br>
0, NULL);<br>
<br>
m_pVideoqueue = gst_element_factory_make("queue", "queueVideo");<br>
m_pVideosink = gst_element_factory_make("kmssink", "kmssink1");<br>
g_object_set(G_OBJECT(m_pVideosink), "max-lateness", (gint64) <br>
200000000, NULL);<br>
//m_pVideosink = gst_element_factory_make("waylandsink", <br>
"waylandsink1");<br>
<br>
m_pAudioqueue = gst_element_factory_make("queue", "queueAudio");<br>
g_object_set(G_OBJECT(m_pAudioqueue), "max-size-time", (guint64) <br>
10000000000, NULL);<br>
g_object_set(G_OBJECT(m_pAudioqueue), "max-size-buffers", <br>
(guint64) 2000, NULL);<br>
<br>
m_pAudioConvert = gst_element_factory_make("audioconvert", <br>
"audioconvert1");<br>
m_pAudiosink = gst_element_factory_make("alsasink", "alsasink1");<br>
<br>
//CB for dynamic link<br>
g_signal_connect (m_pDecodebin, "autoplug-select", G_CALLBACK <br>
(cb_autoplug_select_decodebin), this);<br>
g_signal_connect (m_pDecodebin, "pad-added", G_CALLBACK <br>
(cb_new_pad_decodebin), this);<br>
g_signal_connect (m_pDecodebin, "element-added", G_CALLBACK <br>
(cb_element_added_decodebin), this);<br>
g_signal_connect (m_pDecodebin, "autoplug-continue", G_CALLBACK <br>
(cb_autoplug_continue_decodebin), this);<br>
<br>
/*add gstelement to pipeline bin*/<br>
gst_bin_add_many(GST_BIN(m_pPipeline), m_pDecodebin, <br>
m_pVideoqueue, m_pVideosink, m_pAudioqueue, m_pAudioConvert, <br>
m_pAudiosink, NULL);<br>
<br>
/*link element*/<br>
gst_element_link_many(m_pTee, m_pDecodebin, NULL);<br>
gst_element_link_many(m_pVideoqueue, m_pVideosink, NULL);<br>
gst_element_link_many(m_pAudioqueue, m_pAudioConvert, <br>
m_pAudiosink, NULL);<br>
<br>
<br>
// And finally, i play the pipeline :<br>
<br>
gst_element_set_state(m_pPipeline, GST_STATE_PLAYING);<br>
<br>
<br>
--> as a result, my pipeline is blocked in prerolling state.....and i <br>
don't really understand why.<br>
<br>
But If i link my scan branch after the playing branch, it magically works !<br>
<br>
Is somebody could explain me why ?<br>
<br>
<br>
BR<br>
<br>
Frédéric<br>
<br>
<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a></blockquote></div>