[pitivi] pitivi: Make sure to release all pipelines
- From: Thibault Saunier <tsaunier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] pitivi: Make sure to release all pipelines
- Date: Wed, 16 Sep 2015 15:50:47 +0000 (UTC)
commit d86f7fe6465831666d4be2bcfbfb40e6a4d0acda
Author: Thibault Saunier <tsaunier gnome org>
Date: Sat Jul 18 13:33:39 2015 +0200
pitivi: Make sure to release all pipelines
Summary: Depends on D264
Reviewers: Mathieu_Du, aleb
Differential Revision: https://phabricator.freedesktop.org/D265
pitivi/mediafilespreviewer.py | 2 +-
pitivi/timeline/elements.py | 12 +++++++++---
pitivi/timeline/layer.py | 1 +
pitivi/timeline/previewers.py | 1 -
pitivi/utils/pipeline.py | 2 +-
pitivi/viewer.py | 5 +++++
6 files changed, 17 insertions(+), 6 deletions(-)
---
diff --git a/pitivi/mediafilespreviewer.py b/pitivi/mediafilespreviewer.py
index b828590..08af4c0 100644
--- a/pitivi/mediafilespreviewer.py
+++ b/pitivi/mediafilespreviewer.py
@@ -453,7 +453,7 @@ class PreviewWidget(Gtk.Grid, Loggable):
dialog.destroy()
def _destroy_cb(self, widget):
- self.player.setState(Gst.State.NULL)
+ self.player.release()
self.is_playing = False
def __get_best_size(self, width_in, height_in):
diff --git a/pitivi/timeline/elements.py b/pitivi/timeline/elements.py
index 52f8de1..76d4828 100644
--- a/pitivi/timeline/elements.py
+++ b/pitivi/timeline/elements.py
@@ -318,6 +318,10 @@ class TimelineElement(Gtk.Layout, timelineUtils.Zoomable, Loggable):
if self.__controlledProperty:
self.__createControlBinding(self._bElement)
+ def release(self):
+ if self.__previewer:
+ self.__previewer.cleanup()
+
# Public API
def setSize(self, width, height):
width = max(0, width)
@@ -794,9 +798,11 @@ class Clip(Gtk.EventBox, timelineUtils.Zoomable, Loggable):
self.layer = bLayer.ui
def __disconnectFromChild(self, child):
- if child.ui and hasattr(child.ui, "__clip_curve_enter_id") and child.ui.__clip_curve_enter_id:
- child.ui.disconnect_by_func(child.ui.__clip_curve_enter_id)
- child.ui.disconnect_by_func(child.ui.__clip_curve_leave_id)
+ if child.ui:
+ if hasattr(child.ui, "__clip_curve_enter_id") and child.ui.__clip_curve_enter_id:
+ child.ui.disconnect_by_func(child.ui.__clip_curve_enter_id)
+ child.ui.disconnect_by_func(child.ui.__clip_curve_leave_id)
+ child.ui.release()
def __connectToChild(self, child):
if child.ui:
diff --git a/pitivi/timeline/layer.py b/pitivi/timeline/layer.py
index 0cc3621..3582a89 100644
--- a/pitivi/timeline/layer.py
+++ b/pitivi/timeline/layer.py
@@ -561,6 +561,7 @@ class Layer(Gtk.EventBox, timelineUtils.Zoomable, Loggable):
self.error("Implement UI for type %s?" % bClip.__gtype__)
return
+ bClip.ui.release()
self._layout.remove(bClip.ui)
def __childWidgetRemovedCb(self, layout, clip):
diff --git a/pitivi/timeline/previewers.py b/pitivi/timeline/previewers.py
index e74f85e..6f09a45 100644
--- a/pitivi/timeline/previewers.py
+++ b/pitivi/timeline/previewers.py
@@ -917,5 +917,4 @@ class AudioPreviewer(Gtk.Layout, PreviewGenerator, Zoomable, Loggable):
def cleanup(self):
self.stopGeneration()
- self.timeline.disconnect_by_func(self._scrolledCb)
Zoomable.__del__(self)
diff --git a/pitivi/utils/pipeline.py b/pitivi/utils/pipeline.py
index 87cdd71..bcf02e1 100644
--- a/pitivi/utils/pipeline.py
+++ b/pitivi/utils/pipeline.py
@@ -216,7 +216,7 @@ class SimplePipeline(GObject.Object, Loggable):
self._bus.disconnect_by_func(self._busMessageCb)
self._bus.remove_signal_watch()
- self._pipeline.setState(Gst.State.NULL)
+ self._pipeline.set_state(Gst.State.NULL)
self._bus = None
def flushSeek(self):
diff --git a/pitivi/viewer.py b/pitivi/viewer.py
index 271542b..d6eb9e8 100644
--- a/pitivi/viewer.py
+++ b/pitivi/viewer.py
@@ -100,6 +100,7 @@ class ViewerContainer(Gtk.Box, Loggable):
self._createUi()
+ self.__owning_pipeline = False
if not self.settings.viewerDocked:
self.undock()
@@ -135,6 +136,7 @@ class ViewerContainer(Gtk.Box, Loggable):
self.internal.sink = self.sink
self.external.sink = self.sink
+ self.__owning_pipeline = False
self._switch_output_window()
self._setUiActive()
@@ -148,6 +150,8 @@ class ViewerContainer(Gtk.Box, Loggable):
self.pipeline.disconnect_by_func(self._positionCb)
self.pipeline.disconnect_by_func(self._durationChangedCb)
+ if self.__owning_pipeline:
+ self.pipeline.release()
self.pipeline = None
def _setUiActive(self, active=True):
@@ -428,6 +432,7 @@ class ViewerContainer(Gtk.Box, Loggable):
self._oldTimelinePos = self.pipeline.getPosition(True)
self.pipeline.set_state(Gst.State.NULL)
self.setPipeline(AssetPipeline(clip))
+ self.__owning_pipeline = True
self._lastClipTrimTime = cur_time
if (cur_time - self._lastClipTrimTime) > 0.2 and self.pipeline.getState() == Gst.State.PAUSED:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]