mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-03 14:08:56 +00:00
Be sure that we have a new copy of the caps and not reffed caps from a template
Original commit message from CVS: * gst/gstpad.c: * tests/check/gst/gstpad.c: Be sure that we have a new copy of the caps and not reffed caps from a template
This commit is contained in:
parent
9db28f8537
commit
bb3dfba3f5
3 changed files with 38 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-02-04 Thijs Vermeir <thijsvermeir@gmail.com>
|
||||||
|
|
||||||
|
* gst/gstpad.c:
|
||||||
|
* tests/check/gst/gstpad.c:
|
||||||
|
Be sure that we have a new copy of the caps and not
|
||||||
|
reffed caps from a template
|
||||||
|
|
||||||
2008-02-03 Sebastian Dröge <slomo@circular-chaos.org>
|
2008-02-03 Sebastian Dröge <slomo@circular-chaos.org>
|
||||||
|
|
||||||
* gst/gstbin.c: (gst_bin_get_type), (gst_bin_class_init):
|
* gst/gstbin.c: (gst_bin_get_type), (gst_bin_class_init):
|
||||||
|
|
|
@ -2059,6 +2059,11 @@ gst_pad_get_caps (GstPad * pad)
|
||||||
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "get pad caps");
|
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "get pad caps");
|
||||||
|
|
||||||
result = gst_pad_get_caps_unlocked (pad);
|
result = gst_pad_get_caps_unlocked (pad);
|
||||||
|
|
||||||
|
/* be sure that we have a copy */
|
||||||
|
if (result)
|
||||||
|
result = gst_caps_make_writable (result);
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (pad);
|
GST_OBJECT_UNLOCK (pad);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -578,6 +578,31 @@ GST_START_TEST (test_sink_unref_unlink)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
/* gst_pad_get_caps should return a copy of the caps */
|
||||||
|
GST_START_TEST (test_get_caps_must_be_copy)
|
||||||
|
{
|
||||||
|
GstPad *pad;
|
||||||
|
GstCaps *caps;
|
||||||
|
GstPadTemplate *templ;
|
||||||
|
|
||||||
|
caps = gst_caps_new_any ();
|
||||||
|
templ =
|
||||||
|
gst_pad_template_new ("test_templ", GST_PAD_SRC, GST_PAD_ALWAYS, caps);
|
||||||
|
pad = gst_pad_new_from_template (templ, NULL);
|
||||||
|
fail_unless (GST_PAD_CAPS (pad) == NULL, "caps present on pad");
|
||||||
|
caps = gst_pad_get_caps (pad);
|
||||||
|
|
||||||
|
/* we must own the caps */
|
||||||
|
ASSERT_OBJECT_REFCOUNT (caps, "caps", 1);
|
||||||
|
|
||||||
|
/* cleanup */
|
||||||
|
gst_caps_unref (caps);
|
||||||
|
gst_object_unref (pad);
|
||||||
|
gst_object_unref (templ);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
Suite *
|
Suite *
|
||||||
gst_pad_suite (void)
|
gst_pad_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -599,6 +624,7 @@ gst_pad_suite (void)
|
||||||
tcase_add_test (tc_chain, test_push_negotiation);
|
tcase_add_test (tc_chain, test_push_negotiation);
|
||||||
tcase_add_test (tc_chain, test_src_unref_unlink);
|
tcase_add_test (tc_chain, test_src_unref_unlink);
|
||||||
tcase_add_test (tc_chain, test_sink_unref_unlink);
|
tcase_add_test (tc_chain, test_sink_unref_unlink);
|
||||||
|
tcase_add_test (tc_chain, test_get_caps_must_be_copy);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue