[pitivi] pipeline: Makes sure not to try seeking while rendering



commit f667b10821c0e9567c58d130c54d9079f9118084
Author: Thibault Saunier <tsaunier gnome org>
Date:   Tue Oct 6 19:58:34 2015 +0200

    pipeline: Makes sure not to try seeking while rendering
    
    And raise an error if that happens again.
    
    Fixes T3351
    
    Differential Revision: https://phabricator.freedesktop.org/D336

 pitivi/render.py         |    2 +-
 pitivi/utils/pipeline.py |    9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/pitivi/render.py b/pitivi/render.py
index 6c1d4ef..e855b96 100644
--- a/pitivi/render.py
+++ b/pitivi/render.py
@@ -863,7 +863,6 @@ class RenderDialog(Loggable):
 
     def _shutDown(self):
         """Shutdown the gstreamer pipeline and disconnect from its signals."""
-        self.project.set_rendering(False)
         self._is_rendering = False
         self._rendering_is_paused = False
         self._time_spent_paused = 0
@@ -871,6 +870,7 @@ class RenderDialog(Loggable):
         self._disconnectFromGst()
         self._pipeline.set_mode(GES.PipelineFlags.FULL_PREVIEW)
         self._pipeline.set_state(Gst.State.PAUSED)
+        self.project.set_rendering(False)
 
     def _pauseRender(self, unused_progress):
         self._rendering_is_paused = self.progress.play_pause_button.get_active(
diff --git a/pitivi/utils/pipeline.py b/pitivi/utils/pipeline.py
index 51a0b00..6f422bb 100644
--- a/pitivi/utils/pipeline.py
+++ b/pitivi/utils/pipeline.py
@@ -505,7 +505,7 @@ class SimplePipeline(GObject.Object, Loggable):
             self._handleErrorMessage(error, detail, message.src)
             Gst.debug_bin_to_dot_file_with_ts(self, Gst.DebugGraphDetails.ALL,
                                               "pitivi.error")
-            if not (self._pipeline.get_mode() & GES.PipelineFlags.RENDER):
+            if not self._pipeline.get_mode() & GES.PipelineFlags.RENDER:
                 self._recover()
         elif message.type == Gst.MessageType.DURATION_CHANGED:
             self.debug("Duration might have changed, querying it")
@@ -636,6 +636,10 @@ class Pipeline(GES.Pipeline, SimplePipeline):
                 watchdog.props.timeout = WATCHDOG_TIMEOUT * 1000
                 self.props.audio_filter = watchdog
 
+    def set_mode(self, mode):
+        self._next_seek = None
+        return GES.Pipeline.set_mode(self, mode)
+
     def _getDuration(self):
         return self._timeline.get_duration()
 
@@ -698,6 +702,9 @@ class Pipeline(GES.Pipeline, SimplePipeline):
         if self._timeline.is_empty():
             return
 
+        if self._pipeline.get_mode() & GES.PipelineFlags.RENDER:
+            raise PipelineError("Trying to seek while rendering")
+
         st = Gst.Structure.new_empty("seek")
 
         if self.getState() == Gst.State.PLAYING:


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