[SCM] morituri/master: * morituri/common/task.py: Remove queue to avoid race. Remove prints. Clean up debug. Update progress after handling buffers.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:08:43 UTC 2014


The following commit has been merged in the master branch:
commit 43acc5b6f590c613b0d5dc858d65b5e9d505cbe8
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Sat Apr 11 11:17:47 2009 +0000

    	* morituri/common/task.py:
    	  Remove queue to avoid race.
    	  Remove prints.
    	  Clean up debug.
    	  Update progress after handling buffers.

diff --git a/ChangeLog b/ChangeLog
index 0c14b05..591db18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-04-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* morituri/common/task.py:
+	  Remove queue to avoid race.
+	  Remove prints.
+	  Clean up debug.
+	  Update progress after handling buffers.
+
 2009-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* morituri/common/task.py:
diff --git a/morituri/common/task.py b/morituri/common/task.py
index 1910057..edfa43d 100644
--- a/morituri/common/task.py
+++ b/morituri/common/task.py
@@ -41,6 +41,7 @@ class Task(object):
     _listeners = None
 
     def debug(self, *args, **kwargs):
+        return
         print args, kwargs
         sys.stdout.flush()
         pass
@@ -55,7 +56,7 @@ class Task(object):
         self._notifyListeners('stop')
 
     def setProgress(self, value):
-        if value - self.progress > self.increment or value == 1.0:
+        if value - self.progress > self.increment or value >= 1.0:
             self.progress = value
             self._notifyListeners('progress', value)
             self.debug('notifying progress', value)
@@ -104,7 +105,6 @@ class CRCTask(Task):
         self._pipeline = gst.parse_launch('''
             filesrc location="%s" !
             decodebin ! audio/x-raw-int !
-            queue !
             appsink name=sink sync=False emit-signals=True''' % self._path)
         self.debug('pausing')
         self._pipeline.set_state(gst.STATE_PAUSED)
@@ -120,10 +120,9 @@ class CRCTask(Task):
             if format == gst.FORMAT_BYTES:
                 self.debug('query returned in BYTES format')
                 length /= 4
-            print 'total length', length
+            self.debug('total length', length)
             self._frameLength = length - self._frameStart
             self.debug('audio frame length is', self._frameLength)
-            print 'audio frame length is', self._frameLength
         self._frameEnd = self._frameStart + self._frameLength - 1
 
         self.debug('event')
@@ -142,9 +141,10 @@ class CRCTask(Task):
         sink.connect('new-buffer', self._new_buffer_cb)
         sink.connect('eos', self._eos_cb)
 
-        self.debug('setting to play')
-        self._pipeline.set_state(gst.STATE_PLAYING)
-        self.debug('set to play')
+        self.debug('scheduling setting to play')
+        gobject.timeout_add(0L, self._pipeline.set_state, gst.STATE_PLAYING)
+        #self._pipeline.set_state(gst.STATE_PLAYING)
+        self.debug('scheduled setting to play')
 
     def _new_buffer_cb(self, sink):
         buffer = sink.emit('pull-buffer')
@@ -170,17 +170,18 @@ class CRCTask(Task):
 #        while len(self._lake) >= (i + 1) * 2532:
 #            block = self._lake[i * 2532:(i + 1) * 2532]
 
+            self._crc = self.do_crc_buffer(buffer, self._crc)
+            self._bytes += len(buffer)
+#            i += 1
+#        if i > 0:
+#            self._lake = self._lake[i * 2532:]
+
             # update progress
             frame = self._first + self._bytes / 4
             framesDone = frame - self._frameStart
             progress = float(framesDone) / float((self._frameLength))
             self.setProgress(progress)
 
-            self._crc = self.do_crc_buffer(buffer, self._crc)
-            self._bytes += len(buffer)
-#            i += 1
-#        if i > 0:
-#            self._lake = self._lake[i * 2532:]
 
     def do_crc_buffer(self, buffer, crc):
         """
@@ -191,21 +192,30 @@ class CRCTask(Task):
     def _eos_cb(self, sink):
         # get the last one; FIXME: why does this not get to us before ?
         #self._new_buffer_cb(sink)
-        self.debug('setting state to NULL')
+        self.debug('eos, scheduling stop')
         gobject.timeout_add(0L, self.stop)
 
     def stop(self):
-        self._pipeline.set_state(gst.STATE_NULL)
         self.debug('stopping')
-        self._crc = self._crc % 2 ** 32
-        last = self._last.offset + len(self._last) / 4 - 1
-        self.debug("last sample:", last)
-        self.debug("frame length:", self._frameLength)
-        self.debug("CRC: %08X" % self._crc)
-        self.debug("bytes: %d" % self._bytes)
-        if self._frameEnd != last:
-            print 'ERROR: did not get all frames, %d missing' % (
-                self._frameEnd - last)
+        self.debug('setting state to NULL')
+        self._pipeline.set_state(gst.STATE_NULL)
+
+        if not self._last:
+            # see http://bugzilla.gnome.org/show_bug.cgi?id=578612
+            print 'ERROR: not a single buffer gotten'
+            raise
+        else:
+            self._crc = self._crc % 2 ** 32
+            last = self._last.offset + len(self._last) / 4 - 1
+            self.debug("last sample:", last)
+            self.debug("frame length:", self._frameLength)
+            self.debug("CRC: %08X" % self._crc)
+            self.debug("bytes: %d" % self._bytes)
+            if self._frameEnd != last:
+                print 'ERROR: did not get all frames, %d missing' % (
+                    self._frameEnd - last)
+
+        # publicize and stop
         self.crc = self._crc
         Task.stop(self)
 

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list