gstutils: New gst_element_link_pads_full method
authorEdward Hervey <bilboed@bilboed.com>
Wed, 23 Jun 2010 15:00:17 +0000 (17:00 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Wed, 23 Jun 2010 16:42:40 +0000 (18:42 +0200)
Links the elements with the specified pad linking checks.

API:gst_element_link_pads_full

https://bugzilla.gnome.org/show_bug.cgi?id=622504

docs/gst/gstreamer-sections.txt
gst/gstutils.c
gst/gstutils.h
win32/common/libgstreamer.def

index 076a567..cfa91b8 100644 (file)
@@ -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
index 2d1b418..45d61ed 100644 (file)
@@ -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.
index a04738a..bbfae2d 100644 (file)
@@ -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);
 
index 4ccbd3e..7d393cc 100644 (file)
@@ -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