[pitivi] SingleDecodeBin: Don't deactivate elements from a streaming thread.



commit b2d718953406df370829ed6e2abd2d80d8de04a4
Author: Edward Hervey <bilboed bilboed com>
Date:   Sat Jun 27 13:46:05 2009 +0200

    SingleDecodeBin: Don't deactivate elements from a streaming thread.
    
    This cause many issues like elements being unreffed before they were set
    to gst.STATE_NULL.
    Funnily enough... it also seems to make loading the timeline faster.

 pitivi/elements/singledecodebin.py |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/pitivi/elements/singledecodebin.py b/pitivi/elements/singledecodebin.py
index 5d80346..c93f6e2 100644
--- a/pitivi/elements/singledecodebin.py
+++ b/pitivi/elements/singledecodebin.py
@@ -282,7 +282,7 @@ class SingleDecodeBin(gst.Bin):
         if self._srcpad:
             return
         self._markValidElements(element)
-        self._removeUnusedElements(self.typefind)
+        gobject.idle_add(self._removeUnusedElements, self.typefind)
         self.log("ghosting pad %s" % pad.get_name())
         self._srcpad = gst.GhostPad("src", pad)
         self._srcpad.set_active(True)
@@ -310,12 +310,13 @@ class SingleDecodeBin(gst.Bin):
         for pad in element.src_pads():
             if pad.is_linked():
                 peer = pad.get_peer().get_parent()
-                self._removeUnusedElements(peer)
-                if not peer in self._validelements:
-                    self.log("removing %s" % peer.get_name())
-                    pad.unlink(pad.get_peer())
-                    peer.set_state(gst.STATE_NULL)
-                    self.remove(peer)
+                if isinstance(peer, gst.Element):
+                    self._removeUnusedElements(peer)
+                    if not peer in self._validelements:
+                        self.log("removing %s" % peer.get_name())
+                        pad.unlink(pad.get_peer())
+                        peer.set_state(gst.STATE_NULL)
+                        self.remove(peer)
 
     def _cleanUp(self):
         self.log("")



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]