mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 05:31:15 +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>
|
||||
|
||||
* 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
|
||||
* 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
|
||||
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);
|
||||
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, "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) {
|
||||
GstCaps *icaps;
|
||||
|
||||
|
@ -1521,18 +1523,31 @@ gst_pad_link_check_compatible_unlocked (GstPad * src, GstPad * sink)
|
|||
gst_caps_unref (srccaps);
|
||||
gst_caps_unref (sinkcaps);
|
||||
|
||||
if (icaps == NULL)
|
||||
goto was_null;
|
||||
|
||||
GST_CAT_DEBUG (GST_CAT_CAPS,
|
||||
"intersection caps %p %" GST_PTR_FORMAT, icaps, icaps);
|
||||
|
||||
if (!icaps || gst_caps_is_empty (icaps)) {
|
||||
GST_CAT_DEBUG (GST_CAT_CAPS, "intersection is empty");
|
||||
if (gst_caps_is_empty (icaps))
|
||||
goto was_empty;
|
||||
|
||||
gst_caps_unref (icaps);
|
||||
}
|
||||
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;
|
||||
}
|
||||
gst_caps_unref (icaps);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
existing = GST_PAD_CAPS (pad);
|
||||
if (caps == existing)
|
||||
goto setting_same_caps;
|
||||
else if (caps && existing && gst_caps_is_equal (caps, existing))
|
||||
if (gst_caps_is_equal (caps, existing))
|
||||
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 (!GST_PAD_IS_IN_SETCAPS (pad)) {
|
||||
GST_OBJECT_FLAG_SET (pad, GST_PAD_IN_SETCAPS);
|
||||
|
@ -2167,10 +2181,11 @@ gst_pad_set_caps (GstPad * pad, GstCaps * caps)
|
|||
|
||||
setting_same_caps:
|
||||
{
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
gst_caps_replace (&GST_PAD_CAPS (pad), caps);
|
||||
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
|
||||
"caps %" GST_PTR_FORMAT " same as existing, updating ptr only", caps);
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
/* errors */
|
||||
|
|
Loading…
Reference in a new issue