From: Edward Hervey Date: Wed, 23 Jun 2010 15:00:17 +0000 (+0200) Subject: gstutils: New gst_element_link_pads_full method X-Git-Tag: RELEASE-0.10.30~54 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5faf5620f3756e16130d9a6dcde77070c02b8f38;p=platform%2Fupstream%2Fgstreamer.git gstutils: New gst_element_link_pads_full method Links the elements with the specified pad linking checks. API:gst_element_link_pads_full https://bugzilla.gnome.org/show_bug.cgi?id=622504 --- diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 076a567..cfa91b8 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -530,6 +530,7 @@ gst_element_unlink gst_element_link_many gst_element_unlink_many gst_element_link_pads +gst_element_link_pads_full gst_element_unlink_pads gst_element_link_pads_filtered gst_element_link_filtered diff --git a/gst/gstutils.c b/gst/gstutils.c index 2d1b418..45d61ed 100644 --- a/gst/gstutils.c +++ b/gst/gstutils.c @@ -1532,7 +1532,7 @@ cleanup_fail: } static gboolean -pad_link_maybe_ghosting (GstPad * src, GstPad * sink) +pad_link_maybe_ghosting (GstPad * src, GstPad * sink, GstPadLinkCheck flags) { GSList *pads_created = NULL; gboolean ret; @@ -1540,7 +1540,7 @@ pad_link_maybe_ghosting (GstPad * src, GstPad * sink) if (!prepare_link_maybe_ghosting (&src, &sink, &pads_created)) { ret = FALSE; } else { - ret = (gst_pad_link (src, sink) == GST_PAD_LINK_OK); + ret = (gst_pad_link_full (src, sink, flags) == GST_PAD_LINK_OK); } if (!ret) { @@ -1552,12 +1552,13 @@ pad_link_maybe_ghosting (GstPad * src, GstPad * sink) } /** - * gst_element_link_pads: + * gst_element_link_pads_full: * @src: a #GstElement containing the source pad. * @srcpadname: the name of the #GstPad in source element or NULL for any pad. * @dest: the #GstElement containing the destination pad. * @destpadname: the name of the #GstPad in destination element, * or NULL for any pad. + * @flags: the #GstPadLinkCheck to be performed when linking pads. * * Links the two named pads of the source and destination elements. * Side effect is that if one of the pads has no parent, it becomes a @@ -1565,10 +1566,12 @@ pad_link_maybe_ghosting (GstPad * src, GstPad * sink) * parents, the link fails. * * Returns: TRUE if the pads could be linked, FALSE otherwise. + * + * Since: 0.10.30 */ gboolean -gst_element_link_pads (GstElement * src, const gchar * srcpadname, - GstElement * dest, const gchar * destpadname) +gst_element_link_pads_full (GstElement * src, const gchar * srcpadname, + GstElement * dest, const gchar * destpadname, GstPadLinkCheck flags) { const GList *srcpads, *destpads, *srctempls, *desttempls, *l; GstPad *srcpad, *destpad; @@ -1656,7 +1659,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname, gboolean result; /* two explicitly specified pads */ - result = pad_link_maybe_ghosting (srcpad, destpad); + result = pad_link_maybe_ghosting (srcpad, destpad, flags); gst_object_unref (srcpad); gst_object_unref (destpad); @@ -1683,7 +1686,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname, temp = gst_element_get_compatible_pad (dest, srcpad, NULL); } - if (temp && pad_link_maybe_ghosting (srcpad, temp)) { + if (temp && pad_link_maybe_ghosting (srcpad, temp, flags)) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s", GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (temp)); if (destpad) @@ -1728,7 +1731,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname, (GST_PAD_PEER (destpad) == NULL)) { GstPad *temp = gst_element_get_compatible_pad (src, destpad, NULL); - if (temp && pad_link_maybe_ghosting (temp, destpad)) { + if (temp && pad_link_maybe_ghosting (temp, destpad, flags)) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s", GST_DEBUG_PAD_NAME (temp), GST_DEBUG_PAD_NAME (destpad)); gst_object_unref (temp); @@ -1784,7 +1787,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname, destpad = gst_element_get_request_pad (dest, desttempl->name_template); if (srcpad && destpad - && pad_link_maybe_ghosting (srcpad, destpad)) { + && pad_link_maybe_ghosting (srcpad, destpad, flags)) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s", GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (destpad)); @@ -1811,6 +1814,29 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname, } /** + * gst_element_link_pads: + * @src: a #GstElement containing the source pad. + * @srcpadname: the name of the #GstPad in source element or NULL for any pad. + * @dest: the #GstElement containing the destination pad. + * @destpadname: the name of the #GstPad in destination element, + * or NULL for any pad. + * + * Links the two named pads of the source and destination elements. + * Side effect is that if one of the pads has no parent, it becomes a + * child of the parent of the other element. If they have different + * parents, the link fails. + * + * Returns: TRUE if the pads could be linked, FALSE otherwise. + */ +gboolean +gst_element_link_pads (GstElement * src, const gchar * srcpadname, + GstElement * dest, const gchar * destpadname) +{ + return gst_element_link_pads_full (src, srcpadname, dest, destpadname, + GST_PAD_LINK_CHECK_DEFAULT); +} + +/** * gst_element_link_pads_filtered: * @src: a #GstElement containing the source pad. * @srcpadname: the name of the #GstPad in source element or NULL for any pad. diff --git a/gst/gstutils.h b/gst/gstutils.h index a04738a..bbfae2d 100644 --- a/gst/gstutils.h +++ b/gst/gstutils.h @@ -1018,6 +1018,9 @@ void gst_element_unlink_many (GstElement *element_1, gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname, GstElement *dest, const gchar *destpadname); +gboolean gst_element_link_pads_full (GstElement *src, const gchar *srcpadname, + GstElement *dest, const gchar *destpadname, + GstPadLinkCheck flags); void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname, GstElement *dest, const gchar *destpadname); diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 4ccbd3e..7d393cc 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -315,6 +315,7 @@ EXPORTS gst_element_link_many gst_element_link_pads gst_element_link_pads_filtered + gst_element_link_pads_full gst_element_lost_state gst_element_lost_state_full gst_element_make_from_uri