+2004-04-21 Benjamin Otte <in7y118@public.uni-hamburg.de>
+
+ * gst/gstpad.c: (gst_pad_link_negotiate):
+ refuse to link if the link is not possible
+ * configure.ac:
+ * testsuite/Makefile.am:
+ * testsuite/negotiation/.cvsignore:
+ * testsuite/negotiation/Makefile.am:
+ * testsuite/negotiation/pad_link.c: (main):
+ add test that checks the above behaviour
+
2004-04-21 Thomas Vander Stichele <thomas at apestaart dot org>
* docs/gst/gstreamer-sections.txt:
testsuite/elements/Makefile
testsuite/ghostpads/Makefile
testsuite/indexers/Makefile
+testsuite/negotiation/Makefile
testsuite/parse/Makefile
testsuite/plugin/Makefile
testsuite/refcounting/Makefile
GST_DEBUG ("negotiating link from pad %s:%s to pad %s:%s",
GST_DEBUG_PAD_NAME (link->srcpad), GST_DEBUG_PAD_NAME (link->sinkpad));
- if (!gst_pad_link_ready_for_negotiation (link)) {
- return GST_PAD_LINK_DELAYED;
- }
-
gst_pad_link_intersect (link);
if (gst_caps_is_empty (link->caps))
return GST_PAD_LINK_REFUSED;
if (gst_caps_is_empty (link->caps))
return GST_PAD_LINK_REFUSED;
+ if (!gst_pad_link_ready_for_negotiation (link)) {
+ return GST_PAD_LINK_DELAYED;
+ }
+
return gst_pad_link_call_link_functions (link);
}
SUBDIRS = bins bytestream cleanup dynparams ghostpads \
caps plugin elements clock refcounting tags threads \
indexers debug $(GST_PARSE_DIRS) $(GST_DEBUG_DIRS) \
- dlopen
+ dlopen negotiation
DIST_SUBDIRS = bins bytestream caps cleanup clock dynparams elements indexers \
plugin refcounting tags threads parse debug ghostpads \
- dlopen
+ dlopen negotiation
tests_pass = test_gst_init
tests_fail =
--- /dev/null
+pad_link
+
--- /dev/null
+include ../Rules
+
+tests_pass = pad_link
+tests_fail =
+tests_ignore =
+
+
--- /dev/null
+#include <gst/gst.h>
+
+/* this test checks that gst_pad_link takes into account all available
+ * information when trying to link two pads.
+ * Because identity proxies caps, the caps in the first and second link
+ * must be compatible for this pipeline to work.
+ * Since they are not, the second linkig attempt should fail.
+ */
+
+gint
+main (int argc, gchar ** argv)
+{
+ GstElement *src, *identity, *sink;
+ GstCaps *one, *two;
+
+ gst_init (&argc, &argv);
+
+ /* create incompatible caps */
+ src = gst_element_factory_make ("fakesrc", NULL);
+ g_assert (src);
+ identity = gst_element_factory_make ("identity", NULL);
+ g_assert (identity);
+ sink = gst_element_factory_make ("fakesink", NULL);
+ g_assert (sink);
+
+ one = gst_caps_from_string ("some/mime");
+ two = gst_caps_from_string ("other/mime");
+
+ g_assert (GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
+ (src, "src"), gst_element_get_pad (identity, "sink"), one)));
+ g_assert (!GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
+ (identity, "src"), gst_element_get_pad (sink, "sink"), two)));
+
+ return 0;
+}
SUBDIRS = bins bytestream cleanup dynparams ghostpads \
caps plugin elements clock refcounting tags threads \
indexers debug $(GST_PARSE_DIRS) $(GST_DEBUG_DIRS) \
- dlopen
+ dlopen negotiation
DIST_SUBDIRS = bins bytestream caps cleanup clock dynparams elements indexers \
plugin refcounting tags threads parse debug ghostpads \
- dlopen
+ dlopen negotiation
tests_pass = test_gst_init
tests_fail =
--- /dev/null
+pad_link
+
--- /dev/null
+include ../Rules
+
+tests_pass = pad_link
+tests_fail =
+tests_ignore =
+
+
--- /dev/null
+#include <gst/gst.h>
+
+/* this test checks that gst_pad_link takes into account all available
+ * information when trying to link two pads.
+ * Because identity proxies caps, the caps in the first and second link
+ * must be compatible for this pipeline to work.
+ * Since they are not, the second linkig attempt should fail.
+ */
+
+gint
+main (int argc, gchar ** argv)
+{
+ GstElement *src, *identity, *sink;
+ GstCaps *one, *two;
+
+ gst_init (&argc, &argv);
+
+ /* create incompatible caps */
+ src = gst_element_factory_make ("fakesrc", NULL);
+ g_assert (src);
+ identity = gst_element_factory_make ("identity", NULL);
+ g_assert (identity);
+ sink = gst_element_factory_make ("fakesink", NULL);
+ g_assert (sink);
+
+ one = gst_caps_from_string ("some/mime");
+ two = gst_caps_from_string ("other/mime");
+
+ g_assert (GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
+ (src, "src"), gst_element_get_pad (identity, "sink"), one)));
+ g_assert (!GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
+ (identity, "src"), gst_element_get_pad (sink, "sink"), two)));
+
+ return 0;
+}