[pitivi] previewers: Flush previewers when shutting down projects
- From: Thibault Saunier <tsaunier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] previewers: Flush previewers when shutting down projects
- Date: Fri, 18 Aug 2017 01:34:23 +0000 (UTC)
commit e3a55e9961dc8d33ba8dd58a37fb523a5fb91ef6
Author: Thibault Saunier <tsaunier gnome org>
Date: Wed Aug 16 17:00:52 2017 -0300
previewers: Flush previewers when shutting down projects
And avoid doing any activity on them until the project has been
completely teared down.
Without that we will go crazy about starting/stoping preview generation
while tearing down projects.
Reviewed-by: Alex Băluț <<alexandru balut gmail com>>
Differential Revision: https://phabricator.freedesktop.org/D1843
pitivi/timeline/previewers.py | 23 +++++++++++++++++++++--
pitivi/timeline/timeline.py | 5 +++++
2 files changed, 26 insertions(+), 2 deletions(-)
---
diff --git a/pitivi/timeline/previewers.py b/pitivi/timeline/previewers.py
index 7a2e8a9..331adad 100644
--- a/pitivi/timeline/previewers.py
+++ b/pitivi/timeline/previewers.py
@@ -308,6 +308,7 @@ class PreviewGeneratorManager():
GES.TrackType.AUDIO: [],
GES.TrackType.VIDEO: []
}
+ self._running = True
def add_previewer(self, previewer):
"""Adds the specified previewer to the queue.
@@ -332,12 +333,30 @@ class PreviewGeneratorManager():
previewer.connect("done", self.__previewer_done_cb)
previewer.startGeneration()
+ def start_flushing(self):
+ """Flushes all previewers and start ignoring any update."""
+ if self._running:
+ self._running = False
+ for previewer in list(self._current_previewers.values()):
+ previewer.stopGeneration()
+
+ for previewers in self._previewers.values():
+ for previewer in previewers:
+ previewer.stopGeneration()
+
+ def stop_flushing(self):
+ """Stop ignoring managed previewers updates."""
+ self._running = True
+
def __previewer_done_cb(self, previewer):
track_type = previewer.track_type
next_previewer = self._current_previewers.pop(track_type, None)
if next_previewer:
next_previewer.disconnect_by_func(self.__previewer_done_cb)
+ if not self._running:
+ return
+
if self._previewers[track_type]:
self._start_previewer(self._previewers[track_type].pop())
@@ -350,7 +369,7 @@ class Previewer(Gtk.Layout):
"""
# We only need one PreviewGeneratorManager to manage all previewers.
- __manager = PreviewGeneratorManager()
+ manager = PreviewGeneratorManager()
def __init__(self, track_type):
Gtk.Layout.__init__(self)
@@ -367,7 +386,7 @@ class Previewer(Gtk.Layout):
def becomeControlled(self):
"""Lets the PreviewGeneratorManager control our execution."""
- Previewer.__manager.add_previewer(self)
+ Previewer.manager.add_previewer(self)
def setSelected(self, selected):
"""Marks this instance as being selected."""
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 6747564..6d02d1a 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -38,6 +38,7 @@ from pitivi.timeline.elements import TrimHandle
from pitivi.timeline.layer import Layer
from pitivi.timeline.layer import LayerControls
from pitivi.timeline.layer import SpacedSeparator
+from pitivi.timeline.previewers import Previewer
from pitivi.timeline.ruler import ScaleRuler
from pitivi.undo.timeline import CommitTimelineFinalizingAction
from pitivi.utils.loggable import Loggable
@@ -436,6 +437,8 @@ class Timeline(Gtk.EventBox, Zoomable, Loggable):
def setProject(self, project):
"""Connects to the GES.Timeline holding the project."""
+ # Avoid starting/closing preview generation like crazy while tearing down project
+ Previewer.manager.start_flushing()
if self.ges_timeline is not None:
self.disconnect_by_func(self._button_press_event_cb)
self.disconnect_by_func(self._button_release_event_cb)
@@ -454,6 +457,8 @@ class Timeline(Gtk.EventBox, Zoomable, Loggable):
if self._project:
self._project.pipeline.disconnect_by_func(self._positionCb)
+ Previewer.manager.stop_flushing()
+
self._project = project
if self._project:
self._project.pipeline.connect('position', self._positionCb)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]