mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
elements: Update everything for the new GstIterator API
This commit is contained in:
parent
98d1ee4a8f
commit
caa16f2fa9
4 changed files with 26 additions and 16 deletions
|
@ -357,6 +357,7 @@ gst_funnel_src_event (GstPad * pad, GstEvent * event)
|
||||||
GstPad *sinkpad;
|
GstPad *sinkpad;
|
||||||
gboolean result = FALSE;
|
gboolean result = FALSE;
|
||||||
gboolean done = FALSE;
|
gboolean done = FALSE;
|
||||||
|
GValue value = { 0, };
|
||||||
|
|
||||||
funnel = gst_pad_get_parent_element (pad);
|
funnel = gst_pad_get_parent_element (pad);
|
||||||
if (G_UNLIKELY (funnel == NULL)) {
|
if (G_UNLIKELY (funnel == NULL)) {
|
||||||
|
@ -367,11 +368,12 @@ gst_funnel_src_event (GstPad * pad, GstEvent * event)
|
||||||
iter = gst_element_iterate_sink_pads (funnel);
|
iter = gst_element_iterate_sink_pads (funnel);
|
||||||
|
|
||||||
while (!done) {
|
while (!done) {
|
||||||
switch (gst_iterator_next (iter, (gpointer) & sinkpad)) {
|
switch (gst_iterator_next (iter, &value)) {
|
||||||
case GST_ITERATOR_OK:
|
case GST_ITERATOR_OK:
|
||||||
|
sinkpad = g_value_get_object (&value);
|
||||||
gst_event_ref (event);
|
gst_event_ref (event);
|
||||||
result |= gst_pad_push_event (sinkpad, event);
|
result |= gst_pad_push_event (sinkpad, event);
|
||||||
gst_object_unref (sinkpad);
|
g_value_reset (&value);
|
||||||
break;
|
break;
|
||||||
case GST_ITERATOR_RESYNC:
|
case GST_ITERATOR_RESYNC:
|
||||||
gst_iterator_resync (iter);
|
gst_iterator_resync (iter);
|
||||||
|
@ -384,6 +386,7 @@ gst_funnel_src_event (GstPad * pad, GstEvent * event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
g_value_unset (&value);
|
||||||
gst_iterator_free (iter);
|
gst_iterator_free (iter);
|
||||||
gst_object_unref (funnel);
|
gst_object_unref (funnel);
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
@ -392,15 +395,14 @@ gst_funnel_src_event (GstPad * pad, GstEvent * event)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reset_pad (gpointer data, gpointer user_data)
|
reset_pad (const GValue * data, gpointer user_data)
|
||||||
{
|
{
|
||||||
GstPad *pad = data;
|
GstPad *pad = g_value_get_object (data);
|
||||||
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
|
GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (pad);
|
GST_OBJECT_LOCK (pad);
|
||||||
gst_funnel_pad_reset (fpad);
|
gst_funnel_pad_reset (fpad);
|
||||||
GST_OBJECT_UNLOCK (pad);
|
GST_OBJECT_UNLOCK (pad);
|
||||||
gst_object_unref (pad);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
|
|
|
@ -329,14 +329,17 @@ gst_selector_pad_iterate_linked_pads (GstPad * pad)
|
||||||
GstInputSelector *sel;
|
GstInputSelector *sel;
|
||||||
GstPad *otherpad;
|
GstPad *otherpad;
|
||||||
GstIterator *it;
|
GstIterator *it;
|
||||||
|
GValue val = { 0, };
|
||||||
|
|
||||||
sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad));
|
sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad));
|
||||||
if (G_UNLIKELY (sel == NULL))
|
if (G_UNLIKELY (sel == NULL))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
otherpad = gst_input_selector_get_linked_pad (sel, pad, TRUE);
|
otherpad = gst_input_selector_get_linked_pad (sel, pad, TRUE);
|
||||||
it = gst_iterator_new_single (GST_TYPE_PAD, otherpad,
|
g_value_init (&val, GST_TYPE_PAD);
|
||||||
(GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref);
|
g_value_set_object (&val, otherpad);
|
||||||
|
it = gst_iterator_new_single (GST_TYPE_PAD, &val);
|
||||||
|
g_value_unset (&val);
|
||||||
|
|
||||||
if (otherpad)
|
if (otherpad)
|
||||||
gst_object_unref (otherpad);
|
gst_object_unref (otherpad);
|
||||||
|
|
|
@ -550,6 +550,7 @@ gst_multi_queue_iterate_internal_links (GstPad * pad)
|
||||||
GstPad *opad;
|
GstPad *opad;
|
||||||
GstSingleQueue *squeue;
|
GstSingleQueue *squeue;
|
||||||
GstMultiQueue *mq = GST_MULTI_QUEUE (gst_pad_get_parent (pad));
|
GstMultiQueue *mq = GST_MULTI_QUEUE (gst_pad_get_parent (pad));
|
||||||
|
GValue val = { 0, };
|
||||||
|
|
||||||
GST_MULTI_QUEUE_MUTEX_LOCK (mq);
|
GST_MULTI_QUEUE_MUTEX_LOCK (mq);
|
||||||
squeue = gst_pad_get_element_private (pad);
|
squeue = gst_pad_get_element_private (pad);
|
||||||
|
@ -563,8 +564,10 @@ gst_multi_queue_iterate_internal_links (GstPad * pad)
|
||||||
else
|
else
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
it = gst_iterator_new_single (GST_TYPE_PAD, opad,
|
g_value_init (&val, GST_TYPE_PAD);
|
||||||
(GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref);
|
g_value_set_object (&val, opad);
|
||||||
|
it = gst_iterator_new_single (GST_TYPE_PAD, &val);
|
||||||
|
g_value_unset (&val);
|
||||||
|
|
||||||
gst_object_unref (opad);
|
gst_object_unref (opad);
|
||||||
|
|
||||||
|
|
|
@ -472,6 +472,7 @@ gst_tee_sink_acceptcaps (GstPad * pad, GstCaps * caps)
|
||||||
GstTee *tee;
|
GstTee *tee;
|
||||||
gboolean res, done;
|
gboolean res, done;
|
||||||
GstIterator *it;
|
GstIterator *it;
|
||||||
|
GValue item = { 0, };
|
||||||
|
|
||||||
tee = GST_TEE_CAST (GST_PAD_PARENT (pad));
|
tee = GST_TEE_CAST (GST_PAD_PARENT (pad));
|
||||||
|
|
||||||
|
@ -480,12 +481,10 @@ gst_tee_sink_acceptcaps (GstPad * pad, GstCaps * caps)
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
done = FALSE;
|
done = FALSE;
|
||||||
while (!done && res) {
|
while (!done && res) {
|
||||||
gpointer item;
|
|
||||||
|
|
||||||
switch (gst_iterator_next (it, &item)) {
|
switch (gst_iterator_next (it, &item)) {
|
||||||
case GST_ITERATOR_OK:
|
case GST_ITERATOR_OK:
|
||||||
res &= gst_pad_peer_accept_caps (GST_PAD_CAST (item), caps);
|
res &= gst_pad_peer_accept_caps (g_value_get_object (&item), caps);
|
||||||
gst_object_unref (item);
|
g_value_reset (&item);
|
||||||
break;
|
break;
|
||||||
case GST_ITERATOR_RESYNC:
|
case GST_ITERATOR_RESYNC:
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
|
@ -500,6 +499,7 @@ gst_tee_sink_acceptcaps (GstPad * pad, GstCaps * caps)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
g_value_unset (&item);
|
||||||
gst_iterator_free (it);
|
gst_iterator_free (it);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -864,11 +864,12 @@ cannot_pull_multiple_srcs:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_tee_push_eos (GstPad * pad, GstTee * tee)
|
gst_tee_push_eos (const GValue * vpad, GstTee * tee)
|
||||||
{
|
{
|
||||||
|
GstPad *pad = g_value_get_object (vpad);
|
||||||
|
|
||||||
if (pad != tee->pull_pad)
|
if (pad != tee->pull_pad)
|
||||||
gst_pad_push_event (pad, gst_event_new_eos ());
|
gst_pad_push_event (pad, gst_event_new_eos ());
|
||||||
gst_object_unref (pad);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -877,7 +878,8 @@ gst_tee_pull_eos (GstTee * tee)
|
||||||
GstIterator *iter;
|
GstIterator *iter;
|
||||||
|
|
||||||
iter = gst_element_iterate_src_pads (GST_ELEMENT (tee));
|
iter = gst_element_iterate_src_pads (GST_ELEMENT (tee));
|
||||||
gst_iterator_foreach (iter, (GFunc) gst_tee_push_eos, tee);
|
gst_iterator_foreach (iter, (GstIteratorForeachFunction) gst_tee_push_eos,
|
||||||
|
tee);
|
||||||
gst_iterator_free (iter);
|
gst_iterator_free (iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue