Hi all,<br><br>I spent a lot of time to pinpoint this problem and I wonder if it&#39;s a bug of QtGstreamer or not. <br>If it&#39;s not, we seriously need to make this thing more clear on the documentation and prevent others from making the same mistake as I did.<br>
<br>I wrote a VideoPlayer class to deal with video files using QtGstreamer under the hood. I was able to instantiate a VideoPlayer object and display the video with no problems. <br>Then, I tried to destroy the current player and instantiate a new one (within the same thread) to watch another video. That&#39;s when it happend: the second object failed to create it&#39;s pipeline.<br>
<br>Hours of investigation went by until I found the source of the problem: the constructor of VideoPlayer initialized the library through &quot;QGst::init();&quot; and the destructor did the opposite with &quot;QGst::cleanup();&quot;. <br>
It was my understanding that after a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/namespaceQGst.html#af854931adda54e40b759bf4f736f1cbb">cleanup()</a> operation, a call to init() would restore things back to it&#39;s operational state, but so it happens that cleanup() makes it impossible.<br>
<br>What is also strange is that calling QGst::init() after a cleanup() doesn&#39;t return any errors nor throw exceptions, which I think it should, since you can&#39;t use the library to create a new pipeline rendering it pretty much useless.<br>
<br>I wrote a small demo to reproduce this behavior:<br><br>#include &lt;QObject&gt;<br>#include &lt;QGst/Init&gt;<br>#include &lt;QGst/Pipeline&gt;<br>#include &lt;QGst/Element&gt;<br><br>int main()<br>{<br><br>    qDebug() &lt;&lt; &quot;#1 call QGst::init()&quot;;<br>
    QGst::init();<br><br>    QGst::PipelinePtr _pipeline = QGst::Pipeline::create();<br>    if (!_pipeline)<br>    {<br>        qDebug() &lt;&lt; &quot;#1 Failed creating pipeline !!!&quot;;<br>        return -1;<br>    }<br>
<br>    qDebug() &lt;&lt; &quot;#1 Setting pipeline to Playing&quot;;<br>    _pipeline-&gt;setState(QGst::StatePlaying);<br><br>    qDebug() &lt;&lt; &quot;#1 Setting pipeline to Null&quot;;<br>    _pipeline-&gt;setState(QGst::StateNull);<br>
<br>    qDebug() &lt;&lt; &quot;#1 call pipeline.clear()&quot;;<br>    _pipeline.clear();<br><br>    qDebug() &lt;&lt; &quot;#1 call QGst::cleanup()&quot;;<br>    QGst::cleanup();<br><br>    qDebug() &lt;&lt; &quot;\n* Press &lt;enter&gt; to restart the pipeline setup&quot;;<br>
    getchar();<br><br>    qDebug() &lt;&lt; &quot;#2 call QGst::init()&quot;;<br>    QGst::init();<br>    _pipeline = QGst::Pipeline::create();<br>    if (!_pipeline)<br>    {<br>        qDebug() &lt;&lt; &quot;#2 Failed creating pipeline !!!&quot;;<br>
        return -1;<br>    }<br><br>    return 0;<br>}<br><br><br>Thanks!<br>--<br>Karl Phillip<br><br><br>