[gst-cvs] gst-python: examples: Make xoverlay installation thread safe using the GDK lock.

Edward Hervey bilboed at kemper.freedesktop.org
Thu May 7 05:29:32 PDT 2009


Module: gst-python
Branch: master
Commit: 7743f1ad1e309fc1d073f777712c98bd0392eff0
URL:    http://cgit.freedesktop.org/gstreamer/gst-python/commit/?id=7743f1ad1e309fc1d073f777712c98bd0392eff0

Author: Jan Schmidt <thaytan at noraisin.net>
Date:   Wed May  6 23:38:08 2009 +0100

examples: Make xoverlay installation thread safe using the GDK lock.

We can't call into the GDK functions in our sync-message handler
without taking the GDK lock, so do so.

Partially fixes #581737

---

 examples/play.py         |    4 ++++
 examples/remuxer.py      |    3 +++
 examples/switch.py       |    3 +++
 examples/synchronizer.py |    3 +++
 4 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/examples/play.py b/examples/play.py
index a7522b4..4045dff 100644
--- a/examples/play.py
+++ b/examples/play.py
@@ -8,12 +8,14 @@ pygtk.require('2.0')
 import sys
 
 import gobject
+gobject.threads_init()
 
 import pygst
 pygst.require('0.10')
 import gst
 import gst.interfaces
 import gtk
+gtk.gdk.threads_init()
 
 class GstPlayer:
     def __init__(self, videowidget):
@@ -33,9 +35,11 @@ class GstPlayer:
             return
         if message.structure.get_name() == 'prepare-xwindow-id':
             # Sync with the X server before giving the X-id to the sink
+            gtk.gdk.threads_enter()
             gtk.gdk.display_get_default().sync()
             self.videowidget.set_sink(message.src)
             message.src.set_property('force-aspect-ratio', True)
+            gtk.gdk.threads_leave()
             
     def on_message(self, bus, message):
         t = message.type
diff --git a/examples/remuxer.py b/examples/remuxer.py
index 039e38c..fa32134 100644
--- a/examples/remuxer.py
+++ b/examples/remuxer.py
@@ -15,6 +15,7 @@ pygst.require('0.10')
 import gst
 import gst.interfaces
 import gtk
+gtk.gdk.threads_init()
 
 class GstPlayer:
     def __init__(self, videowidget):
@@ -33,9 +34,11 @@ class GstPlayer:
             return
         if message.structure.get_name() == 'prepare-xwindow-id':
             # Sync with the X server before giving the X-id to the sink
+            gtk.gdk.threads_enter()
             gtk.gdk.display_get_default().sync()
             self.videowidget.set_sink(message.src)
             message.src.set_property('force-aspect-ratio', True)
+            gtk.gdk.threads_leave()
             
     def on_message(self, bus, message):
         t = message.type
diff --git a/examples/switch.py b/examples/switch.py
index 7117843..3428571 100755
--- a/examples/switch.py
+++ b/examples/switch.py
@@ -15,6 +15,7 @@ pygst.require('0.10')
 import gst
 import gst.interfaces
 import gtk
+gtk.gdk.threads_init()
 
 class SwitchTest:
     def __init__(self, videowidget):
@@ -36,9 +37,11 @@ class SwitchTest:
             return
         if message.structure.get_name() == 'prepare-xwindow-id':
             # Sync with the X server before giving the X-id to the sink
+            gtk.gdk.threads_enter()
             gtk.gdk.display_get_default().sync()
             self.videowidget.set_sink(message.src)
             message.src.set_property('force-aspect-ratio', True)
+            gtk.gdk.threads_leave()
             
     def on_message(self, bus, message):
         t = message.type
diff --git a/examples/synchronizer.py b/examples/synchronizer.py
index f5eff50..656e332 100755
--- a/examples/synchronizer.py
+++ b/examples/synchronizer.py
@@ -15,6 +15,7 @@ pygst.require('0.10')
 import gst
 import gst.interfaces
 import gtk
+gtk.gdk.threads_init()
 
 class GstPlayer:
     def __init__(self, videowidget):
@@ -33,9 +34,11 @@ class GstPlayer:
             return
         if message.structure.get_name() == 'prepare-xwindow-id':
             # Sync with the X server before giving the X-id to the sink
+            gtk.gdk.threads_enter()
             gtk.gdk.display_get_default().sync()
             self.videowidget.set_sink(message.src)
             message.src.set_property('force-aspect-ratio', True)
+            gtk.gdk.threads_leave()
             
     def on_message(self, bus, message):
         t = message.type





More information about the Gstreamer-commits mailing list