mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
gst/gstpad.c: refuse to link if the link is not possible
Original commit message from CVS: * 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
This commit is contained in:
parent
4d0762842a
commit
a3cb86522a
11 changed files with 108 additions and 8 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
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:
|
||||
|
|
|
@ -662,6 +662,7 @@ testsuite/dynparams/Makefile
|
|||
testsuite/elements/Makefile
|
||||
testsuite/ghostpads/Makefile
|
||||
testsuite/indexers/Makefile
|
||||
testsuite/negotiation/Makefile
|
||||
testsuite/parse/Makefile
|
||||
testsuite/plugin/Makefile
|
||||
testsuite/refcounting/Makefile
|
||||
|
|
|
@ -1308,10 +1308,6 @@ gst_pad_link_negotiate (GstPadLink * link)
|
|||
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;
|
||||
|
@ -1320,6 +1316,10 @@ gst_pad_link_negotiate (GstPadLink * link)
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,11 +16,11 @@ endif
|
|||
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 =
|
||||
|
|
2
tests/old/testsuite/negotiation/.gitignore
vendored
Normal file
2
tests/old/testsuite/negotiation/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
pad_link
|
||||
|
7
tests/old/testsuite/negotiation/Makefile.am
Normal file
7
tests/old/testsuite/negotiation/Makefile.am
Normal file
|
@ -0,0 +1,7 @@
|
|||
include ../Rules
|
||||
|
||||
tests_pass = pad_link
|
||||
tests_fail =
|
||||
tests_ignore =
|
||||
|
||||
|
35
tests/old/testsuite/negotiation/pad_link.c
Normal file
35
tests/old/testsuite/negotiation/pad_link.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
#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;
|
||||
}
|
|
@ -16,11 +16,11 @@ endif
|
|||
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 =
|
||||
|
|
2
testsuite/negotiation/.gitignore
vendored
Normal file
2
testsuite/negotiation/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
pad_link
|
||||
|
7
testsuite/negotiation/Makefile.am
Normal file
7
testsuite/negotiation/Makefile.am
Normal file
|
@ -0,0 +1,7 @@
|
|||
include ../Rules
|
||||
|
||||
tests_pass = pad_link
|
||||
tests_fail =
|
||||
tests_ignore =
|
||||
|
||||
|
35
testsuite/negotiation/pad_link.c
Normal file
35
testsuite/negotiation/pad_link.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
#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;
|
||||
}
|
Loading…
Reference in a new issue