msmith - in flumotion/branches/platform-3: . flumotion/component/base flumotion/component/producers/playlist

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Wed Jul 4 16:48:53 CEST 2007


Author: msmith
Date: Wed Jul  4 16:48:48 2007
New Revision: 5300

Modified:
   flumotion/branches/platform-3/ChangeLog
   flumotion/branches/platform-3/flumotion/component/base/watcher.py
   flumotion/branches/platform-3/flumotion/component/producers/playlist/playlist.py
   flumotion/branches/platform-3/flumotion/component/producers/playlist/playlistparser.py
Log:
        * flumotion/component/base/watcher.py:
        * flumotion/component/producers/playlist/playlist.py:
        * flumotion/component/producers/playlist/playlistparser.py:
          Backport r5296, r5298: fixes to playlist producer unscheduling
          items.



Modified: flumotion/branches/platform-3/ChangeLog
==============================================================================
--- flumotion/branches/platform-3/ChangeLog	(original)
+++ flumotion/branches/platform-3/ChangeLog	Wed Jul  4 16:48:48 2007
@@ -1,3 +1,11 @@
+2007-07-04  Michael Smith <msmith at fluendo.com>
+
+	* flumotion/component/base/watcher.py:
+	* flumotion/component/producers/playlist/playlist.py:
+	* flumotion/component/producers/playlist/playlistparser.py:
+	  Backport r5296, r5298: fixes to playlist producer unscheduling
+	  items.
+
 2007-07-03  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
 
 	* flumotion/admin/admin.py (AdminModel.disconnected,

Modified: flumotion/branches/platform-3/flumotion/component/base/watcher.py
==============================================================================
--- flumotion/branches/platform-3/flumotion/component/base/watcher.py	(original)
+++ flumotion/branches/platform-3/flumotion/component/base/watcher.py	Wed Jul  4 16:48:48 2007
@@ -160,7 +160,7 @@
                 stat = os.stat(f)
                 ret[f] = (stat.st_mtime, stat.st_size)
             except OSError, e:
-                self.debug('could not read file %f: %s', f,
+                self.debug('could not read file %s: %s', f,
                            log.getExceptionMessage(e))
         return ret
 

Modified: flumotion/branches/platform-3/flumotion/component/producers/playlist/playlist.py
==============================================================================
--- flumotion/branches/platform-3/flumotion/component/producers/playlist/playlist.py	(original)
+++ flumotion/branches/platform-3/flumotion/component/producers/playlist/playlist.py	Wed Jul  4 16:48:48 2007
@@ -246,7 +246,7 @@
         if start < neareststarttime:
             if start + item.duration < neareststarttime:
                 self.debug("Item too late; skipping entirely")
-                return
+                return False
             else:
                 change = neareststarttime - start
                 self.debug("Starting item with offset %d", change)
@@ -276,14 +276,15 @@
             self.audiocomp.add(asrc)
             self._asrcs[item] = asrc
         self.debug("Done scheduling")
+        return True
 
     def unscheduleItem(self, item):
         self.debug("Unscheduling item at uri %s", item.uri)
-        if self._hasVideo and item.hasVideo:
+        if self._hasVideo and item.hasVideo and item in self._vsrcs:
             vsrc = self._vsrcs.pop(item)
             self.videocomp.remove(vsrc)
             vsrc.set_state(gst.STATE_NULL)
-        if self._hasAudio and item.hasAudio: 
+        if self._hasAudio and item.hasAudio and item in self._asrcs: 
             asrc = self._asrcs.pop(item)
             self.audiocomp.remove(asrc)
             asrc.set_state(gst.STATE_NULL)

Modified: flumotion/branches/platform-3/flumotion/component/producers/playlist/playlistparser.py
==============================================================================
--- flumotion/branches/platform-3/flumotion/component/producers/playlist/playlistparser.py	(original)
+++ flumotion/branches/platform-3/flumotion/component/producers/playlist/playlistparser.py	Wed Jul  4 16:48:48 2007
@@ -87,13 +87,7 @@
                     current.duration):
                 self.debug("Not removing current item!")
                 continue
-            if item.prev:
-                item.prev.next = item.next
-            else:
-                self.items = item.next
-
-            if item.next:
-                item.next.prev = item.prev
+            self.unlinkItem(item)
             self.producer.unscheduleItem(item)
 
         del self._itemsById[id]
@@ -181,10 +175,23 @@
             self.producer.adjustItemScheduling(next)
 
         # Then we need to actually add newitem into the gnonlin timeline
-        self.producer.scheduleItem(newitem)
+        if not self.producer.scheduleItem(newitem):
+            self.debug("Failed to schedule item, unlinking")
+            # Failed to schedule it. 
+            self.unlinkItem(newitem)
+            return None
 
         return newitem
 
+    def unlinkItem(self, item):
+        if item.prev:
+            item.prev.next = item.next
+        else:
+            self.items = item.next
+
+        if item.next:
+            item.next.prev = item.prev
+
 class PlaylistParser(object, log.Loggable):
     def __init__(self, playlist):
         self.playlist = playlist


More information about the flumotion-commit mailing list