<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hello,</p>
<p><br>
</p>
<p>Did you <span>tried </span>to:</p>
<p>1)<span style="color:rgb(33,33,33); font-size:13.3333px"> m_pipeline->setState(QGst::StatePaused);</span><br style="color:rgb(33,33,33); font-size:13.3333px">
<span style="font-size:12pt">2) wait on bus for "paused" event</span><br>
</p>
<p>3)<span style="color:rgb(33,33,33); font-size:13.3333px"> m_pipeline->setState(QGst::StatePlaying);</span></p>
<p><br>
</p>
<p>Mikl</p>
<p></p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> gstreamer-devel <gstreamer-devel-bounces@lists.freedesktop.org> on behalf of riteshSTPL <ritesh@syntronstech.com><br>
<b>Sent:</b> Tuesday, January 31, 2017 11:13:30 AM<br>
<b>To:</b> gstreamer-devel@lists.freedesktop.org<br>
<b>Subject:</b> Pause/Resume pipeline error</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">I am using qt-gstreamer 1.2 with gstreamer 1.2.4 on nVidia TX1 running Ubuntu<br>
14.04.<br>
<br>
I am having a pipeline with camera preview + recording + Ethernet Streaming<br>
+ Wifi Streaming and i want to make pipeline dynamic. ex i can add/remove<br>
recording/Streaming on running pipeline.<br>
<br>
I pause pipeline to add/remove elements and then resume without using pads<br>
and its blocking capabilities. This works fine. But pipeline hangs after<br>
several add/remove of elements. and it hangs when i paused the pipeline.<br>
<br>
I found that its Pause/Resume which hangs pipeline not Linking/Unlinking<br>
elements on pause.<br>
If i add less elements in pipeline like only adding elements required for<br>
preview and recording then pipeline hangs after long time then with all<br>
elements.<br>
<br>
All sink element sync and async are false.<br>
<br>
    m_pipeline  =   QGst::Pipeline::create();<br>
    m_source    =   QGst::ElementFactory::make("v4l2src", "v4l2src");<br>
    m_filter1   =   QGst::ElementFactory::make("capsfilter", "capsfilter");<br>
    m_convert   =   QGst::ElementFactory::make("nvvidconv", "videoconvert");<br>
    m_filter2   =   QGst::ElementFactory::make("capsfilter", "capsfilter1");<br>
    m_filter3   =   QGst::ElementFactory::make("capsfilter", "capsfilter2");<br>
    m_tee       =   QGst::ElementFactory::make("tee", "tee");<br>
    m_tee1      =   QGst::ElementFactory::make("tee", "tee1");<br>
    m_enc       =   QGst::ElementFactory::make("omxh264enc", "omxh264enc");<br>
    m_enc1      =   QGst::ElementFactory::make("omxh264enc", "omxh264enc1");<br>
    m_parse     =   QGst::ElementFactory::make("h264parse", "h264parse");<br>
    m_parse1    =   QGst::ElementFactory::make("h264parse", "h264parse1");<br>
    m_parse2    =   QGst::ElementFactory::make("h264parse", "h264parse2");<br>
    m_mux       =   QGst::ElementFactory::make("qtmux", "qtmux");<br>
    m_filesink  =   QGst::ElementFactory::make("filesink", "filesink");<br>
    m_queue1    =   QGst::ElementFactory::make("queue", "queue1");<br>
    m_queue2    =   QGst::ElementFactory::make("queue", "queue2");<br>
    m_queue3    =   QGst::ElementFactory::make("queue", "queue3");<br>
    m_queue4    =   QGst::ElementFactory::make("queue", "queue4");<br>
    m_queue5    =   QGst::ElementFactory::make("queue", "queue5");<br>
    m_queue6    =   QGst::ElementFactory::make("queue", "queue6");<br>
    m_queue7    =   QGst::ElementFactory::make("queue", "queue7");<br>
    m_queue8    =   QGst::ElementFactory::make("queue", "queue8");<br>
    m_fakesink  =   QGst::ElementFactory::make("fakesink", "fakesink");<br>
    m_rtppay1   =   QGst::ElementFactory::make("rtph264pay", "rtph264pay");<br>
    m_rtppay2   =   QGst::ElementFactory::make("rtph264pay", "rtph264pay1");<br>
    m_udpsink   =   QGst::ElementFactory::make("udpsink", "udpsink");<br>
    m_udpsink1  =   QGst::ElementFactory::make("udpsink", "udpsink1");<br>
    m_videoSink =   QGst::ElementFactory::make("nvoverlaysink", "sink");<br>
    m_tee2      =   QGst::ElementFactory::make("tee", "tee3");<br>
    m_fakesink1 =   QGst::ElementFactory::make("fakesink", "fakesink1");<br>
    m_mux1       =   QGst::ElementFactory::make("qtmux",        "qtmux1");<br>
    m_filesink1 =   QGst::ElementFactory::make("filesink", "filesink1");<br>
