summaryrefslogtreecommitdiffstats
path: root/gst/rtpmanager
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-19 16:37:11 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-31 08:09:08 +0200
commit97cb7bdb6ca5abf1bd85ee16bd837b1b285ace9f (patch)
tree7e7b89af27aed66730a697757ed306854820bc6f /gst/rtpmanager
parenta04bd15571b6090bd93c3de61f799db37bb8c6f8 (diff)
rtpssrcdemux: Use iterate internal links instead of deprecated get internal links
Diffstat (limited to 'gst/rtpmanager')
-rw-r--r--gst/rtpmanager/gstrtpssrcdemux.c106
1 files changed, 83 insertions, 23 deletions
diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c
index 6a305d8e..cbf56193 100644
--- a/gst/rtpmanager/gstrtpssrcdemux.c
+++ b/gst/rtpmanager/gstrtpssrcdemux.c
@@ -128,7 +128,7 @@ static gboolean gst_rtp_ssrc_demux_rtcp_sink_event (GstPad * pad,
/* srcpad stuff */
static gboolean gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event);
-static GList *gst_rtp_ssrc_demux_internal_links (GstPad * pad);
+static GstIterator *gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad);
static gboolean gst_rtp_ssrc_demux_src_query (GstPad * pad, GstQuery * query);
static guint gst_rtp_ssrc_demux_signals[LAST_SIGNAL] = { 0 };
@@ -211,12 +211,12 @@ create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
gst_pad_set_event_function (rtp_pad, gst_rtp_ssrc_demux_src_event);
gst_pad_set_query_function (rtp_pad, gst_rtp_ssrc_demux_src_query);
- gst_pad_set_internal_link_function (rtp_pad,
- gst_rtp_ssrc_demux_internal_links);
+ gst_pad_set_iterate_internal_links_function (rtp_pad,
+ gst_rtp_ssrc_demux_iterate_internal_links);
gst_pad_set_active (rtp_pad, TRUE);
- gst_pad_set_internal_link_function (rtcp_pad,
- gst_rtp_ssrc_demux_internal_links);
+ gst_pad_set_iterate_internal_links_function (rtcp_pad,
+ gst_rtp_ssrc_demux_iterate_internal_links);
gst_pad_set_active (rtcp_pad, TRUE);
gst_element_add_pad (GST_ELEMENT_CAST (demux), rtp_pad);
@@ -619,35 +619,95 @@ gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event)
return res;
}
-static GList *
-gst_rtp_ssrc_demux_internal_links (GstPad * pad)
+typedef struct
{
+ GstIterator parent;
+
GstRtpSsrcDemux *demux;
- GList *res = NULL;
- GSList *walk;
+ GstPad *pad;
+ GSList *current;
+} GstRtpSsrcDemuxIterator;
- demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad));
+static void
+_iterate_free (GstIterator * it)
+{
+ GstRtpSsrcDemuxIterator *dit = (GstRtpSsrcDemuxIterator *) it;
- GST_PAD_LOCK (demux);
- for (walk = demux->srcpads; walk; walk = g_slist_next (walk)) {
- GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) walk->data;
+ g_object_unref (dit->demux);
+ g_object_unref (dit->pad);
+
+ g_free (it);
+}
+
+static GstIteratorResult
+_iterate_next (GstIterator * it, gpointer * result)
+{
+ GstRtpSsrcDemuxIterator *dit = (GstRtpSsrcDemuxIterator *) it;
+ GSList *current;
+ GstPad *res = NULL;
- if (pad == demux->rtp_sink) {
- res = g_list_prepend (res, dpad->rtp_pad);
- } else if (pad == demux->rtcp_sink) {
- res = g_list_prepend (res, dpad->rtcp_pad);
- } else if (pad == dpad->rtp_pad) {
- res = g_list_prepend (res, demux->rtp_sink);
+ for (current = dit->current; current; current = g_slist_next (current)) {
+ GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) current->data;
+
+ if (dit->pad == dit->demux->rtp_sink) {
+ res = dpad->rtp_pad;
+ break;
+ } else if (dit->pad == dit->demux->rtcp_sink) {
+ res = dpad->rtcp_pad;
+ } else if (dit->pad == dpad->rtp_pad) {
+ res = dit->demux->rtp_sink;
break;
- } else if (pad == dpad->rtcp_pad) {
- res = g_list_prepend (res, demux->rtcp_sink);
+ } else if (dit->pad == dpad->rtcp_pad) {
+ res = dit->demux->rtcp_sink;
break;
}
}
- GST_PAD_UNLOCK (demux);
+
+ *result = res;
+
+ dit->current = current;
+
+ return res ? GST_ITERATOR_OK : GST_ITERATOR_DONE;
+}
+
+static GstIteratorItem
+_iterate_item (GstIterator * it, gpointer item)
+{
+ GstPad *pad = (GstPad *) item;
+ gst_object_ref (pad);
+
+ return GST_ITERATOR_ITEM_PASS;
+}
+
+static void
+_iterate_resync (GstIterator * it)
+{
+ GstRtpSsrcDemuxIterator *dit = (GstRtpSsrcDemuxIterator *) it;
+
+ dit->current = dit->demux->srcpads;
+}
+
+static GstIterator *
+gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad)
+{
+ GstRtpSsrcDemux *demux;
+ GstRtpSsrcDemuxIterator *it;
+
+ demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad));
+
+ it = (GstRtpSsrcDemuxIterator *)
+ gst_iterator_new (sizeof (GstRtpSsrcDemuxIterator),
+ GST_TYPE_PAD,
+ demux->padlock,
+ &GST_ELEMENT_CAST (demux)->pads_cookie,
+ _iterate_next, _iterate_item, _iterate_resync, _iterate_free);
+
+ it->demux = gst_object_ref (demux);
+ it->pad = gst_object_ref (pad);
+ it->current = demux->srcpads;
gst_object_unref (demux);
- return res;
+ return (GstIterator *) it;
}
static gboolean