[SCM] morituri/master: * morituri/common/checksum.py: * morituri/common/encode.py: * morituri/common/gstreamer.py: Move play to base class of GstPipelineTask.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:09:26 UTC 2014


The following commit has been merged in the master branch:
commit ce71bfb5c256dca3ce118c1c4fd6689414218cdf
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Mon May 23 18:02:48 2011 +0000

    	* morituri/common/checksum.py:
    	* morituri/common/encode.py:
    	* morituri/common/gstreamer.py:
    	  Move play to base class of GstPipelineTask.

diff --git a/ChangeLog b/ChangeLog
index be31a91..7d91d67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* morituri/common/checksum.py:
+	* morituri/common/encode.py:
+	* morituri/common/gstreamer.py:
+	  Move play to base class of GstPipelineTask.
+
+2011-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* morituri/common/gstreamer.py:
 	  Add a stop method and a stopped overridable handler.
 	* morituri/common/checksum.py:
diff --git a/morituri/common/checksum.py b/morituri/common/checksum.py
index d2beaef..e28e732 100644
--- a/morituri/common/checksum.py
+++ b/morituri/common/checksum.py
@@ -73,6 +73,8 @@ class ChecksumTask(gstreamer.GstPipelineTask):
 
         self.checksum = None # result
 
+    ### gstreamer.GstPipelineTask implementations
+
     def getPipelineDesc(self):
         return '''
             filesrc location="%s" !
@@ -136,6 +138,34 @@ class ChecksumTask(gstreamer.GstPipelineTask):
         #self.pipeline.set_state(gst.STATE_PLAYING)
         self.debug('scheduled setting to play')
 
+    def stopped(self):
+        if not self._last:
+            # see http://bugzilla.gnome.org/show_bug.cgi?id=578612
+            print 'ERROR: checksum: not a single buffer gotten'
+            # FIXME: instead of print, do something useful
+        else:
+            self._checksum = self._checksum % 2 ** 32
+            self.debug("last offset %r", self._last.offset)
+            last = self._last.offset + len(self._last) / 4 - 1
+            self.debug("last sample: %r", last)
+            self.debug("frame end: %r", self._frameEnd)
+            self.debug("frame length: %r", self._frameLength)
+            self.debug("checksum: %08X", self._checksum)
+            self.debug("bytes: %d", self._bytes)
+            if self._frameEnd != last:
+                print 'ERROR: did not get all frames, %d missing' % (
+                    self._frameEnd - last)
+
+        self.checksum = self._checksum
+
+    ### subclass methods
+    def do_checksum_buffer(self, buf, checksum):
+        """
+        Subclasses should implement this.
+        """
+        raise NotImplementedError
+
+    ### private methods
     def _new_buffer_cb(self, sink):
         buf = sink.emit('pull-buffer')
         gst.log('received new buffer at offset %r with length %r' % (
@@ -165,38 +195,12 @@ class ChecksumTask(gstreamer.GstPipelineTask):
             # marshall to the main thread
             self.runner.schedule(0, self.setProgress, progress)
 
-    def do_checksum_buffer(self, buf, checksum):
-        """
-        Subclasses should implement this.
-        """
-        raise NotImplementedError
-
     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('eos, scheduling stop')
         self.runner.schedule(0, self.stop)
 
-    def stopped(self):
-        if not self._last:
-            # see http://bugzilla.gnome.org/show_bug.cgi?id=578612
-            print 'ERROR: checksum: not a single buffer gotten'
-            # FIXME: instead of print, do something useful
-        else:
-            self._checksum = self._checksum % 2 ** 32
-            self.debug("last offset %r", self._last.offset)
-            last = self._last.offset + len(self._last) / 4 - 1
-            self.debug("last sample: %r", last)
-            self.debug("frame end: %r", self._frameEnd)
-            self.debug("frame length: %r", self._frameLength)
-            self.debug("checksum: %08X", self._checksum)
-            self.debug("bytes: %d", self._bytes)
-            if self._frameEnd != last:
-                print 'ERROR: did not get all frames, %d missing' % (
-                    self._frameEnd - last)
-
-        self.checksum = self._checksum
-
 class CRC32Task(ChecksumTask):
     """
     I do a simple CRC32 check.
@@ -302,13 +306,6 @@ class TRMTask(gstreamer.GstPipelineTask):
         #   gobject.timeout_add(0L, self.pipeline.set_state, gst.STATE_PLAYING)
         # would not work.
 
-        def play():
-            self.pipeline.set_state(gst.STATE_PLAYING)
-            return False
-        self.runner.schedule(0, play)
-
-        #self.pipeline.set_state(gst.STATE_PLAYING)
-        gst.debug('scheduled setting to play')
 
     # FIXME: can't move this to base class because it triggers too soon
     # in the case of checksum
diff --git a/morituri/common/encode.py b/morituri/common/encode.py
index e9a6a71..207993b 100644
--- a/morituri/common/encode.py
+++ b/morituri/common/encode.py
@@ -213,21 +213,6 @@ class EncodeTask(gstreamer.GstPipelineTask):
         srcpad = self._level.get_static_pad('src')
         srcpad.add_buffer_probe(self._probe_handler)
 
-        # FIXME: move to base class ?
-        self.debug('scheduling setting to play')
-        # since set_state returns non-False, adding it as timeout_add
-        # will repeatedly call it, and block the main loop; so
-        #   gobject.timeout_add(0L, self.pipeline.set_state, self.gst.STATE_PLAYING)
-        # would not work.
-
-        def play():
-            self.pipeline.set_state(self.gst.STATE_PLAYING)
-            return False
-        self.runner.schedule(0, play)
-
-        #self.pipeline.set_state(gst.STATE_PLAYING)
-        self.debug('scheduled setting to play')
-
     def _probe_handler(self, pad, buffer):
         # update progress based on buffer offset (expected to be in samples)
         # versus length in samples
@@ -312,21 +297,11 @@ class TagReadTask(task.Task):
         # set up tag callbacks
         bus.connect('message::tag', self._message_tag_cb)
 
-        self.debug('scheduling setting to play')
-        # since set_state returns non-False, adding it as timeout_add
-        # will repeatedly call it, and block the main loop; so
-        #   gobject.timeout_add(0L, self._pipeline.set_state, gst.STATE_PLAYING)
-        # would not work.
-
         def play():
-            self.debug('setting pipeline to play')
             self._pipeline.set_state(gst.STATE_PLAYING)
             return False
         self.runner.schedule(0, play)
 
-        #self._pipeline.set_state(gst.STATE_PLAYING)
-        self.debug('scheduled setting to play')
-
     def _message_eos_cb(self, bus, message):
         self.debug('eos, scheduling stop')
         self.runner.schedule(0, self.stop)
@@ -395,7 +370,8 @@ class TagWriteTask(task.Task):
         self.debug('scheduling setting to play')
         # since set_state returns non-False, adding it as timeout_add
         # will repeatedly call it, and block the main loop; so
-        #   gobject.timeout_add(0L, self._pipeline.set_state, gst.STATE_PLAYING)
+        #   gobject.timeout_add(0L, self._pipeline.set_state,
+        #       gst.STATE_PLAYING)
         # would not work.
 
         def play():
diff --git a/morituri/common/gstreamer.py b/morituri/common/gstreamer.py
index 4975413..1cf7b98 100644
--- a/morituri/common/gstreamer.py
+++ b/morituri/common/gstreamer.py
@@ -66,17 +66,36 @@ class GstPipelineTask(task.Task):
 
         self.parsed()
 
-        self.debug('pausing pipeline')
-        self.pipeline.set_state(self.gst.STATE_PAUSED)
+        self.debug('setting pipeline to PAUSED')
+        self.pipeline.set_state(gst.STATE_PAUSED)
+        self.debug('set pipeline to PAUSED')
         # FIXME: this can block
-        self.pipeline.get_state()
-        self.debug('paused pipeline')
+        ret = self.pipeline.get_state()
+        self.debug('got pipeline to PAUSED: %r', ret)
 
         if not self.exception:
             self.paused()
         else:
             raise self.exception
 
+        self.play()
+
+    def play(self):
+        # since set_state returns non-False, adding it as timeout_add
+        # will repeatedly call it, and block the main loop; so
+        #   gobject.timeout_add(0L, self._pipeline.set_state,
+        #       gst.STATE_PLAYING)
+        # would not work.
+        def playLater():
+            self.debug('setting pipeline to PLAYING')
+            self.pipeline.set_state(self.gst.STATE_PLAYING)
+            self.debug('set pipeline to PLAYING')
+            return False
+
+        self.debug('scheduling setting pipeline to PLAYING')
+        self.runner.schedule(0, playLater)
+
+
     def stop(self):
         self.debug('stopping')
         self.debug('setting state to NULL')

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list