mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
gst/gstcaps.c: Clarify behaviour of _is_equal() when passing NULL parameters.
Original commit message from CVS: * gst/gstcaps.c: Clarify behaviour of _is_equal() when passing NULL parameters. * gst/gstpad.c: (gst_pad_link_check_compatible_unlocked), (gst_pad_set_caps): Cleanups. Don't unref NULL caps. When setting the same caps, protect caps of the pad with proper lock. Use full functionality of _is_equal() when comparing caps.
This commit is contained in:
parent
1dad4aea3a
commit
b5b28e2e39
3 changed files with 42 additions and 13 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2006-01-20 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstcaps.c:
|
||||||
|
Clarify behaviour of _is_equal() when passing NULL parameters.
|
||||||
|
|
||||||
|
* gst/gstpad.c: (gst_pad_link_check_compatible_unlocked),
|
||||||
|
(gst_pad_set_caps):
|
||||||
|
Cleanups. Don't unref NULL caps.
|
||||||
|
When setting the same caps, protect caps of the pad with
|
||||||
|
proper lock.
|
||||||
|
Use full functionality of _is_equal() when comparing caps.
|
||||||
|
|
||||||
2006-01-20 Jan Schmidt <thaytan@mad.scientist.com>
|
2006-01-20 Jan Schmidt <thaytan@mad.scientist.com>
|
||||||
|
|
||||||
* libs/gst/base/gstcollectpads.c: (gst_collect_pads_is_collected):
|
* libs/gst/base/gstcollectpads.c: (gst_collect_pads_is_collected):
|
||||||
|
|
|
@ -875,7 +875,9 @@ gst_caps_is_subset (const GstCaps * subset, const GstCaps * superset)
|
||||||
* <note>This function does not work reliably if optional properties for caps
|
* <note>This function does not work reliably if optional properties for caps
|
||||||
* are included on one caps and omitted on the other.</note>
|
* are included on one caps and omitted on the other.</note>
|
||||||
*
|
*
|
||||||
* Returns: TRUE if both caps are equal
|
* This function deals correctly with passing NULL for any of the caps.
|
||||||
|
*
|
||||||
|
* Returns: TRUE if both caps are equal.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_caps_is_equal (const GstCaps * caps1, const GstCaps * caps2)
|
gst_caps_is_equal (const GstCaps * caps1, const GstCaps * caps2)
|
||||||
|
|
39
gst/gstpad.c
39
gst/gstpad.c
|
@ -1510,10 +1510,12 @@ gst_pad_link_check_compatible_unlocked (GstPad * src, GstPad * sink)
|
||||||
|
|
||||||
srccaps = gst_pad_get_caps_unlocked (src);
|
srccaps = gst_pad_get_caps_unlocked (src);
|
||||||
sinkcaps = gst_pad_get_caps_unlocked (sink);
|
sinkcaps = gst_pad_get_caps_unlocked (sink);
|
||||||
|
|
||||||
GST_CAT_DEBUG (GST_CAT_CAPS, "src caps %" GST_PTR_FORMAT, srccaps);
|
GST_CAT_DEBUG (GST_CAT_CAPS, "src caps %" GST_PTR_FORMAT, srccaps);
|
||||||
GST_CAT_DEBUG (GST_CAT_CAPS, "sink caps %" GST_PTR_FORMAT, sinkcaps);
|
GST_CAT_DEBUG (GST_CAT_CAPS, "sink caps %" GST_PTR_FORMAT, sinkcaps);
|
||||||
|
|
||||||
/* if we have caps on both pads we can check the intersection */
|
/* if we have caps on both pads we can check the intersection. If one
|
||||||
|
* of the caps is NULL, we return TRUE. */
|
||||||
if (srccaps && sinkcaps) {
|
if (srccaps && sinkcaps) {
|
||||||
GstCaps *icaps;
|
GstCaps *icaps;
|
||||||
|
|
||||||
|
@ -1521,18 +1523,31 @@ gst_pad_link_check_compatible_unlocked (GstPad * src, GstPad * sink)
|
||||||
gst_caps_unref (srccaps);
|
gst_caps_unref (srccaps);
|
||||||
gst_caps_unref (sinkcaps);
|
gst_caps_unref (sinkcaps);
|
||||||
|
|
||||||
|
if (icaps == NULL)
|
||||||
|
goto was_null;
|
||||||
|
|
||||||
GST_CAT_DEBUG (GST_CAT_CAPS,
|
GST_CAT_DEBUG (GST_CAT_CAPS,
|
||||||
"intersection caps %p %" GST_PTR_FORMAT, icaps, icaps);
|
"intersection caps %p %" GST_PTR_FORMAT, icaps, icaps);
|
||||||
|
|
||||||
if (!icaps || gst_caps_is_empty (icaps)) {
|
if (gst_caps_is_empty (icaps))
|
||||||
GST_CAT_DEBUG (GST_CAT_CAPS, "intersection is empty");
|
goto was_empty;
|
||||||
gst_caps_unref (icaps);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
gst_caps_unref (icaps);
|
gst_caps_unref (icaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* incompatible cases */
|
||||||
|
was_null:
|
||||||
|
{
|
||||||
|
GST_CAT_DEBUG (GST_CAT_CAPS, "intersection gave NULL");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
was_empty:
|
||||||
|
{
|
||||||
|
GST_CAT_DEBUG (GST_CAT_CAPS, "intersection is EMPTY");
|
||||||
|
gst_caps_unref (icaps);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if the grandparents of both pads are the same.
|
/* check if the grandparents of both pads are the same.
|
||||||
|
@ -2136,12 +2151,11 @@ gst_pad_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
||||||
|
|
||||||
existing = GST_PAD_CAPS (pad);
|
existing = GST_PAD_CAPS (pad);
|
||||||
if (caps == existing)
|
if (gst_caps_is_equal (caps, existing))
|
||||||
goto setting_same_caps;
|
|
||||||
else if (caps && existing && gst_caps_is_equal (caps, existing))
|
|
||||||
goto setting_same_caps;
|
goto setting_same_caps;
|
||||||
|
|
||||||
/* call setcaps function to configure the pad */
|
/* call setcaps function to configure the pad only if the
|
||||||
|
* caps is not NULL */
|
||||||
if (setcaps != NULL && caps) {
|
if (setcaps != NULL && caps) {
|
||||||
if (!GST_PAD_IS_IN_SETCAPS (pad)) {
|
if (!GST_PAD_IS_IN_SETCAPS (pad)) {
|
||||||
GST_OBJECT_FLAG_SET (pad, GST_PAD_IN_SETCAPS);
|
GST_OBJECT_FLAG_SET (pad, GST_PAD_IN_SETCAPS);
|
||||||
|
@ -2167,10 +2181,11 @@ gst_pad_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
|
|
||||||
setting_same_caps:
|
setting_same_caps:
|
||||||
{
|
{
|
||||||
GST_OBJECT_UNLOCK (pad);
|
|
||||||
gst_caps_replace (&GST_PAD_CAPS (pad), caps);
|
gst_caps_replace (&GST_PAD_CAPS (pad), caps);
|
||||||
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
|
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
|
||||||
"caps %" GST_PTR_FORMAT " same as existing, updating ptr only", caps);
|
"caps %" GST_PTR_FORMAT " same as existing, updating ptr only", caps);
|
||||||
|
GST_OBJECT_UNLOCK (pad);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
/* errors */
|
/* errors */
|
||||||
|
|
Loading…
Reference in a new issue