[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