[pitivi/ges: 3/287] Implement the seek function



commit 6eea9e73b988b4ff02189461dbedcd044f3f985b
Author: Mathieu Duponchelle <seeed laposte net>
Date:   Tue Jul 19 16:31:58 2011 +0200

    Implement the seek function

 pitivi/ui/viewer.py |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/pitivi/ui/viewer.py b/pitivi/ui/viewer.py
index f595e81..1252b16 100644
--- a/pitivi/ui/viewer.py
+++ b/pitivi/ui/viewer.py
@@ -106,8 +106,6 @@ class PitiviViewer(gtk.VBox, Loggable):
         Loggable.__init__(self)
         self.log("New PitiviViewer")
 
-        self.seeker = Seeker(80)
-        self.seeker.connect('seek', self._seekerSeekCb)
         self.action = action
         self.pipeline = None
 
@@ -163,6 +161,8 @@ class PitiviViewer(gtk.VBox, Loggable):
             self.pipeline.set_state(gst.STATE_PAUSED)
             self.currentState = gst.STATE_PAUSED
         self._setUiActive()
+        self.seeker = self.app.projectManager.current.seeker
+        self.seeker.connect('seek', self._seekerSeekCb)
 
     def setAction(self, action):
         """
@@ -459,7 +459,10 @@ class PitiviViewer(gtk.VBox, Loggable):
 
     def _seekerSeekCb(self, seeker, position, format):
         try:
-            self.pipeline.seek(position, format)
+            self.pipeline.seek(1.0, format, gst.SEEK_FLAG_FLUSH,
+                                  gst.SEEK_TYPE_SET, position,
+                                  gst.SEEK_TYPE_NONE, -1)
+            self.app.gui.timeline.timelinePositionChanged(position)
         except PipelineError:
             self.error("seek failed %s %s", gst.TIME_ARGS(position), format)
 
@@ -468,6 +471,8 @@ class PitiviViewer(gtk.VBox, Loggable):
         self.current_time = value
         self.current_frame = frame
         self.timecode_entry.setWidgetValue(value, False)
+        position = self.pipeline.query_position(gst.FORMAT_TIME)[0]
+        self.app.gui.timeline.timelinePositionChanged(position)
         if not self.moving_slider:
             self.posadjust.set_value(float(value))
         return False
@@ -513,9 +518,11 @@ class PitiviViewer(gtk.VBox, Loggable):
 
     def _playButtonCb(self, unused_button, playing):
         if playing:
+            self.playing = True
             self.pipeline.set_state(gst.STATE_PLAYING)
             gobject.timeout_add(300, self._posCb)
         else:
+            self.playing = False
             self.pipeline.set_state(gst.STATE_PAUSED)
 
     def _forwardCb(self, unused_button):
@@ -603,6 +610,10 @@ class PitiviViewer(gtk.VBox, Loggable):
 
     def seekRelative(self, time):
         try:
+            seekvalue = max(0, min(position + time,
+                self.getDuration()))
+            self.seek(seekvalue)
+            position = self.pipeline.query_position(gst.FORMAT_TIME)[0]
             self.pipeline.seekRelative(time)
         except:
             self.warning("seek failed")
@@ -611,6 +622,8 @@ class PitiviViewer(gtk.VBox, Loggable):
         position = self.pipeline.query_position(gst.FORMAT_TIME)[0]
         self._newTime(position)
         self.app.gui.timeline._canvas.timelinePositionChanged(position)
+        if not self.playing :
+            return False
         return True
 
     def _currentStateCb(self, state):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]