<br>
    m_filter1->setProperty("caps", QGst::Caps::fromString("video/x-raw,<br>
width=1920, height=1080, format=UYVY, framerate=60/1"));<br>
    m_filter2->setProperty("caps",<br>
QGst::Caps::fromString("video/x-raw(memory:NVMM), width=1920, height=1080,<br>
format=I420, framerate=60/1"));<br>
    m_filter3->setProperty("caps", QGst::Caps::fromString("video/x-h264,<br>
stream-format=(string)byte-stream"));<br>
<br>
    m_videoSink->setProperty("sync", false);<br>
    m_videoSink->setProperty("async", false);<br>
<br>
    m_pipeline->setProperty("video-sink", m_videoSink);<br>
<br>
    m_filesink->setProperty("sync", false);<br>
    m_filesink->setProperty("async", false);<br>
    m_enc->setProperty("bitrate", 19000000);<br>
    m_enc->setProperty("low-latency", 1);<br>
    m_enc->setProperty("control-rate", 2);<br>
    m_filesink->setProperty("location", "/home/ubuntu/video.mp4");<br>
    m_rtppay1->setProperty("mtu", 1400);<br>
    m_rtppay2->setProperty("mtu", 1400);<br>
<br>
    m_filesink1->setProperty("sync", false);<br>
    m_filesink1->setProperty("async", false);<br>
    m_filesink1->setProperty("location", "/home/ubuntu/video1.mp4");<br>
<br>
    m_udpsink->setProperty("port", 5000);<br>
    m_udpsink->setProperty("sync", false);<br>
    m_udpsink->setProperty("async", false);<br>
    m_udpsink->setProperty("host", "127.0.0.1");<br>
<br>
    m_udpsink1->setProperty("port", 8554);<br>
    m_udpsink1->setProperty("sync", false);<br>
    m_udpsink1->setProperty("async", false);<br>
    m_udpsink1->setProperty("host", "172.10.10.135");<br>
<br>
    m_pipeline->add(m_source, m_filter1, m_tee2, m_queue6, m_fakesink1);<br>
    m_pipeline->add(m_queue7, m_convert, m_filter2, m_tee, m_queue1,<br>
m_videoSink);<br>
    m_pipeline->add(m_queue2, m_enc, m_filter3, m_tee1, m_queue8,<br>
m_fakesink);<br>
    m_pipeline->add(m_queue3, m_parse, m_mux, m_filesink);<br>
    m_pipeline->add(m_queue4, m_parse1, m_rtppay1, m_udpsink);<br>
    m_pipeline->add(m_queue5, m_parse2, m_rtppay2, m_udpsink1);<br>
<br>
    m_pipeline->linkMany(m_source, m_filter1, m_tee2, m_queue6,<br>
m_fakesink1);<br>
    m_pipeline->linkMany(m_tee2, m_queue7, m_convert, m_filter2, m_tee,<br>
m_queue1, m_videoSink);<br>
    m_pipeline->linkMany(m_tee, m_queue2, m_enc, m_filter3, m_tee1,<br>
m_queue8, m_fakesink);<br>
    m_pipeline->linkMany(m_tee1, m_queue3, m_parse, m_mux, m_filesink);<br>
    m_pipeline->linkMany(m_tee1, m_queue4, m_parse1, m_rtppay1, m_udpsink);<br>
    m_pipeline->linkMany(m_tee1, m_queue5, m_parse2, m_rtppay2, m_udpsink1);<br>
<br>
<br>
for testing i am pause and play pipeline every *1 sec*.<br>
        m_pipeline->setState(QGst::StatePaused);<br>
        QThread::msleep(10);<br>
        m_pipeline->setState(QGst::StatePlaying);<br>
<br>
<br>
The pipeline hangs after several Pause/Resume.<br>
If i remove last 2 lines of linkmany and add the i can pause/resume more<br>
times than with all elements added.<br>
<br>
So whats the problem here?<br>
How can i pause / play pipeline efficiently? <br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/Pause-Resume-pipeline-error-tp4681663.html">
http://gstreamer-devel.966125.n4.nabble.com/Pause-Resume-pipeline-error-tp4681663.html</a><br>
Sent from the GStreamer-devel mailing list archive at Nabble.com.<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
gstreamer-devel@lists.freedesktop.org<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</div>
</span></font>
</body>
</html>