From b5e1e8da7dc805fedc26b934b818ab72ca5083eb Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Fri, 5 Aug 2011 20:21:31 +0000 Subject: [PATCH] * gstreamer.py: * task.py: Don't rely on the log module; users that want to log should first subclass from a log class that implements warning/info/debug/log --- morituri/extern/task/ChangeLog | 8 ++++++++ morituri/extern/task/gstreamer.py | 11 +++++++++++ morituri/extern/task/task.py | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/morituri/extern/task/ChangeLog b/morituri/extern/task/ChangeLog index 6999323..d1ce6ce 100644 --- a/morituri/extern/task/ChangeLog +++ b/morituri/extern/task/ChangeLog @@ -1,3 +1,11 @@ +2011-08-05 Thomas Vander Stichele + + * gstreamer.py: + * task.py: + Don't rely on the log module; users that want to log + should first subclass from a log class that implements + warning/info/debug/log + 2011-08-05 Thomas Vander Stichele * gstreamer.py: diff --git a/morituri/extern/task/gstreamer.py b/morituri/extern/task/gstreamer.py index 986d6b1..e5e735c 100644 --- a/morituri/extern/task/gstreamer.py +++ b/morituri/extern/task/gstreamer.py @@ -126,6 +126,17 @@ class GstPipelineTask(task.Task): 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. + + self.pipeline.set_state(self.gst.STATE_READY) + self.debug('set pipeline to READY') + # FIXME: this can block + ret = self.pipeline.get_state() + self.debug('got pipeline to READY: %r', ret) + self.debug('setting state to NULL') self.pipeline.set_state(self.gst.STATE_NULL) self.debug('set state to NULL') diff --git a/morituri/extern/task/task.py b/morituri/extern/task/task.py index 0263f0e..21fcbe5 100644 --- a/morituri/extern/task/task.py +++ b/morituri/extern/task/task.py @@ -38,7 +38,7 @@ class TaskException(Exception): self.exceptionMessage = message self.args = (exception, message, ) -class Task(object, log.Loggable): +class Task(object): """ I wrap a task in an asynchronous interface. I can be listened to for starting, stopping, description changes @@ -67,6 +67,19 @@ class Task(object, log.Loggable): _listeners = None + ### log stubs + def warning(self, message, *args): + pass + + def info(self, message, *args): + pass + + def debug(self, message, *args): + pass + + def log(self, message, *args): + pass + ### subclass methods def start(self, runner): """ @@ -90,6 +103,7 @@ class Task(object, log.Loggable): def stop(self): """ Stop the task. + Also resets the runner on the task. Subclasses should chain up to me at the end.