diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-08-26 17:02:45 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-08-31 08:09:09 +0200 |
commit | 000a483d31bf307370ef3dd990c991ed34dd0ef9 (patch) | |
tree | c2f11ef51014044b78d343e11df1d1aff7581dd6 /gst/rtpmanager/gstrtpssrcdemux.c | |
parent | a1cddb3fd6dac8f261590231a22d6d92f1bb8a66 (diff) |
rtp: Use new gst_iterator_new_single() for the internal linked pads iteration
Diffstat (limited to 'gst/rtpmanager/gstrtpssrcdemux.c')
-rw-r--r-- | gst/rtpmanager/gstrtpssrcdemux.c | 94 |
1 files changed, 19 insertions, 75 deletions
diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c index cbf56193..6c5b0450 100644 --- a/gst/rtpmanager/gstrtpssrcdemux.c +++ b/gst/rtpmanager/gstrtpssrcdemux.c @@ -619,95 +619,39 @@ gst_rtp_ssrc_demux_src_event (GstPad * pad, GstEvent * event) return res; } -typedef struct +static GstIterator * +gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad) { - GstIterator parent; - GstRtpSsrcDemux *demux; - GstPad *pad; + GstPad *otherpad = NULL; + GstIterator *it; GSList *current; -} GstRtpSsrcDemuxIterator; - -static void -_iterate_free (GstIterator * it) -{ - GstRtpSsrcDemuxIterator *dit = (GstRtpSsrcDemuxIterator *) it; - - 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; + demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad)); - for (current = dit->current; current; current = g_slist_next (current)) { + GST_PAD_LOCK (demux); + for (current = demux->srcpads; current; current = g_slist_next (current)) { GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) current->data; - if (dit->pad == dit->demux->rtp_sink) { - res = dpad->rtp_pad; + if (pad == demux->rtp_sink) { + otherpad = 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; + } else if (pad == demux->rtcp_sink) { + otherpad = dpad->rtcp_pad; + } else if (pad == dpad->rtp_pad) { + otherpad = demux->rtp_sink; break; - } else if (dit->pad == dpad->rtcp_pad) { - res = dit->demux->rtcp_sink; + } else if (pad == dpad->rtcp_pad) { + otherpad = demux->rtcp_sink; break; } } - - *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; + it = gst_iterator_new_single (GST_TYPE_PAD, otherpad, + (GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref); + GST_PAD_UNLOCK (demux); gst_object_unref (demux); - return (GstIterator *) it; + return it; } static gboolean |