X-Git-Url: https://git.ao2.it/experiments/gstreamer.git/blobdiff_plain/e8d3c4cfe934b23010a8a266e380e56a978aa1bb..7527729dc0619c6cc517cb442fe99ae9918c9cef:/python/gst-trick-mode-looping-2.py diff --git a/python/gst-trick-mode-looping-2.py b/python/gst-trick-mode-looping-2.py index 7b6b07c..b3487dc 100755 --- a/python/gst-trick-mode-looping-2.py +++ b/python/gst-trick-mode-looping-2.py @@ -47,19 +47,10 @@ class Player: self._player.set_property("uri", self._uri) # XXX After the first iteration of the loop the playback rate is - # reset to normal. Do I need to re-set the rate here? + # reset to 1. Do I need to re-set the rate here? # If I uncomment the following line, nothing changes: - #self.set_rate(self._rate) - - # And nothing changes either if I set the seek_event manually using - # position=0: - #seek_event = Gst.Event.new_seek(self._rate, - # Gst.Format.TIME, - # Gst.SeekFlags.FLUSH | Gst.SeekFlags.ACCURATE, - # Gst.SeekType.SET, 0, - # Gst.SeekType.NONE, 0) - #self._player.send_event(seek_event) + #self.set_seek(0) def on_error(self, bus, msg): (err, debug) = msg.parse_error() @@ -79,19 +70,32 @@ class Player: def set_rate(self, rate): self._rate = rate position = self._player.query_position(Gst.Format.TIME)[1] + self.set_seek(position, True) + + def set_seek(self, position, flush=False): + flags = Gst.SeekFlags.SKIP | Gst.SeekFlags.ACCURATE - # Create the seek event - seek_event = Gst.Event.new_seek(rate, - Gst.Format.TIME, - Gst.SeekFlags.FLUSH | Gst.SeekFlags.ACCURATE, - Gst.SeekType.SET, position, - Gst.SeekType.SET, -1) + if flush: + flags |= Gst.SeekFlags.FLUSH + + if self._rate >= 0: + seek_event = Gst.Event.new_seek(self._rate, + Gst.Format.TIME, + flags, + Gst.SeekType.SET, position, + Gst.SeekType.NONE, 0) + else: + seek_event = Gst.Event.new_seek(self._rate, + Gst.Format.TIME, + flags, + Gst.SeekType.NONE, 0, + Gst.SeekType.END, position) if seek_event: self._player.send_event(seek_event) - Gst.info("rate set to %s" % rate) + Gst.info("rate set to %s" % self._rate) else: - Gst.warining("change rate failed") + Gst.warining("change rate failed") def main(args):