summaryrefslogtreecommitdiff
path: root/farstream
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2012-01-27 16:50:08 +0100
committerOlivier CrĂȘte <olivier.crete@collabora.com>2012-07-31 16:08:54 +0200
commited911efc60de1538c4e24ca01f376e25c09a4124 (patch)
tree45412690737447ab5ec60c2d713fd264274ced55 /farstream
parentfb74f736e23844bbf289011f9bff7ad91581af18 (diff)
downloadfarstream-ed911efc60de1538c4e24ca01f376e25c09a4124.tar.gz
Port to GStreamer 0.11
Diffstat (limited to 'farstream')
-rw-r--r--farstream/fs-conference.c17
-rw-r--r--farstream/fs-element-added-notifier.c85
-rw-r--r--farstream/fs-plugin.c2
-rw-r--r--farstream/fs-stream.c39
-rw-r--r--farstream/fs-transmitter.c8
5 files changed, 81 insertions, 70 deletions
diff --git a/farstream/fs-conference.c b/farstream/fs-conference.c
index 160c69cf..58edb776 100644
--- a/farstream/fs-conference.c
+++ b/farstream/fs-conference.c
@@ -62,9 +62,7 @@ GST_DEBUG_CATEGORY (fs_conference_debug);
#define GST_CAT_DEFAULT fs_conference_debug
-GST_BOILERPLATE (
- FsConference, fs_conference,
- GstBin, GST_TYPE_BIN)
+G_DEFINE_ABSTRACT_TYPE (FsConference, fs_conference,GST_TYPE_BIN)
GQuark
@@ -81,22 +79,15 @@ _fs_conference_init_debug (void)
}
static void
-fs_conference_base_init (gpointer g_class)
-{
- _fs_conference_init_debug ();
-}
-
-
-
-static void
fs_conference_class_init (FsConferenceClass * klass)
{
+ _fs_conference_init_debug ();
}
static void
-fs_conference_init (FsConference *conf, FsConferenceClass *bclass)
+fs_conference_init (FsConference *conf)
{
- GST_DEBUG ("fs_conference_init");
+ GST_DEBUG_OBJECT (conf, "fs_conference_init");
}
diff --git a/farstream/fs-element-added-notifier.c b/farstream/fs-element-added-notifier.c
index 637a3937..aac3da63 100644
--- a/farstream/fs-element-added-notifier.c
+++ b/farstream/fs-element-added-notifier.c
@@ -158,45 +158,53 @@ fs_element_added_notifier_add (FsElementAddedNotifier *notifier,
}
+
static void
-_bin_unparented_cb (GstObject *object, GstObject *parent, gpointer user_data)
+_element_removed_callback (GstBin *bin, GstElement *element,
+ FsElementAddedNotifier *notifier)
{
- GstIterator *iter = NULL;
- gboolean done;
/* Return if there was no handler connected */
- if (g_signal_handlers_disconnect_by_func (object, _element_added_callback,
- user_data) == 0)
+ if (g_signal_handlers_disconnect_by_func (element, _element_added_callback,
+ notifier) == 0 ||
+ g_signal_handlers_disconnect_by_func (element, _element_removed_callback,
+ notifier) == 0)
return;
- iter = gst_bin_iterate_elements (GST_BIN (object));
-
- done = FALSE;
- while (!done)
+ if (GST_IS_BIN (element))
{
- gpointer item;
-
- switch (gst_iterator_next (iter, &item)) {
- case GST_ITERATOR_OK:
- if (GST_IS_BIN (item))
- _bin_unparented_cb (GST_OBJECT (item), object, user_data);
- gst_object_unref (item);
- break;
- case GST_ITERATOR_RESYNC:
- // We don't rollback anything, we just ignore already processed ones
- gst_iterator_resync (iter);
- break;
- case GST_ITERATOR_ERROR:
- g_error ("Wrong parameters were given?");
- done = TRUE;
- break;
- case GST_ITERATOR_DONE:
- done = TRUE;
- break;
+ GstIterator *iter = NULL;
+ gboolean done;
+ iter = gst_bin_iterate_elements (GST_BIN (element));
+
+ done = FALSE;
+ while (!done)
+ {
+ GValue item = {0,};
+
+ switch (gst_iterator_next (iter, &item)) {
+ case GST_ITERATOR_OK:
+ _element_removed_callback (GST_BIN (element),
+ GST_ELEMENT (g_value_get_object (&item)),
+ notifier);
+ g_value_reset (&item);
+ break;
+ case GST_ITERATOR_RESYNC:
+ // We don't rollback anything, we just ignore already processed ones
+ gst_iterator_resync (iter);
+ break;
+ case GST_ITERATOR_ERROR:
+ g_error ("Wrong parameters were given?");
+ done = TRUE;
+ break;
+ case GST_ITERATOR_DONE:
+ done = TRUE;
+ break;
+ }
}
- }
- gst_iterator_free (iter);
+ gst_iterator_free (iter);
+ }
}
@@ -222,7 +230,7 @@ fs_element_added_notifier_remove (FsElementAddedNotifier *notifier,
0, 0, NULL, /* id, detail, closure */
_element_added_callback, notifier) != 0)
{
- _bin_unparented_cb (GST_OBJECT (bin), NULL, notifier);
+ _element_removed_callback (NULL, GST_ELEMENT (bin), notifier);
return TRUE;
}
else
@@ -380,26 +388,27 @@ _element_added_callback (GstBin *parent, GstElement *element,
g_signal_connect_object (element, "element-added",
G_CALLBACK (_element_added_callback), notifier, 0);
- if (parent)
- g_signal_connect_object (element, "parent-unset",
- G_CALLBACK (_bin_unparented_cb), notifier, 0);
+
+ g_signal_connect_object (element, "element-removed",
+ G_CALLBACK (_element_removed_callback), notifier, 0);
iter = gst_bin_iterate_elements (GST_BIN (element));
done = FALSE;
while (!done)
{
- gpointer item = NULL;
+ GValue item = {0,};
switch (gst_iterator_next (iter, &item)) {
case GST_ITERATOR_OK:
/* We make sure the callback has not already been added */
- if (g_signal_handler_find (item,
+ if (g_signal_handler_find (g_value_get_object (&item),
G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
0, 0, NULL, /* id, detail, closure */
_element_added_callback, notifier) == 0)
- _element_added_callback (GST_BIN_CAST (element), item, notifier);
- gst_object_unref (item);
+ _element_added_callback (GST_BIN_CAST (element),
+ g_value_get_object (&item), notifier);
+ g_value_reset (&item);
break;
case GST_ITERATOR_RESYNC:
// We don't rollback anything, we just ignore already processed ones
diff --git a/farstream/fs-plugin.c b/farstream/fs-plugin.c
index 423cf719..578a15e3 100644
--- a/farstream/fs-plugin.c
+++ b/farstream/fs-plugin.c
@@ -315,6 +315,8 @@ fs_plugin_list_available (const gchar *type_suffix)
GError *error = NULL;
gchar *tmp1, *tmp2, *tmp3;
+ _fs_conference_init_debug ();
+
g_static_mutex_lock (&mutex);
fs_plugin_search_path_init ();
diff --git a/farstream/fs-stream.c b/farstream/fs-stream.c
index 110641d8..28a101fc 100644
--- a/farstream/fs-stream.c
+++ b/farstream/fs-stream.c
@@ -147,6 +147,7 @@ struct _FsStreamPrivate
G_DEFINE_ABSTRACT_TYPE(FsStream, fs_stream, GST_TYPE_OBJECT);
+static void fs_stream_constructed (GObject *obj);
static void fs_stream_get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -157,6 +158,8 @@ static void fs_stream_set_property (GObject *object,
GParamSpec *pspec);
static void fs_stream_finalize (GObject *obj);
+static void fs_stream_pad_removed (FsStream *stream, GstPad *pad);
+
static guint signals[LAST_SIGNAL] = { 0 };
#define FS_STREAM_LOCK(self) g_mutex_lock((self)->priv->mutex)
@@ -172,6 +175,8 @@ fs_stream_class_init (FsStreamClass *klass)
gobject_class->set_property = fs_stream_set_property;
gobject_class->get_property = fs_stream_get_property;
gobject_class->finalize = fs_stream_finalize;
+ gobject_class->constructed = fs_stream_constructed;
+
/**
* FsStream:remote-codecs:
@@ -336,6 +341,22 @@ fs_stream_init (FsStream *self)
}
static void
+fs_stream_constructed (GObject *obj)
+{
+ FsStream *stream = FS_STREAM (obj);
+ FsSession *session;
+ FsConference *conference;
+
+ g_object_get (stream, "session", &session, NULL);
+ g_object_get (session, "conference", &conference, NULL);
+
+ g_signal_connect_object (conference, "pad-removed",
+ G_CALLBACK (fs_stream_pad_removed), obj, G_CONNECT_SWAPPED);
+ g_object_unref (session);
+ g_object_unref (conference);
+}
+
+static void
fs_stream_finalize (GObject *obj)
{
FsStream *stream = FS_STREAM (obj);
@@ -529,12 +550,10 @@ fs_stream_emit_error (FsStream *stream,
static void
-src_pad_parent_unset (GstObject *srcpad, GstObject *parent, gpointer user_data)
+fs_stream_pad_removed (FsStream *stream, GstPad *pad)
{
- FsStream *stream = FS_STREAM (user_data);
-
FS_STREAM_LOCK (stream);
- stream->priv->src_pads = g_list_remove (stream->priv->src_pads, srcpad);
+ stream->priv->src_pads = g_list_remove (stream->priv->src_pads, pad);
stream->priv->src_pads_cookie++;
FS_STREAM_UNLOCK (stream);
}
@@ -558,21 +577,11 @@ fs_stream_emit_src_pad_added (FsStream *stream,
g_assert (!g_list_find (stream->priv->src_pads, pad));
stream->priv->src_pads = g_list_append (stream->priv->src_pads, pad);
stream->priv->src_pads_cookie++;
- g_signal_connect_object (pad, "parent-unset",
- G_CALLBACK (src_pad_parent_unset), stream, 0);
FS_STREAM_UNLOCK (stream);
g_signal_emit (stream, signals[SRC_PAD_ADDED], 0, pad, codec);
}
-static GstIteratorItem
-src_pad_iterator_item_func (GstIterator*iter, gpointer item)
-{
- gst_object_ref (item);
-
- return GST_ITERATOR_ITEM_PASS;
-}
-
/**
* fs_stream_iterate_src_pads:
* @stream: a #FsStream
@@ -589,7 +598,7 @@ fs_stream_iterate_src_pads (FsStream *stream)
{
return gst_iterator_new_list (GST_TYPE_PAD, stream->priv->mutex,
&stream->priv->src_pads_cookie, &stream->priv->src_pads,
- g_object_ref (stream), src_pad_iterator_item_func, g_object_unref);
+ g_object_ref (stream), NULL);
}
diff --git a/farstream/fs-transmitter.c b/farstream/fs-transmitter.c
index d0c52c18..419ac65c 100644
--- a/farstream/fs-transmitter.c
+++ b/farstream/fs-transmitter.c
@@ -107,8 +107,8 @@ fs_transmitter_class_init (FsTransmitterClass *klass)
* FsTransmitter:gst-src:
*
* A network source #GstElement to be used by the #FsSession
- * This element MUST provide a source pad named "src%d" per component.
- * These pads number must start at 1 (the %d corresponds to the component
+ * This element MUST provide a source pad named "src_%u" per component.
+ * These pads number must start at 1 (the %u corresponds to the component
* number).
* These pads MUST be static pads.
*
@@ -126,8 +126,8 @@ fs_transmitter_class_init (FsTransmitterClass *klass)
*
* A network source #GstElement to be used by the #FsSession
* These element's sink must have async=FALSE
- * This element MUST provide a pad named "sink\%d" per component.
- * These pads number must start at 1 (the \%d corresponds to the component
+ * This element MUST provide a pad named "sink_\%u" per component.
+ * These pads number must start at 1 (the \%u corresponds to the component
* number).
* These pads MUST be static pads.
*