[pitivi] previewers: be more conservative about loading pickled waveforms



commit fc79c5b93c29da00f9809fe3c49e0e7e35af0fe6
Author: Thibault Saunier <tsaunier gnome org>
Date:   Thu Aug 17 13:54:38 2017 -0300

    previewers: be more conservative about loading pickled waveforms
    
    Going though the same PreviewerGeneratorManager as when needing to launch
    a pipeline.
    
    It is an expensive and can lead to pipeline startup being slowed down
    by many seconds on big timeline.
    
    Reviewed-by: Alex Băluț <<alexandru balut gmail com>>
    Differential Revision: https://phabricator.freedesktop.org/D1846

 pitivi/timeline/elements.py   |    1 -
 pitivi/timeline/previewers.py |   17 ++++++++++-------
 2 files changed, 10 insertions(+), 8 deletions(-)
---
diff --git a/pitivi/timeline/elements.py b/pitivi/timeline/elements.py
index 25c2c4a..5da5c92 100644
--- a/pitivi/timeline/elements.py
+++ b/pitivi/timeline/elements.py
@@ -801,7 +801,6 @@ class AudioUriSource(TimelineElement):
     def _getPreviewer(self):
         previewer = AudioPreviewer(self._ges_elem)
         previewer.get_style_context().add_class("AudioUriSource")
-        previewer.startLevelsDiscoveryWhenIdle()
 
         return previewer
 
diff --git a/pitivi/timeline/previewers.py b/pitivi/timeline/previewers.py
index 02e8893..edf2574 100644
--- a/pitivi/timeline/previewers.py
+++ b/pitivi/timeline/previewers.py
@@ -912,6 +912,7 @@ class AudioPreviewer(Previewer, Zoomable, Loggable):
 
         self.ges_elem.connect("notify::in-point", self._inpoint_changed_cb)
         self.connect("notify::height-request", self._height_changed_cb)
+        self.becomeControlled()
 
     def _inpoint_changed_cb(self, unused_b_element, unused_value):
         self._force_redraw = True
@@ -919,12 +920,6 @@ class AudioPreviewer(Previewer, Zoomable, Loggable):
     def _height_changed_cb(self, unused_widget, unused_param_spec):
         self._force_redraw = True
 
-    def startLevelsDiscoveryWhenIdle(self):
-        """Starts processing waveform (whenever possible)."""
-        self.debug('Waiting for UI to become idle for: %s',
-                   path_from_uri(self._uri))
-        GLib.idle_add(self._startLevelsDiscovery, priority=GLib.PRIORITY_LOW)
-
     def _startLevelsDiscovery(self):
         filename = get_wavefile_location_for_uri(self._uri)
 
@@ -962,7 +957,6 @@ class AudioPreviewer(Previewer, Zoomable, Loggable):
         asset = self.ges_elem.get_parent().get_asset()
         self.n_samples = asset.get_duration() / SAMPLE_DURATION
         bus.connect("message", self._busMessageCb)
-        self.becomeControlled()
 
     def zoomChanged(self):
         self._force_redraw = True
@@ -1053,7 +1047,16 @@ class AudioPreviewer(Previewer, Zoomable, Loggable):
         context.set_source_surface(self.surface, self._surface_x, 0)
         context.paint()
 
+    def _emit_done_on_idle(self):
+        self.emit("done")
+
     def startGeneration(self):
+        self._startLevelsDiscovery()
+        if not self.pipeline:
+            # No need to generate as we loaded pre-generated .wave file.
+            GLib.idle_add(self._emit_done_on_idle, priority=GLib.PRIORITY_LOW)
+            return
+
         self.pipeline.set_state(Gst.State.PLAYING)
         if self.adapter is not None:
             self.adapter.start()


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