[Telepathy-commits] [mingle/master] Use gconfvideosink
Sjoerd Simons
sjoerd.simons at collabora.co.uk
Wed Dec 10 11:01:54 PST 2008
---
mingle-client.py | 42 +++++++++++++++++++++++++++++++++++-------
1 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/mingle-client.py b/mingle-client.py
index 62b6a7b..9ba4716 100644
--- a/mingle-client.py
+++ b/mingle-client.py
@@ -40,8 +40,24 @@ class VideoSink(gtk.DrawingArea):
gtk.DrawingArea.__init__(self)
self.set_double_buffered(False)
self.set_size_request (320, 240)
- self.sink = gst.element_factory_make("xvimagesink")
- self.sink.set_property("force-aspect-ratio", True)
+ self.vsink = None
+ self.sink = bin = gst.Bin()
+
+ bin.connect ("element-added", self.element_added_cb)
+
+ colorspace = gst.element_factory_make("ffmpegcolorspace")
+ videoscale = gst.element_factory_make("videoscale")
+ vsink = gst.element_factory_make("gconfvideosink")
+
+ bin.add(colorspace)
+ bin.add(videoscale)
+ bin.add(vsink)
+
+ colorspace.link(videoscale)
+ videoscale.link(vsink)
+
+ bin.add_pad(gst.GhostPad("sink", colorspace.get_pad("sink")))
+
bus = pipeline.get_bus()
bus.enable_sync_message_emission()
bus.connect("sync-message", self.sync_handler)
@@ -51,6 +67,19 @@ class VideoSink(gtk.DrawingArea):
self.connect ("expose-event", self.expose_event)
+ def element_added_cb (self, bin, element):
+ if isinstance(element, gst.Bin):
+ element.connect ("element-added", self.element_added_cb)
+ for e in element.elements():
+ self.element_added_cb (element, e)
+
+ if isinstance(element, gst.interfaces.XOverlay):
+ self.vsink = element
+ try:
+ self.sink.set_property("force-aspect-ratio", True)
+ except Exception:
+ pass
+
def expose_event(self, *args):
if not self.exposed:
self.exposedc.acquire()
@@ -59,16 +88,15 @@ class VideoSink(gtk.DrawingArea):
self.exposedc.release()
def sync_handler(self, bus, message):
- if message.src == self.sink and \
+ if message.src == self.vsink and \
message.type == gst.MESSAGE_ELEMENT and \
message.structure.has_name("prepare-xwindow-id"):
-
self.exposedc.acquire()
while not self.exposed:
self.exposedc.wait()
gtk.gdk.threads_enter()
- self.sink.set_xwindow_id (self.window.xid)
+ self.vsink.set_xwindow_id (self.window.xid)
gtk.gdk.threads_leave()
self.exposedc.release()
@@ -93,7 +121,7 @@ class UI(gtk.Window):
self.preview_frame = gtk.Frame("Local Preview")
self.preview_frame.set_size_request(self.WIDTH, self.HEIGHT)
- self.hbox.add(self.preview_frame)
+ self.hbox.pack_start(self.preview_frame, False, False, 3)
self.hbox.add(self.label)
self.conference = conference
self.set_title(jid.userhost())
@@ -108,7 +136,7 @@ class UI(gtk.Window):
vsink = VideoSink(self.conference)
session.source.add(vsink.sink)
- vsink.sink.set_property("sync", False)
+ #vsink.sink.set_property("sync", False)
pad.link(vsink.sink.get_pad("sink"))
vsink.sink.set_state(gst.STATE_PLAYING)
--
1.5.6.5
More information about the Telepathy-commits
mailing list