summaryrefslogtreecommitdiffstats
path: root/gst/rtpmanager
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-19 16:48:25 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-08-31 08:09:08 +0200
commitc8c02d2c7aebc0956c1e111ad1570b49010e3f8b (patch)
tree06759fadcd7209ab657087d223c8629f3170c4ee /gst/rtpmanager
parent97cb7bdb6ca5abf1bd85ee16bd837b1b285ace9f (diff)
jitterbuffer: Use iterate internal links instead of deprecated get internal links
Diffstat (limited to 'gst/rtpmanager')
-rw-r--r--gst/rtpmanager/gstrtpjitterbuffer.c89
1 files changed, 75 insertions, 14 deletions
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 55126054..c0ee8464 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -242,7 +242,7 @@ static void gst_rtp_jitter_buffer_release_pad (GstElement * element,
/* pad overrides */
static GstCaps *gst_rtp_jitter_buffer_getcaps (GstPad * pad);
-static GList *gst_rtp_jitter_buffer_internal_links (GstPad * pad);
+static GstIterator *gst_rtp_jitter_buffer_iterate_internal_links (GstPad * pad);
/* sinkpad overrides */
static gboolean gst_jitter_buffer_sink_setcaps (GstPad * pad, GstCaps * caps);
@@ -466,27 +466,88 @@ gst_rtp_jitter_buffer_finalize (GObject * object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-static GList *
-gst_rtp_jitter_buffer_internal_links (GstPad * pad)
+typedef struct
{
+ GstIterator parent;
+
GstRtpJitterBuffer *jitterbuffer;
+ GstPad *pad;
+ gboolean start;
+} GstRtpJitterBufferIterator;
+
+static void
+_iterate_free (GstIterator * it)
+{
+ GstRtpJitterBufferIterator *jit = (GstRtpJitterBufferIterator *) it;
+
+ g_object_unref (jit->jitterbuffer);
+ g_object_unref (jit->pad);
+
+ g_free (it);
+}
+
+static GstIteratorResult
+_iterate_next (GstIterator * it, gpointer * result)
+{
+ GstRtpJitterBufferIterator *jit = (GstRtpJitterBufferIterator *) it;
+ GstPad *res = NULL;
GstRtpJitterBufferPrivate *priv;
- GList *res = NULL;
- jitterbuffer = GST_RTP_JITTER_BUFFER (gst_pad_get_parent (pad));
- priv = jitterbuffer->priv;
+ priv = jit->jitterbuffer->priv;
- if (pad == priv->sinkpad) {
- res = g_list_prepend (res, priv->srcpad);
- } else if (pad == priv->srcpad) {
- res = g_list_prepend (res, priv->sinkpad);
- } else if (pad == priv->rtcpsinkpad) {
+ if (!jit->start) {
+ /* go out */
+ } else if (jit->pad == priv->sinkpad) {
+ res = priv->srcpad;
+ } else if (jit->pad == priv->srcpad) {
+ res = priv->sinkpad;
+ } else if (jit->pad == priv->rtcpsinkpad) {
res = NULL;
}
+ *result = res;
+
+ 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)
+{
+ GstRtpJitterBufferIterator *jit = (GstRtpJitterBufferIterator *) it;
+
+ jit->start = TRUE;
+}
+
+static GstIterator *
+gst_rtp_jitter_buffer_iterate_internal_links (GstPad * pad)
+{
+ GstRtpJitterBuffer *jitterbuffer;
+ GstRtpJitterBufferIterator *it;
+
+ jitterbuffer = GST_RTP_JITTER_BUFFER (gst_pad_get_parent (pad));
+
+ it = (GstRtpJitterBufferIterator *)
+ gst_iterator_new (sizeof (GstRtpJitterBufferIterator),
+ GST_TYPE_PAD,
+ GST_OBJECT_CAST (jitterbuffer)->lock,
+ &GST_ELEMENT_CAST (jitterbuffer)->pads_cookie,
+ _iterate_next, _iterate_item, _iterate_resync, _iterate_free);
+ it->start = TRUE;
+ it->jitterbuffer = gst_object_ref (jitterbuffer);
+ it->pad = gst_object_ref (pad);
+
gst_object_unref (jitterbuffer);
- return res;
+ return (GstIterator *) it;
}
static GstPad *
@@ -505,8 +566,8 @@ create_rtcp_sink (GstRtpJitterBuffer * jitterbuffer)
gst_rtp_jitter_buffer_chain_rtcp);
gst_pad_set_event_function (priv->rtcpsinkpad,
(GstPadEventFunction) gst_rtp_jitter_buffer_sink_rtcp_event);
- gst_pad_set_internal_link_function (priv->rtcpsinkpad,
- gst_rtp_jitter_buffer_internal_links);
+ gst_pad_set_iterate_internal_links_function (priv->rtcpsinkpad,
+ gst_rtp_jitter_buffer_iterate_internal_links);
gst_pad_set_active (priv->rtcpsinkpad, TRUE);
gst_element_add_pad (GST_ELEMENT_CAST (jitterbuffer), priv->rtcpsinkpad);