mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 04:52:28 +00:00
gst/gstutils.c: fix a bug in the case where neither element has a pad
Original commit message from CVS: * gst/gstutils.c: (gst_element_link_pads): fix a bug in the case where neither element has a pad * check/gst/gstelement.c: (GST_START_TEST), (gst_element_suite): add a test for that case
This commit is contained in:
parent
d186bc1644
commit
8b0f1ffe11
4 changed files with 61 additions and 9 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2005-10-05 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
|
* gst/gstutils.c: (gst_element_link_pads):
|
||||||
|
fix a bug in the case where neither element has a pad
|
||||||
|
* check/gst/gstelement.c: (GST_START_TEST), (gst_element_suite):
|
||||||
|
add a test for that case
|
||||||
|
|
||||||
2005-10-05 Thomas Vander Stichele <thomas at apestaart dot org>
|
2005-10-05 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* gst/gstpad.c: (gst_pad_push), (gst_pad_push_event):
|
* gst/gstpad.c: (gst_pad_push), (gst_pad_push_event):
|
||||||
|
|
|
@ -94,8 +94,7 @@ GST_START_TEST (test_error_no_bus)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
/* link and run two elements without putting them in a
|
/* link and run two elements without putting them in a pipeline */
|
||||||
* pipeline */
|
|
||||||
GST_START_TEST (test_link)
|
GST_START_TEST (test_link)
|
||||||
{
|
{
|
||||||
GstElement *src, *sink;
|
GstElement *src, *sink;
|
||||||
|
@ -131,6 +130,22 @@ GST_START_TEST (test_link)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
/* linking two elements without pads should fail */
|
||||||
|
GST_START_TEST (test_link_no_pads)
|
||||||
|
{
|
||||||
|
GstElement *src, *sink;
|
||||||
|
|
||||||
|
src = gst_bin_new ("src");
|
||||||
|
sink = gst_bin_new ("sink");
|
||||||
|
|
||||||
|
fail_if (gst_element_link (src, sink));
|
||||||
|
|
||||||
|
gst_object_unref (src);
|
||||||
|
gst_object_unref (sink);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
Suite *
|
Suite *
|
||||||
gst_element_suite (void)
|
gst_element_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +157,7 @@ gst_element_suite (void)
|
||||||
tcase_add_test (tc_chain, test_add_pad_unref_element);
|
tcase_add_test (tc_chain, test_add_pad_unref_element);
|
||||||
tcase_add_test (tc_chain, test_error_no_bus);
|
tcase_add_test (tc_chain, test_error_no_bus);
|
||||||
tcase_add_test (tc_chain, test_link);
|
tcase_add_test (tc_chain, test_link);
|
||||||
|
tcase_add_test (tc_chain, test_link_no_pads);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1024,7 +1024,8 @@ pad_link_maybe_ghosting (GstPad * src, GstPad * sink)
|
||||||
* @src: a #GstElement containing the source pad.
|
* @src: a #GstElement containing the source pad.
|
||||||
* @srcpadname: the name of the #GstPad in source element or NULL for any pad.
|
* @srcpadname: the name of the #GstPad in source element or NULL for any pad.
|
||||||
* @dest: the #GstElement containing the destination pad.
|
* @dest: the #GstElement containing the destination pad.
|
||||||
* @destpadname: the name of the #GstPad in destination element or NULL for any 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.
|
* 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
|
* Side effect is that if one of the pads has no parent, it becomes a
|
||||||
|
@ -1054,8 +1055,9 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
srcpadname ? srcpadname : "(any)", GST_ELEMENT_NAME (dest),
|
srcpadname ? srcpadname : "(any)", GST_ELEMENT_NAME (dest),
|
||||||
destpadname ? destpadname : "(any)");
|
destpadname ? destpadname : "(any)");
|
||||||
|
|
||||||
/* now get the pads we're trying to link and a list of all remaining pads */
|
/* get a src pad */
|
||||||
if (srcpadname) {
|
if (srcpadname) {
|
||||||
|
/* name specified, look it up */
|
||||||
srcpad = gst_element_get_pad (src, srcpadname);
|
srcpad = gst_element_get_pad (src, srcpadname);
|
||||||
if (!srcpad) {
|
if (!srcpad) {
|
||||||
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
|
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
|
||||||
|
@ -1077,6 +1079,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
}
|
}
|
||||||
srcpads = NULL;
|
srcpads = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
/* no name given, get the first available pad */
|
||||||
GST_LOCK (src);
|
GST_LOCK (src);
|
||||||
srcpads = GST_ELEMENT_PADS (src);
|
srcpads = GST_ELEMENT_PADS (src);
|
||||||
srcpad = srcpads ? GST_PAD_CAST (srcpads->data) : NULL;
|
srcpad = srcpads ? GST_PAD_CAST (srcpads->data) : NULL;
|
||||||
|
@ -1084,7 +1087,10 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
gst_object_ref (srcpad);
|
gst_object_ref (srcpad);
|
||||||
GST_UNLOCK (src);
|
GST_UNLOCK (src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get a destination pad */
|
||||||
if (destpadname) {
|
if (destpadname) {
|
||||||
|
/* name specified, look it up */
|
||||||
destpad = gst_element_get_pad (dest, destpadname);
|
destpad = gst_element_get_pad (dest, destpadname);
|
||||||
if (!destpad) {
|
if (!destpad) {
|
||||||
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
|
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
|
||||||
|
@ -1106,6 +1112,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
}
|
}
|
||||||
destpads = NULL;
|
destpads = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
/* no name given, get the first available pad */
|
||||||
GST_LOCK (dest);
|
GST_LOCK (dest);
|
||||||
destpads = GST_ELEMENT_PADS (dest);
|
destpads = GST_ELEMENT_PADS (dest);
|
||||||
destpad = destpads ? GST_PAD_CAST (destpads->data) : NULL;
|
destpad = destpads ? GST_PAD_CAST (destpads->data) : NULL;
|
||||||
|
@ -1125,6 +1132,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (srcpad) {
|
if (srcpad) {
|
||||||
/* loop through the allowed pads in the source, trying to find a
|
/* loop through the allowed pads in the source, trying to find a
|
||||||
* compatible destination pad */
|
* compatible destination pad */
|
||||||
|
@ -1172,15 +1180,18 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
if (srcpadname) {
|
if (srcpadname) {
|
||||||
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s:%s to %s",
|
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s:%s to %s",
|
||||||
GST_DEBUG_PAD_NAME (srcpad), GST_ELEMENT_NAME (dest));
|
GST_DEBUG_PAD_NAME (srcpad), GST_ELEMENT_NAME (dest));
|
||||||
gst_object_unref (srcpad);
|
if (srcpad)
|
||||||
|
gst_object_unref (srcpad);
|
||||||
|
srcpad = NULL;
|
||||||
if (destpad)
|
if (destpad)
|
||||||
gst_object_unref (destpad);
|
gst_object_unref (destpad);
|
||||||
return FALSE;
|
destpad = NULL;
|
||||||
} else {
|
} else {
|
||||||
if (srcpad)
|
if (srcpad)
|
||||||
gst_object_unref (srcpad);
|
gst_object_unref (srcpad);
|
||||||
srcpad = NULL;
|
srcpad = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destpad) {
|
if (destpad) {
|
||||||
/* loop through the existing pads in the destination */
|
/* loop through the existing pads in the destination */
|
||||||
do {
|
do {
|
||||||
|
@ -1213,6 +1224,7 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
}
|
}
|
||||||
} while (destpads);
|
} while (destpads);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destpadname) {
|
if (destpadname) {
|
||||||
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s to %s:%s",
|
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s to %s:%s",
|
||||||
GST_ELEMENT_NAME (src), GST_DEBUG_PAD_NAME (destpad));
|
GST_ELEMENT_NAME (src), GST_DEBUG_PAD_NAME (destpad));
|
||||||
|
@ -1221,10 +1233,11 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
|
||||||
gst_object_unref (srcpad);
|
gst_object_unref (srcpad);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
gst_object_unref (destpad);
|
|
||||||
if (srcpad)
|
if (srcpad)
|
||||||
gst_object_unref (srcpad);
|
gst_object_unref (srcpad);
|
||||||
srcpad = NULL;
|
srcpad = NULL;
|
||||||
|
if (destpad)
|
||||||
|
gst_object_unref (destpad);
|
||||||
destpad = NULL;
|
destpad = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,8 +94,7 @@ GST_START_TEST (test_error_no_bus)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
/* link and run two elements without putting them in a
|
/* link and run two elements without putting them in a pipeline */
|
||||||
* pipeline */
|
|
||||||
GST_START_TEST (test_link)
|
GST_START_TEST (test_link)
|
||||||
{
|
{
|
||||||
GstElement *src, *sink;
|
GstElement *src, *sink;
|
||||||
|
@ -131,6 +130,22 @@ GST_START_TEST (test_link)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
/* linking two elements without pads should fail */
|
||||||
|
GST_START_TEST (test_link_no_pads)
|
||||||
|
{
|
||||||
|
GstElement *src, *sink;
|
||||||
|
|
||||||
|
src = gst_bin_new ("src");
|
||||||
|
sink = gst_bin_new ("sink");
|
||||||
|
|
||||||
|
fail_if (gst_element_link (src, sink));
|
||||||
|
|
||||||
|
gst_object_unref (src);
|
||||||
|
gst_object_unref (sink);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
Suite *
|
Suite *
|
||||||
gst_element_suite (void)
|
gst_element_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -142,6 +157,7 @@ gst_element_suite (void)
|
||||||
tcase_add_test (tc_chain, test_add_pad_unref_element);
|
tcase_add_test (tc_chain, test_add_pad_unref_element);
|
||||||
tcase_add_test (tc_chain, test_error_no_bus);
|
tcase_add_test (tc_chain, test_error_no_bus);
|
||||||
tcase_add_test (tc_chain, test_link);
|
tcase_add_test (tc_chain, test_link);
|
||||||
|
tcase_add_test (tc_chain, test_link_no_pads);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue