Hi there,<br><br>I was hoping someone may be able to help me on this...I&#39;m rather stuck!<br><br>I have managed to successfully swap out bins (I found these posts particularly useful for this: <a href="http://n4.nabble.com/Dynamically-adding-and-removing-branches-of-a-tee-td973635.html">http://n4.nabble.com/Dynamically-adding-and-removing-branches-of-a-tee-td973635.html</a>, <a href="http://n4.nabble.com/Any-ways-to-add-remove-branches-to-from-a-running-pipeline-td973959.html#a973959">http://n4.nabble.com/Any-ways-to-add-remove-branches-to-from-a-running-pipeline-td973959.html#a973959</a>) however I&#39;m having a small problem playing/pausing/swapping the seperate bins.<br>
<br>I&#39;ve pasted a diagram of the test pipeline at <a href="http://pastebin.com/f15fc14a4">http://pastebin.com/f15fc14a4</a> to make it easier to see. It&#39;s basically made up of two bins linked into the videomixer element outputting to a xvimagesink. The bins are made up of a filesrc, decodebin with a tee leading to a preview xvimagesink and the bin&#39;s ghost src pad (which then leads to the videomixer). <br>
<br>What I want to be able to do is disconnect bin1 from the videomixer, pause it, play it etc (without affecting bin2 still connected to the videomixer) and then swap it back into the videomixer.<br><br>I have managed to disconnect bin1 and pause it, but when I start playing it plays from where the video would have been if I hadn&#39;t paused, not from where it was paused (I assume this is because it is using the pipeline&#39;s clock for playback which is still running for the remaining, unpaused bin???). What do I have to do to make sure it plays back from the correct place? I&#39;ve detailed the method I used to disconnect bin1 and pause/play it below.<br>
<br>Any insight into what&#39;s going on would be very helpful :)<br><br>Many thanks,<br>Nick<br><br>=============================================================<br><br>This is my method to disconnect bin1 from the videomixer:<br>
<br>1. Block bin1&#39;s source pad<br>     pad = gst_element_get_static_pad (bin1, &quot;src&quot;);<br>     gst_pad_set_blocked(pad,TRUE);<br><br>2. Unlink bin1 and videomixer and release videomixer&#39;s request pad<br>
     gst_element_unlink (bin1, mixer);<br>     gst_element_release_request_pad(mixer, mixerpad);<br><br>3. Add fakesink to pipeline and set state to READY<br>     gst_bin_add (GST_BIN (pipeline), fakesink);<br>     gst_element_set_state (fakesink, GST_STATE_READY);<br>
<br>4. Link fakesink to bin1 and set state to PLAYING<br>     gst_element_link (bin1, fakesink);<br>     gst_element_set_state (fakesink, GST_STATE_PLAYING);<br><br>5. Unblock bin1&#39;s ghost pad<br>     gst_pad_set_blocked(pad,FALSE);<br>
<br>This works fine, no problems.<br><br>Ok now I want to pause bin1 so I do:<br><br>     gst_element_set_state (fakesink, GST_STATE_PAUSED);<br>     gst_element_set_state (bin1, GST_STATE_PAUSED);<br><br>Great it&#39;s paused. Now the problem...I want to play it again.<br>
<br>     gst_element_set_state (fakesink, GST_STATE_PLAYING);<br>     gst_element_set_state (bin1, GST_STATE_PLAYING);<br><br>Instead of continuing playing from when I paused it, it plays from where it would have been if I hadn&#39;t paused it (it skips forward). I assume this is because its using the pipeline&#39;s (or the other bin&#39;s?) clock? Is this a bug? Is there a way to make sure this bin plays back from where it was paused?<br>
<br>I&#39;ve also tried putting it to the READY state instead of PAUSED. This works, but when I set it to PLAYING again the following error appears in the console 21 times, and the video plays back at a very fast rate.<br>
     (test:5682): GLib-GObject-WARNING **: invalid uninstantiatable type `&lt;invalid&gt;&#39; in cast to `GstElement&#39;<br>     (test:5682): GLib-GObject-WARNING **: invalid uninstantiatable type `&lt;invalid&gt;&#39; in cast to `GObject&#39;<br>
     (test:5682): GLib-GObject-CRITICAL **: g_object_get: assertion `G_IS_OBJECT (object)&#39; failed<br><br>