[Telepathy-commits] [multi-jingle/master] Don't inhering from gstreamer objects

Sjoerd Simons sjoerd.simons at collabora.co.uk
Wed Jan 14 08:55:54 PST 2009


---
 fs2.py |   95 +++++++++++++++++++++++++++++++++-------------------------------
 1 files changed, 49 insertions(+), 46 deletions(-)

diff --git a/fs2.py b/fs2.py
index e25fe46..67587c4 100644
--- a/fs2.py
+++ b/fs2.py
@@ -78,50 +78,51 @@ def make_video_sink(pipeline, xid, name, async=True):
     return bin
 
 
-class VideoSource(gst.Bin):
-    def __init__(self):
-        gst.Bin.__init__(self)
-        if os.environ.has_key("VIDEO_DEVICE"):
-            source = gst.element_factory_make("v4l2src")
-            source.set_property("device", os.environ["VIDEO_DEVICE"])
-        else:
-            source = gst.element_factory_make("videotestsrc")
-            source.set_property("is-live", True)
+def make_video_source():
+    bin = gst.Bin()
+    if os.environ.has_key("VIDEO_DEVICE"):
+        source = gst.element_factory_make("v4l2src")
+        source.set_property("device", os.environ["VIDEO_DEVICE"])
+    else:
+        source = gst.element_factory_make("videotestsrc")
+        source.set_property("is-live", True)
 
-        self.add(source)
+    bin.add(source)
 
-        rate = gst.element_factory_make("videorate")
-        self.add(rate)
-        source.link(rate)
+    rate = gst.element_factory_make("videorate")
+    bin.add(rate)
+    source.link(rate)
 
-        filter = gst.element_factory_make("capsfilter")
-        filter.set_property("caps",
-          gst.Caps("video/x-raw-yuv,width=320,height=240," + \
-            "framerate=(fraction)15/1"))
+    filter = gst.element_factory_make("capsfilter")
+    filter.set_property("caps",
+      gst.Caps("video/x-raw-yuv,width=320,height=240," + \
+        "framerate=(fraction)15/1"))
 
 
-        self.add(filter)
-        rate.link(filter)
+    bin.add(filter)
+    rate.link(filter)
 
-        tee = gst.element_factory_make("tee")
-        self.tee = tee
-        self.add(tee)
-        filter.link(tee)
+    tee = gst.element_factory_make("tee")
+    bin.tee = tee
+    bin.add(tee)
+    filter.link(tee)
 
-        pad = gst.GhostPad("src", tee.get_pad("src%d"))
-        self.add_pad(pad)
+    pad = gst.GhostPad("src", tee.get_pad("src%d"))
+    bin.add_pad(pad)
 
-class AudioSource(gst.Bin):
-    def __init__(self):
-        gst.Bin.__init__(self)
-        if os.environ.has_key("TESTAUDIO"):
-            source = gst.element_factory_make("audiotestsrc")
-            source.set_property("is-live", True)
-        else:
-            source = gst.element_factory_make("gconfaudiosrc")
-        self.add(source)
-        pad = gst.GhostPad("src", source.get_pad("src"))
-        self.add_pad(pad)
+    return bin
+
+def make_audio_source():
+    bin =gst.Bin()
+    if os.environ.has_key("TESTAUDIO"):
+        source = gst.element_factory_make("audiotestsrc")
+        source.set_property("is-live", True)
+    else:
+        source = gst.element_factory_make("gconfaudiosrc")
+    bin.add(source)
+    pad = gst.GhostPad("src", source.get_pad("src"))
+    bin.add_pad(pad)
+    return bin
 
 class ConferenceStream:
     def __init__(self, conference, session, fsstream):
@@ -176,7 +177,7 @@ class ConferenceStream:
         for sink in self.sinks:
             sink.set_locked_state(True)
             sink.set_state(gst.STATE_NULL)
-            self.conference.remove(sink)
+            self.conference.pipeline.remove(sink)
         self.sinks = []
 
         # Ensure that there are no refs left to the _fsstream
@@ -191,6 +192,7 @@ class ConferenceSession:
         self.type = type
         self.fssession = session
         self.codecs_ready_defereds = []
+        self.source = None
 
         codecs = [
           farsight.Codec(farsight.CODEC_ID_ANY, name, type, 0)
@@ -206,13 +208,13 @@ class ConferenceSession:
         session.set_codec_preferences(codecs)
 
         if type == farsight.MEDIA_TYPE_VIDEO:
-            source = VideoSource()
+            source = make_video_source()
         elif type == farsight.MEDIA_TYPE_AUDIO:
-            source = AudioSource()
+            source = make_audio_source()
         else:
             raise "Unknown source type"
 
-        conference.add(source)
+        conference.pipeline.add(source)
 
         pad = session.get_property("sink-pad")
         spad = source.get_pad("src")
@@ -232,6 +234,7 @@ class ConferenceSession:
 
     def codecs_changed(self):
         id =  self.fssession.get_property("id")
+
         if self.fssession.get_property("codecs-ready"):
             defereds = self.codecs_ready_defereds
             self.codecs_ready_defereds = []
@@ -256,21 +259,21 @@ class ConferenceParticipant:
         self._fsparticipant = fsparticipant
         self.cname = cname
 
-class Conference(gst.Pipeline):
+class Conference:
     def __init__(self):
-        gst.Pipeline.__init__(self)
+        self.pipeline = gst.Pipeline()
 
         notifier = farsight.ElementAddedNotifier()
         notifier.connect("element-added", self.element_added_cb)
-        notifier.add(self)
+        notifier.add(self.pipeline)
 
-        self.get_bus().add_watch(self.async_handler)
+        self.pipeline.get_bus().add_watch(self.async_handler)
         self.conf = gst.element_factory_make("fsrtpconference")
 
         # Sets lets our own cname
         self.conf.set_property("sdes-cname", MYCNAME)
-        self.add(self.conf)
-        self.set_state(gst.STATE_PLAYING)
+        self.pipeline.add(self.conf)
+        self.pipeline.set_state(gst.STATE_PLAYING)
 
         self.fssessions = {}
         self.fsstreams = {}
-- 
1.5.6.5




More information about the Telepathy-commits mailing list