mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 07:16:55 +00:00
gst/gstpad.c: Check in set_caps if the caps are compatible with the pad and remove two functions that are redundant n...
Original commit message from CVS: * gst/gstpad.c: (gst_pad_set_caps), (gst_pad_alloc_buffer_full), (gst_pad_chain_unchecked), (gst_pad_push): Check in set_caps if the caps are compatible with the pad and remove two functions that are redundant now. Fixes #421543.
This commit is contained in:
parent
79e426d5f9
commit
0c34057ee5
2 changed files with 13 additions and 62 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2007-03-22 Sebastian Dröge <slomo@circular-chaos.org>
|
||||||
|
|
||||||
|
* gst/gstpad.c: (gst_pad_set_caps), (gst_pad_alloc_buffer_full),
|
||||||
|
(gst_pad_chain_unchecked), (gst_pad_push):
|
||||||
|
Check in set_caps if the caps are compatible with the pad and remove
|
||||||
|
two functions that are redundant now. Fixes #421543.
|
||||||
|
|
||||||
2007-03-22 Wim Taymans <wim@fluendo.com>
|
2007-03-22 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* tests/check/gst/gstsystemclock.c: (GST_START_TEST),
|
* tests/check/gst/gstsystemclock.c: (GST_START_TEST),
|
||||||
|
|
68
gst/gstpad.c
68
gst/gstpad.c
|
@ -2343,6 +2343,9 @@ gst_pad_set_caps (GstPad * pad, GstCaps * caps)
|
||||||
g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
|
g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
|
||||||
g_return_val_if_fail (caps == NULL || gst_caps_is_fixed (caps), FALSE);
|
g_return_val_if_fail (caps == NULL || gst_caps_is_fixed (caps), FALSE);
|
||||||
|
|
||||||
|
if (!gst_pad_accept_caps (pad, caps))
|
||||||
|
goto could_not_set;
|
||||||
|
|
||||||
GST_OBJECT_LOCK (pad);
|
GST_OBJECT_LOCK (pad);
|
||||||
existing = GST_PAD_CAPS (pad);
|
existing = GST_PAD_CAPS (pad);
|
||||||
if (existing == caps)
|
if (existing == caps)
|
||||||
|
@ -2403,65 +2406,6 @@ could_not_set:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
|
|
||||||
{
|
|
||||||
GstPadSetCapsFunction setcaps;
|
|
||||||
gboolean res;
|
|
||||||
|
|
||||||
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
|
||||||
|
|
||||||
/* See if pad accepts the caps - only needed if
|
|
||||||
* no setcaps function */
|
|
||||||
if (setcaps == NULL)
|
|
||||||
if (!gst_pad_accept_caps (pad, caps))
|
|
||||||
goto not_accepted;
|
|
||||||
|
|
||||||
/* set caps on pad if call succeeds */
|
|
||||||
res = gst_pad_set_caps (pad, caps);
|
|
||||||
/* no need to unref the caps here, set_caps takes a ref and
|
|
||||||
* our ref goes away when we leave this function. */
|
|
||||||
|
|
||||||
return res;
|
|
||||||
|
|
||||||
not_accepted:
|
|
||||||
{
|
|
||||||
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
|
|
||||||
"caps %" GST_PTR_FORMAT " not accepted", caps);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* returns TRUE if the src pad could be configured to accept the given caps */
|
|
||||||
static gboolean
|
|
||||||
gst_pad_configure_src (GstPad * pad, GstCaps * caps, gboolean dosetcaps)
|
|
||||||
{
|
|
||||||
GstPadSetCapsFunction setcaps;
|
|
||||||
gboolean res;
|
|
||||||
|
|
||||||
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
|
||||||
|
|
||||||
/* See if pad accepts the caps - only needed if
|
|
||||||
* no setcaps function */
|
|
||||||
if (setcaps == NULL)
|
|
||||||
if (!gst_pad_accept_caps (pad, caps))
|
|
||||||
goto not_accepted;
|
|
||||||
|
|
||||||
if (dosetcaps)
|
|
||||||
res = gst_pad_set_caps (pad, caps);
|
|
||||||
else
|
|
||||||
res = TRUE;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
|
|
||||||
not_accepted:
|
|
||||||
{
|
|
||||||
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
|
|
||||||
"caps %" GST_PTR_FORMAT " not accepted", caps);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_pad_get_pad_template_caps:
|
* gst_pad_get_pad_template_caps:
|
||||||
* @pad: a #GstPad to get the template capabilities from.
|
* @pad: a #GstPad to get the template capabilities from.
|
||||||
|
@ -2742,7 +2686,7 @@ gst_pad_alloc_buffer_full (GstPad * pad, guint64 offset, gint size,
|
||||||
/* we got a new datatype on the pad, see if it can handle it */
|
/* we got a new datatype on the pad, see if it can handle it */
|
||||||
if (G_UNLIKELY (caps_changed)) {
|
if (G_UNLIKELY (caps_changed)) {
|
||||||
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
||||||
if (G_UNLIKELY (!gst_pad_configure_src (pad, caps, setcaps)))
|
if (G_UNLIKELY (setcaps && !gst_pad_set_caps (pad, caps)))
|
||||||
goto not_negotiated;
|
goto not_negotiated;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -3443,7 +3387,7 @@ gst_pad_chain_unchecked (GstPad * pad, GstBuffer * buffer)
|
||||||
/* we got a new datatype on the pad, see if it can handle it */
|
/* we got a new datatype on the pad, see if it can handle it */
|
||||||
if (G_UNLIKELY (caps_changed)) {
|
if (G_UNLIKELY (caps_changed)) {
|
||||||
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
||||||
if (G_UNLIKELY (!gst_pad_configure_sink (pad, caps)))
|
if (G_UNLIKELY (!gst_pad_set_caps (pad, caps)))
|
||||||
goto not_negotiated;
|
goto not_negotiated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3620,7 +3564,7 @@ gst_pad_push (GstPad * pad, GstBuffer * buffer)
|
||||||
/* we got a new datatype from the pad, it had better handle it */
|
/* we got a new datatype from the pad, it had better handle it */
|
||||||
if (G_UNLIKELY (caps_changed)) {
|
if (G_UNLIKELY (caps_changed)) {
|
||||||
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
GST_DEBUG_OBJECT (pad, "caps changed to %p %" GST_PTR_FORMAT, caps, caps);
|
||||||
if (G_UNLIKELY (!gst_pad_configure_src (pad, caps, TRUE)))
|
if (G_UNLIKELY (!gst_pad_set_caps (pad, caps)))
|
||||||
goto not_negotiated;
|
goto not_negotiated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue