]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/commitdiff
Add some sanity tests to gstpad.c. Check that pad is linked before calling gst_pad_t...
authorDavid Schleef <ds@schleef.org>
Wed, 24 Dec 2003 01:39:08 +0000 (01:39 +0000)
committerDavid Schleef <ds@schleef.org>
Wed, 24 Dec 2003 01:39:08 +0000 (01:39 +0000)
Original commit message from CVS:
Add some sanity tests to gstpad.c.  Check that pad is linked before
calling gst_pad_try_set_caps() on it in spideridentity.

gst/autoplug/gstspideridentity.c
gst/gstpad.c

index e43677774aeefdfcf01d3fe96afeb0cf38c47a70..3df2552ede7514a220aa0f01ac6d6317a1aebab4 100644 (file)
@@ -519,7 +519,14 @@ end:
 plug:
   GST_INFO ("typefind function found caps"); 
   ident->caps = find.caps;
-  g_assert (GST_PAD_LINK_SUCCESSFUL (gst_pad_try_set_caps (ident->src, find.caps)));
+  if (GST_PAD_IS_LINKED (ident->src)) {
+    GstPadLinkReturn ret;
+
+    ret = gst_pad_try_set_caps (ident->src, find.caps);
+    if (GST_PAD_LINK_FAILED (ret)){
+      g_critical("could not set caps on spideridentity src pad\n");
+    }
+  }
   {
     gchar *str = gst_caps_to_string (find.caps);
     GST_LOG_OBJECT (ident, "spider starting caps: %s", str);
index 61d294c32f04b714919ed8eddcdfdd1b552dadfc..09c1f85e801dba9425df6e3a8b16ec71c6dd8dfc 100644 (file)
@@ -54,7 +54,9 @@ static void           gst_pad_init                    (GstPad *pad);
 static void            gst_pad_dispose                 (GObject *object);
 
 static void            gst_pad_set_pad_template        (GstPad *pad, GstPadTemplate *templ);
-static GstCaps *       _gst_pad_default_fixate_func    (GstPad *pad, GstCaps *caps, gpointer unused);
+static GstCaps *        _gst_pad_default_fixate_func    (GstPad *pad, GstCaps *caps, gpointer unused);
+
+static void             gst_pad_link_free               (GstPadLink *link);
 
 #ifndef GST_DISABLE_LOADSAVE
 static xmlNodePtr      gst_pad_save_thyself            (GstObject *object, xmlNodePtr parent);
@@ -897,9 +899,13 @@ gst_pad_unlink (GstPad *srcpad,
   src_sched = gst_pad_get_scheduler (GST_PAD (realsrc));
   sink_sched = gst_pad_get_scheduler (GST_PAD (realsink));
 
+  gst_pad_link_free (GST_RPAD_LINK (realsrc));
+
   /* first clear peers */
   GST_RPAD_PEER (realsrc) = NULL;
   GST_RPAD_PEER (realsink) = NULL;
+  GST_RPAD_LINK (realsrc) = NULL;
+  GST_RPAD_LINK (realsink) = NULL;
 
   /* now tell the scheduler */
   if (src_sched && src_sched == sink_sched) {
@@ -1173,6 +1179,9 @@ gst_pad_renegotiate (GstPad *pad)
   g_return_val_if_fail (pad != NULL, GST_PAD_LINK_REFUSED);
   g_return_val_if_fail (GST_IS_PAD (pad), GST_PAD_LINK_REFUSED);
 
+  g_return_val_if_fail (GST_PAD_LINK_SRC (pad), GST_PAD_LINK_REFUSED);
+  g_return_val_if_fail (GST_PAD_LINK_SINK (pad), GST_PAD_LINK_REFUSED);
+
   link = gst_pad_link_new ();
 
   link->srcpad = GST_PAD_LINK_SRC (pad);
@@ -1206,6 +1215,7 @@ gst_pad_try_set_caps (GstPad *pad, const GstCaps *caps)
 
   g_return_val_if_fail (pad != NULL, GST_PAD_LINK_REFUSED);
   g_return_val_if_fail (GST_IS_PAD (pad), GST_PAD_LINK_REFUSED);
+  g_return_val_if_fail (GST_PAD_PEER (pad), GST_PAD_LINK_REFUSED);
   g_return_val_if_fail (!GST_FLAG_IS_SET (pad, GST_PAD_NEGOTIATING),
       GST_PAD_LINK_REFUSED);
 
@@ -1221,6 +1231,9 @@ gst_pad_try_set_caps (GstPad *pad, const GstCaps *caps)
     return GST_PAD_LINK_REFUSED;
   }
 
+  g_return_val_if_fail (GST_PAD_LINK_SRC (pad), GST_PAD_LINK_REFUSED);
+  g_return_val_if_fail (GST_PAD_LINK_SINK (pad), GST_PAD_LINK_REFUSED);
+
   link = gst_pad_link_new ();
 
   link->srcpad = GST_PAD_LINK_SRC (pad);
@@ -1364,6 +1377,9 @@ gst_pad_link_filtered (GstPad *srcpad, GstPad *sinkpad,
     return FALSE;
   }
   
+  g_return_val_if_fail (realsrc != NULL, GST_PAD_LINK_REFUSED);
+  g_return_val_if_fail (realsink != NULL, GST_PAD_LINK_REFUSED);
+
   link = gst_pad_link_new ();
 
   if (GST_RPAD_DIRECTION (realsrc) == GST_PAD_SRC) {