[pitivi/ges: 161/287] playback: Create a utils/playback.py file
- From: Jean-FranÃois Fortin Tam <jfft src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi/ges: 161/287] playback: Create a utils/playback.py file
- Date: Thu, 15 Mar 2012 16:39:22 +0000 (UTC)
commit 049949519143da301f4e1b291494045a51498555
Author: Thibault Saunier <thibault saunier collabora com>
Date: Mon Jan 9 14:07:21 2012 -0300
playback: Create a utils/playback.py file
This file should contained all the utils that are related to the playback
Add The Seeker class to it
pitivi/project.py | 2 +-
pitivi/ui/clipproperties.py | 2 +-
pitivi/ui/effectsconfiguration.py | 2 +-
pitivi/ui/ruler.py | 2 +-
pitivi/utils/Makefile.am | 1 +
pitivi/utils/misc.py | 88 ---------------------------
pitivi/utils/playback.py | 120 +++++++++++++++++++++++++++++++++++++
7 files changed, 125 insertions(+), 92 deletions(-)
---
diff --git a/pitivi/project.py b/pitivi/project.py
index ad8d0ab..25bf5d2 100644
--- a/pitivi/project.py
+++ b/pitivi/project.py
@@ -26,7 +26,7 @@ Project class
import ges
import gst
-from pitivi.utils.misc import Seeker
+from pitivi.utils.playback import Seeker
from pitivi.utils.loggable import Loggable
from pitivi.sourcelist import SourceList
from pitivi.settings import MultimediaSettings
diff --git a/pitivi/ui/clipproperties.py b/pitivi/ui/clipproperties.py
index 038e7b3..a7f26d8 100644
--- a/pitivi/ui/clipproperties.py
+++ b/pitivi/ui/clipproperties.py
@@ -30,7 +30,7 @@ import ges
from gettext import gettext as _
-from pitivi.utils.misc import Seeker
+from pitivi.utils.playback import Seeker
from pitivi.check import soft_deps
from pitivi.configure import get_ui_dir
from pitivi.utils.loggable import Loggable
diff --git a/pitivi/ui/effectsconfiguration.py b/pitivi/ui/effectsconfiguration.py
index 0f3a086..b26cafd 100644
--- a/pitivi/ui/effectsconfiguration.py
+++ b/pitivi/ui/effectsconfiguration.py
@@ -22,7 +22,7 @@ import gst
import gtk
import gobject
-from pitivi.utils.misc import Seeker
+from pitivi.utils.playback import Seeker
from pitivi.ui.gstwidget import GstElementSettingsWidget
from pitivi.ui.dynamic import FractionWidget
diff --git a/pitivi/ui/ruler.py b/pitivi/ui/ruler.py
index 58f18c6..f2a4771 100644
--- a/pitivi/ui/ruler.py
+++ b/pitivi/ui/ruler.py
@@ -27,7 +27,7 @@ import gobject
import gtk
import gst
-from pitivi.utils.misc import Seeker
+from pitivi.utils.playback import Seeker
from pitivi.ui.zoominterface import Zoomable
from pitivi.utils.loggable import Loggable
diff --git a/pitivi/utils/Makefile.am b/pitivi/utils/Makefile.am
index afc42b2..6ef20df 100644
--- a/pitivi/utils/Makefile.am
+++ b/pitivi/utils/Makefile.am
@@ -7,6 +7,7 @@ utils_PYTHON = \
extract.py \
timeline.py \
loggable.py \
+ playback.py \
misc.py
clean-local:
diff --git a/pitivi/utils/misc.py b/pitivi/utils/misc.py
index bd38f92..7a3eb7b 100644
--- a/pitivi/utils/misc.py
+++ b/pitivi/utils/misc.py
@@ -268,94 +268,6 @@ def uri_is_reachable(uri):
return os.path.isfile(gst.uri_get_location(uri))
-class Seeker(Signallable):
- """
- The Seeker is a singleton helper class to do various seeking
- operations in the pipeline.
- """
-
- __signals__ = {
- 'seek': ['position', 'format'],
- 'flush': [],
- 'seek-relative': ['time'],
- 'position-changed': ['position']
- }
- _instance = None
-
- def __new__(cls, *args, **kwargs):
- if not cls._instance:
- cls._instance = super(Seeker, cls).__new__(
- cls, *args, **kwargs)
- return cls._instance
-
- def __init__(self, timeout):
- self.timeout = timeout
- self.pending_seek_id = None
- self.position = None
- self.format = None
- self._time = None
-
- def seek(self, position, format=gst.FORMAT_TIME, on_idle=False):
- self.format = format
- self.position = position
-
- if self.pending_seek_id is None:
- if on_idle:
- gobject.idle_add(self._seekTimeoutCb)
- else:
- self._seekTimeoutCb()
- self.pending_seek_id = self._scheduleSeek(self.timeout,
- self._seekTimeoutCb)
-
- def seekRelative(self, time, on_idle=False):
- if self.pending_seek_id is None:
- self._time = time
- if on_idle:
- gobject.idle_add(self._seekRelativeTimeoutCb)
- else:
- self._seekTimeoutCb()
- self.pending_seek_id = self._scheduleSeek(self.timeout,
- self._seekTimeoutCb, True)
-
- def flush(self):
- try:
- self.emit('flush')
- except:
- log.doLog(log.ERROR, None, "seeker", "Error while flushing", None)
-
- def _scheduleSeek(self, timeout, callback, relative=False):
- return gobject.timeout_add(timeout, callback, relative)
-
- def _seekTimeoutCb(self, relative=False):
- self.pending_seek_id = None
- if relative:
- try:
- self.emit('seek-relative', self._time)
- except:
- log.doLog(log.ERROR, None, "seeker", "Error while seeking %s relative",
- self._time)
- # if an exception happened while seeking, properly
- # reset ourselves
- return False
-
- self._time = None
- elif self.position != None and self.format != None:
- position, self.position = self.position, None
- format, self.format = self.format, None
- try:
- self.emit('seek', position, format)
- except:
- log.doLog(log.ERROR, None, "seeker", "Error while seeking to position:%s format:%r",
- (gst.TIME_ARGS(position), format))
- # if an exception happened while seeking, properly
- # reset ourselves
- return False
- return False
-
- def setPosition(self, position):
- self.emit("position-changed", position)
-
-
def get_filesystem_encoding():
return sys.getfilesystemencoding() or "utf-8"
diff --git a/pitivi/utils/playback.py b/pitivi/utils/playback.py
new file mode 100644
index 0000000..fc6a479
--- /dev/null
+++ b/pitivi/utils/playback.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+#
+# seek.py
+#
+# Copyright (C) 2012 Thibault Saunier <thibaul saunier collabora com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+
+import gst
+import gobject
+
+import pitivi.utils.loggable as log
+
+from pitivi.signalinterface import Signallable
+
+
+class Seeker(Signallable):
+ """
+ The Seeker is a singleton helper class to do various seeking
+ operations in the pipeline.
+ """
+
+ __signals__ = {
+ 'seek': ['position', 'format'],
+ 'flush': [],
+ 'seek-relative': ['time'],
+ 'position-changed': ['position']
+ }
+ _instance = None
+
+ def __new__(cls, *args, **kwargs):
+ if not cls._instance:
+ cls._instance = super(Seeker, cls).__new__(
+ cls, *args, **kwargs)
+ return cls._instance
+
+ def __init__(self, timeout):
+ self.timeout = timeout
+ self.pending_seek_id = None
+ self.position = None
+ self.format = None
+ self._time = None
+
+ def seek(self, position, format=gst.FORMAT_TIME, on_idle=False):
+ self.format = format
+ self.position = position
+
+ if self.pending_seek_id is None:
+ if on_idle:
+ gobject.idle_add(self._seekTimeoutCb)
+ else:
+ self._seekTimeoutCb()
+ self.pending_seek_id = self._scheduleSeek(self.timeout,
+ self._seekTimeoutCb)
+
+ def seekRelative(self, time, on_idle=False):
+ if self.pending_seek_id is None:
+ self._time = time
+ if on_idle:
+ gobject.idle_add(self._seekRelativeTimeoutCb)
+ else:
+ self._seekTimeoutCb()
+ self.pending_seek_id = self._scheduleSeek(self.timeout,
+ self._seekTimeoutCb, True)
+
+ def flush(self):
+ try:
+ self.emit('flush')
+ except:
+ log.doLog(log.ERROR, None, "seeker", "Error while flushing", None)
+
+ def _scheduleSeek(self, timeout, callback, relative=False):
+ return gobject.timeout_add(timeout, callback, relative)
+
+ def _seekTimeoutCb(self, relative=False):
+ self.pending_seek_id = None
+ if relative:
+ try:
+ self.emit('seek-relative', self._time)
+ except:
+ log.doLog(log.ERROR, None, "seeker", "Error while seeking %s relative",
+ self._time)
+ # if an exception happened while seeking, properly
+ # reset ourselves
+ return False
+
+ self._time = None
+ elif self.position != None and self.format != None:
+ position, self.position = self.position, None
+ format, self.format = self.format, None
+ try:
+ self.emit('seek', position, format)
+ except:
+ log.doLog(log.ERROR, None, "seeker", "Error while seeking to position:%s format:%r",
+ (gst.TIME_ARGS(position), format))
+ # if an exception happened while seeking, properly
+ # reset ourselves
+ return False
+ return False
+
+ def setPosition(self, position):
+ self.emit("position-changed", position)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]