[pitivi] pipeline: Add sink_widget field



commit c2c569f7622ffbd67f81b64ee6f2651b17e084c2
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Wed Apr 20 08:53:04 2016 +0200

    pipeline: Add sink_widget field
    
    Differential Revision: https://phabricator.freedesktop.org/D944

 pitivi/utils/pipeline.py |   33 ++++++++++++++++++++-------------
 pitivi/viewer/viewer.py  |   12 +++---------
 2 files changed, 23 insertions(+), 22 deletions(-)
---
diff --git a/pitivi/utils/pipeline.py b/pitivi/utils/pipeline.py
index b6d5332..02ee061 100644
--- a/pitivi/utils/pipeline.py
+++ b/pitivi/utils/pipeline.py
@@ -102,24 +102,21 @@ class SimplePipeline(GObject.Object, Loggable):
         self._timeout_async_id = 0
         self._force_position_listener = False
 
-        self.setSink(self.createSink())
+        self.video_sink = None
+        self.sink_widget = None
 
-    def createSink(self):
+    def create_sink(self):
         sink = Gst.ElementFactory.make(videosink_factory.get_name(), None)
+        self.sink_widget = sink.props.widget
+
         if videosink_factory.get_name() == "gtksink":
             self.info("Using gtksink")
-            return sink
-
-        sinkbin = Gst.ElementFactory.make("glsinkbin", None)
-        sinkbin.props.sink = sink
-        return sinkbin
-
-    def setSink(self, sink):
-        self.video_sink = sink
-        if isinstance(self._pipeline, GES.Pipeline):
-            self._pipeline.preview_set_video_sink(self.video_sink)
+            self.video_sink = sink
         else:
-            self._pipeline.set_property("video_sink", self.video_sink)
+            self.info("Using glsinkbin around %s", videosink_factory.get_name())
+            sinkbin = Gst.ElementFactory.make("glsinkbin", None)
+            sinkbin.props.sink = sink
+            self.video_sink = sinkbin
 
     def setForcePositionListener(self, force):
         self._force_position_listener = force
@@ -518,10 +515,16 @@ class AssetPipeline(SimplePipeline):
         bPipeline = Gst.ElementFactory.make("playbin", name)
         SimplePipeline.__init__(self, bPipeline)
 
+        self.create_sink()
+
         self.clip = clip
         if self.clip:
             self.setClipUri(self.clip.props.uri)
 
+    def create_sink(self):
+        SimplePipeline.create_sink(self)
+        self._pipeline.set_property("video_sink", self.video_sink)
+
     def setClipUri(self, uri):
         self._pipeline.set_property("uri", uri)
 
@@ -554,6 +557,10 @@ class Pipeline(GES.Pipeline, SimplePipeline):
                 watchdog.props.timeout = WATCHDOG_TIMEOUT * 1000
                 self.props.audio_filter = watchdog
 
+    def create_sink(self):
+        SimplePipeline.create_sink(self)
+        self._pipeline.preview_set_video_sink(self.video_sink)
+
     def set_mode(self, mode):
         self._next_seek = None
         return GES.Pipeline.set_mode(self, mode)
diff --git a/pitivi/viewer/viewer.py b/pitivi/viewer/viewer.py
index f72eda3..7413a0c 100644
--- a/pitivi/viewer/viewer.py
+++ b/pitivi/viewer/viewer.py
@@ -137,7 +137,7 @@ class ViewerContainer(Gtk.Box, Loggable):
         self.pipeline.pause()
 
     def __createNewViewer(self):
-        self.pipeline.setSink(self.pipeline.createSink())
+        self.pipeline.create_sink()
 
         self.target = ViewerWidget(self.pipeline, self.app)
 
@@ -498,19 +498,13 @@ class ViewerWidget(Gtk.AspectFrame, Loggable):
 
         self._pipeline = pipeline
 
-        # We only work with a gtkglsink inside a glsinkbin
-        sink = pipeline.video_sink
-        try:
-            sink_widget = sink.props.sink.props.widget
-        except AttributeError:
-            sink_widget = sink.props.widget
-        sink_widget.show()
+        pipeline.sink_widget.show()
 
         # We keep the ViewerWidget hidden initially, or the desktop wallpaper
         # would show through the non-double-buffered widget!
 
         # Assign Viewer Overlay via Gtk.Overlay
-        self.overlay_stack = OverlayStack(app, sink_widget)
+        self.overlay_stack = OverlayStack(app, pipeline.sink_widget)
         self.add(self.overlay_stack)
 
     def setDisplayAspectRatio(self, ratio):


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