[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