[SCM] morituri/master: * task.py: Better logging when scheduling. * gstreamer.py: If paused() returns True, don't go to playing. add a method for querying duration in the common case.
js at users.alioth.debian.org
js at users.alioth.debian.org
Sun Oct 19 20:09:34 UTC 2014
The following commit has been merged in the master branch:
commit fdbaa33b1f414c7501b8fa7e3a49fc487f8c80be
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Mon Aug 15 10:25:55 2011 +0000
* task.py:
Better logging when scheduling.
* gstreamer.py:
If paused() returns True, don't go to playing.
add a method for querying duration in the common case.
diff --git a/morituri/extern/task/ChangeLog b/morituri/extern/task/ChangeLog
index 0f72e8a..9845dc1 100644
--- a/morituri/extern/task/ChangeLog
+++ b/morituri/extern/task/ChangeLog
@@ -1,3 +1,11 @@
+2011-08-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * task.py:
+ Better logging when scheduling.
+ * gstreamer.py:
+ If paused() returns True, don't go to playing.
+ add a method for querying duration in the common case.
+
2011-08-08 Thomas Vander Stichele <thomas at apestaart dot org>
* task.py:
diff --git a/morituri/extern/task/gstreamer.py b/morituri/extern/task/gstreamer.py
index e5e735c..bf86393 100644
--- a/morituri/extern/task/gstreamer.py
+++ b/morituri/extern/task/gstreamer.py
@@ -96,12 +96,18 @@ class GstPipelineTask(task.Task):
ret = self.pipeline.get_state()
self.debug('got pipeline to PAUSED: %r', ret)
+ # GStreamer tasks could already be done in paused, and not
+ # need playing.
if not self.exception:
- self.paused()
+ done = self.paused()
else:
raise self.exception
- self.play()
+ if done:
+ self.debug('paused() is done')
+ else:
+ self.debug('paused() wants more')
+ self.play()
def play(self):
# since set_state returns non-False, adding it as timeout_add
@@ -121,12 +127,13 @@ class GstPipelineTask(task.Task):
return False
if self.playing:
- self.debug('scheduling setting pipeline to PLAYING')
+ self.debug('schedule playLater()')
self.schedule(0, playLater)
def stop(self):
self.debug('stopping')
+
# FIXME: in theory this should help clean up properly,
# but in practice we can still get
# python: /builddir/build/BUILD/Python-2.7/Python/pystate.c:595: PyGILState_Ensure: Assertion `autoInterpreterState' failed.
@@ -167,7 +174,10 @@ class GstPipelineTask(task.Task):
def paused(self):
"""
- Called after pipeline is paused
+ Called after pipeline is paused.
+
+ If this returns True, the task is done and
+ should not continue going to PLAYING.
"""
pass
@@ -202,3 +212,29 @@ class GstPipelineTask(task.Task):
self.setAndRaiseException(exc)
self.debug('error, scheduling stop')
self.schedule(0, self.stop)
+
+ def query_length(self, element):
+ """
+ Query the length of the pipeline in samples, for progress updates.
+ To be called from paused()
+ """
+ # get duration
+ self.debug('query duration')
+ try:
+ duration, qformat = element.query_duration(self.gst.FORMAT_DEFAULT)
+ except self.gst.QueryError, e:
+ self.setException(e)
+ # schedule it, otherwise runner can get set to None before
+ # we're done starting
+ self.schedule(0, self.stop)
+ return
+
+ # wavparse 0.10.14 returns in bytes
+ if qformat == self.gst.FORMAT_BYTES:
+ self.debug('query returned in BYTES format')
+ duration /= 4
+ self.debug('total duration: %r', duration)
+
+ return duration
+
+
diff --git a/morituri/extern/task/task.py b/morituri/extern/task/task.py
index 4edca9e..112e544 100644
--- a/morituri/extern/task/task.py
+++ b/morituri/extern/task/task.py
@@ -148,6 +148,7 @@ class Task(object):
print 'ERROR: stopping task which is already stopped'
import traceback; traceback.print_stack()
self.runner = None
+ self.debug('reset runner to None')
self._notifyListeners('stopped')
### base class methods
@@ -205,6 +206,10 @@ class Task(object):
exception, self.exceptionMessage))
def schedule(self, delta, callable, *args, **kwargs):
+ if not self.runner:
+ print "ERROR: scheduling on a task that's altready stopped"
+ import traceback; traceback.print_stack()
+ return
self.runner.schedule(self, delta, callable, *args, **kwargs)
@@ -511,6 +516,8 @@ class SyncRunner(TaskRunner, ITaskListener):
def schedule(self, task, delta, callable, *args, **kwargs):
def c():
try:
+ self.log('schedule: calling %r(*args=%r, **kwargs=%r)',
+ callable, args, kwargs)
callable(*args, **kwargs)
return False
except Exception, e:
@@ -519,6 +526,9 @@ class SyncRunner(TaskRunner, ITaskListener):
task.setException(e)
self.stopped(task)
raise
+ self.log('schedule: scheduling %r(*args=%r, **kwargs=%r)',
+ callable, args, kwargs)
+
gobject.timeout_add(int(delta * 1000L), c)
### ITaskListener methods
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list