static GstIterator * gst_timecodewait_iterate_internal_links (GstPad * pad, GstObject * parent) { GstIterator *it = NULL; GstPad *opad; GValue val = G_VALUE_INIT; GstTimeCodeWait *self = GST_TIMECODEWAIT (parent); if (self->asinkpad == pad) opad = gst_object_ref (self->asrcpad); else if (self->asrcpad == pad) opad = gst_object_ref (self->asinkpad); else if (self->vsinkpad == pad) opad = gst_object_ref (self->vsrcpad); else if (self->vsrcpad == pad) opad = gst_object_ref (self->vsinkpad); else goto out; g_value_init (&val, GST_TYPE_PAD); g_value_set_object (&val, opad); it = gst_iterator_new_single (GST_TYPE_PAD, &val); g_value_unset (&val); gst_object_unref (opad); out: return it; }
static GstIterator * gst_rtp_ssrc_demux_iterate_internal_links_src (GstPad * pad, GstObject * parent) { GstRtpSsrcDemux *demux; GstPad *otherpad = NULL; GstIterator *it = NULL; GSList *current; demux = GST_RTP_SSRC_DEMUX (parent); GST_PAD_LOCK (demux); for (current = demux->srcpads; current; current = g_slist_next (current)) { GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) current->data; if (pad == dpad->rtp_pad) { otherpad = demux->rtp_sink; break; } else if (pad == dpad->rtcp_pad) { otherpad = demux->rtcp_sink; break; } } if (otherpad) { GValue val = { 0, }; g_value_init (&val, GST_TYPE_PAD); g_value_set_object (&val, otherpad); it = gst_iterator_new_single (GST_TYPE_PAD, &val); g_value_unset (&val); } GST_PAD_UNLOCK (demux); return it; }
static GstIterator * gst_videoframe_audiolevel_iterate_internal_links (GstPad * pad, GstObject * parent) { GstIterator *it = NULL; GstPad *opad; GValue val = { 0, }; GstVideoFrameAudioLevel *self = GST_VIDEOFRAME_AUDIOLEVEL (parent); if (self->asinkpad == pad) opad = gst_object_ref (self->asrcpad); else if (self->asrcpad == pad) opad = gst_object_ref (self->asinkpad); else if (self->vsinkpad == pad) opad = gst_object_ref (self->vsrcpad); else if (self->vsrcpad == pad) opad = gst_object_ref (self->vsinkpad); else goto out; g_value_init (&val, GST_TYPE_PAD); g_value_set_object (&val, opad); it = gst_iterator_new_single (GST_TYPE_PAD, &val); g_value_unset (&val); gst_object_unref (opad); out: return it; }
static GstIterator * gst_rtp_ssrc_demux_iterate_internal_links (GstPad * pad) { GstRtpSsrcDemux *demux; GstPad *otherpad = NULL; GstIterator *it; GSList *current; demux = GST_RTP_SSRC_DEMUX (gst_pad_get_parent (pad)); GST_PAD_LOCK (demux); for (current = demux->srcpads; current; current = g_slist_next (current)) { GstRtpSsrcDemuxPad *dpad = (GstRtpSsrcDemuxPad *) current->data; if (pad == demux->rtp_sink) { otherpad = dpad->rtp_pad; break; } else if (pad == demux->rtcp_sink) { otherpad = dpad->rtcp_pad; } else if (pad == dpad->rtp_pad) { otherpad = demux->rtp_sink; break; } else if (pad == dpad->rtcp_pad) { otherpad = demux->rtcp_sink; break; } } 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 it; }
/** * gst_proxy_pad_iterate_internal_links_default: * @pad: the #GstPad to get the internal links of. * @parent: the parent of @pad or NULL * * Invoke the default iterate internal links function of the proxy pad. * * Returns: a #GstIterator of #GstPad, or NULL if @pad has no parent. Unref each * returned pad with gst_object_unref(). */ GstIterator * gst_proxy_pad_iterate_internal_links_default (GstPad * pad, GstObject * parent) { GstIterator *res = NULL; GstPad *internal; GValue v = { 0, }; g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL); internal = GST_PROXY_PAD_INTERNAL (pad); g_value_init (&v, GST_TYPE_PAD); g_value_set_object (&v, internal); res = gst_iterator_new_single (GST_TYPE_PAD, &v); g_value_unset (&v); return res; }
/* strictly get the linked pad from the sinkpad. If the pad is active we return * the srcpad else we return NULL */ static GstIterator * gst_selector_pad_iterate_linked_pads (GstPad * pad) { GstInputSelector *sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad)); GstPad *otherpad; GstIterator *it; otherpad = gst_input_selector_get_linked_pad (pad, TRUE); it = gst_iterator_new_single (GST_TYPE_PAD, otherpad, (GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref); if (otherpad) gst_object_unref (otherpad); gst_object_unref (sel); return it; }
/* Generic pad functions */ static GstIterator * gst_stream_synchronizer_iterate_internal_links (GstPad * pad, GstObject * parent) { GstIterator *it = NULL; GstPad *opad; opad = gst_stream_get_other_pad_from_pad (GST_STREAM_SYNCHRONIZER (parent), pad); if (opad) { GValue value = { 0, }; g_value_init (&value, GST_TYPE_PAD); g_value_set_object (&value, opad); it = gst_iterator_new_single (GST_TYPE_PAD, &value); g_value_unset (&value); gst_object_unref (opad); } return it; }
static GstIterator * gst_cc_extractor_iterate_internal_links (GstPad * pad, GstObject * parent) { GstCCExtractor *filter = (GstCCExtractor *) parent; GstIterator *it = NULL; GstPad *opad = NULL; if (pad == filter->sinkpad) opad = filter->srcpad; else if (pad == filter->srcpad || pad == filter->captionpad) opad = filter->sinkpad; if (opad) { GValue value = { 0, }; g_value_init (&value, GST_TYPE_PAD); g_value_set_object (&value, opad); it = gst_iterator_new_single (GST_TYPE_PAD, &value); g_value_unset (&value); } return it; }
static GstIterator * gst_srtp_dec_iterate_internal_links (GstPad * pad, GstObject * parent, gboolean is_rtcp) { GstSrtpDec *filter = GST_SRTP_DEC (parent); GstPad *otherpad = NULL; GstIterator *it = NULL; otherpad = (GstPad *) gst_pad_get_element_private (pad); if (otherpad) { GValue val = { 0 }; g_value_init (&val, GST_TYPE_PAD); g_value_set_object (&val, otherpad); it = gst_iterator_new_single (GST_TYPE_PAD, &val); g_value_unset (&val); } else { GST_ELEMENT_ERROR (GST_ELEMENT_CAST (filter), CORE, PAD, (NULL), ("Unable to get linked pad")); } return it; }