[pitivi] check: Fix handling of gtkglsink not available



commit d3d0273d232b20e9dbc194b15a0776ef97162bbc
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Wed Nov 23 15:57:07 2016 +0100

    check: Fix handling of gtkglsink not available
    
    When the sink creation failed, the code attempted to use its factory.
    
    Also extracted code in _using_broadway_display() to clarify what's
    happening.
    
    Reviewed-by: Thibault Saunier <tsaunier gnome org>
    Differential Revision: https://phabricator.freedesktop.org/D1546

 pitivi/check.py |   51 ++++++++++++++++++++++++---------------------------
 1 files changed, 24 insertions(+), 27 deletions(-)
---
diff --git a/pitivi/check.py b/pitivi/check.py
index bd9e7fd..09d0a04 100644
--- a/pitivi/check.py
+++ b/pitivi/check.py
@@ -192,43 +192,40 @@ def _check_audiosinks():
     from gi.repository import Gst
     # Yes, this can still fail, if PulseAudio is non-responsive for example.
     sink = Gst.ElementFactory.make("autoaudiosink", None)
-    if not sink:
-        return False
-    return True
+    return sink
 
 
-def _check_videosink():
-    from gi.repository import Gst
+def _using_broadway_display():
     from gi.repository import Gdk
     from gi.repository import GObject
-    global videosink_factory
-
     try:
-        # If using GdkBroadwayDisplay make sure not to try to use gtkglsink
-        # as it would segfault right away.
-        if GObject.type_is_a(Gdk.Display.get_default().__gtype__,
-                             GObject.type_from_name("GdkBroadwayDisplay")):
-            videosink_factory = Gst.ElementFactory.find("gtksink")
-            return True
+        gdk_broadway_display_type = GObject.type_from_name("GdkBroadwayDisplay")
     except RuntimeError:
-        pass
+        return False
+    display = Gdk.Display.get_default()
+    return GObject.type_is_a(display.__gtype__, gdk_broadway_display_type)
+
 
-    if "gtkglsink" in os.environ.get("PITIVI_UNSTABLE_FEATURES", ''):
+def _check_videosink():
+    from gi.repository import Gst
+    global videosink_factory
+
+    # If using GdkBroadwayDisplay make sure not to try to use gtkglsink
+    # as it would segfault right away.
+    if not videosink_factory and \
+            not _using_broadway_display() and \
+            "gtkglsink" in os.environ.get("PITIVI_UNSTABLE_FEATURES", ""):
         sink = Gst.ElementFactory.make("gtkglsink", None)
-        if not sink:
-            videosink_factory = sink.get_factory()
-        elif sink.set_state(Gst.State.READY) == Gst.StateChangeReturn.SUCCESS:
-            videosink_factory = sink.get_factory()
-            sink.set_state(Gst.State.NULL)
-        else:
-            videosink_factory = Gst.ElementFactory.find("gtksink")
-    else:
-        videosink_factory = Gst.ElementFactory.find("gtksink")
+        if sink:
+            res = sink.set_state(Gst.State.READY)
+            if res == Gst.StateChangeReturn.SUCCESS:
+                videosink_factory = sink.get_factory()
+                sink.set_state(Gst.State.NULL)
 
-    if videosink_factory:
-        return True
+    if not videosink_factory:
+        videosink_factory = Gst.ElementFactory.find("gtksink")
 
-    return False
+    return videosink_factory
 
 
 def _check_gst_python():


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