mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 01:45:33 +00:00
gst/: Fix internal data flow errors. Fixes #338711.
Original commit message from CVS: patch by: Wim Taymans * gst/gstpad.c: (gst_pad_init), (gst_pad_configure_sink), (gst_pad_configure_src), (gst_pad_push): * gst/gstpipeline.c: (gst_pipeline_init): Fix internal data flow errors. Fixes #338711.
This commit is contained in:
parent
4c9ba80be2
commit
e49702c21f
3 changed files with 36 additions and 5 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2006-04-22 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
|
patch by: Wim Taymans
|
||||||
|
|
||||||
|
* gst/gstpad.c: (gst_pad_init), (gst_pad_configure_sink),
|
||||||
|
(gst_pad_configure_src), (gst_pad_push):
|
||||||
|
* gst/gstpipeline.c: (gst_pipeline_init):
|
||||||
|
Fix internal data flow errors. Fixes #338711.
|
||||||
|
|
||||||
2006-04-12 Wim Taymans <wim@fluendo.com>
|
2006-04-12 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* tests/check/gst/gstelement.c: (GST_START_TEST):
|
* tests/check/gst/gstelement.c: (GST_START_TEST):
|
||||||
|
|
29
gst/gstpad.c
29
gst/gstpad.c
|
@ -341,7 +341,9 @@ gst_pad_init (GstPad * pad)
|
||||||
pad->querytypefunc = GST_DEBUG_FUNCPTR (gst_pad_get_query_types_default);
|
pad->querytypefunc = GST_DEBUG_FUNCPTR (gst_pad_get_query_types_default);
|
||||||
pad->queryfunc = GST_DEBUG_FUNCPTR (gst_pad_query_default);
|
pad->queryfunc = GST_DEBUG_FUNCPTR (gst_pad_query_default);
|
||||||
pad->intlinkfunc = GST_DEBUG_FUNCPTR (gst_pad_get_internal_links_default);
|
pad->intlinkfunc = GST_DEBUG_FUNCPTR (gst_pad_get_internal_links_default);
|
||||||
|
#if 0
|
||||||
GST_PAD_ACCEPTCAPSFUNC (pad) = GST_DEBUG_FUNCPTR (gst_pad_acceptcaps_default);
|
GST_PAD_ACCEPTCAPSFUNC (pad) = GST_DEBUG_FUNCPTR (gst_pad_acceptcaps_default);
|
||||||
|
#endif
|
||||||
|
|
||||||
pad->do_buffer_signals = 0;
|
pad->do_buffer_signals = 0;
|
||||||
pad->do_event_signals = 0;
|
pad->do_event_signals = 0;
|
||||||
|
@ -1335,7 +1337,9 @@ gst_pad_set_getcaps_function (GstPad * pad, GstPadGetCapsFunction getcaps)
|
||||||
* @acceptcaps: the #GstPadAcceptCapsFunction to set.
|
* @acceptcaps: the #GstPadAcceptCapsFunction to set.
|
||||||
*
|
*
|
||||||
* Sets the given acceptcaps function for the pad. The acceptcaps function
|
* Sets the given acceptcaps function for the pad. The acceptcaps function
|
||||||
* will be called to check if the pad can accept the given caps. Setting the
|
* will be called to check if the pad can accept the given caps.
|
||||||
|
*/
|
||||||
|
/* Setting the
|
||||||
* acceptcaps function to NULL restores the default behaviour of allowing
|
* acceptcaps function to NULL restores the default behaviour of allowing
|
||||||
* any caps that matches the caps from gst_pad_get_caps.
|
* any caps that matches the caps from gst_pad_get_caps.
|
||||||
*/
|
*/
|
||||||
|
@ -2262,15 +2266,17 @@ could_not_set:
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
|
gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
|
||||||
{
|
{
|
||||||
|
GstPadAcceptCapsFunction acceptcaps;
|
||||||
GstPadSetCapsFunction setcaps;
|
GstPadSetCapsFunction setcaps;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
|
acceptcaps = GST_PAD_ACCEPTCAPSFUNC (pad);
|
||||||
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
||||||
|
|
||||||
/* See if pad accepts the caps - only needed if
|
/* See if pad accepts the caps - only needed if
|
||||||
* no setcaps function */
|
* no setcaps function */
|
||||||
if (setcaps == NULL)
|
if (setcaps == NULL && acceptcaps != NULL)
|
||||||
if (!gst_pad_accept_caps (pad, caps))
|
if (!acceptcaps (pad, caps))
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
|
|
||||||
/* set caps on pad if call succeeds */
|
/* set caps on pad if call succeeds */
|
||||||
|
@ -2291,15 +2297,17 @@ not_accepted:
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_pad_configure_src (GstPad * pad, GstCaps * caps, gboolean dosetcaps)
|
gst_pad_configure_src (GstPad * pad, GstCaps * caps, gboolean dosetcaps)
|
||||||
{
|
{
|
||||||
|
GstPadAcceptCapsFunction acceptcaps;
|
||||||
GstPadSetCapsFunction setcaps;
|
GstPadSetCapsFunction setcaps;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
|
acceptcaps = GST_PAD_ACCEPTCAPSFUNC (pad);
|
||||||
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
setcaps = GST_PAD_SETCAPSFUNC (pad);
|
||||||
|
|
||||||
/* See if pad accepts the caps - only needed if
|
/* See if pad accepts the caps - only needed if
|
||||||
* no setcaps function */
|
* no setcaps function */
|
||||||
if (setcaps == NULL)
|
if (setcaps == NULL && acceptcaps != NULL)
|
||||||
if (!gst_pad_accept_caps (pad, caps))
|
if (!acceptcaps (pad, caps))
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
|
|
||||||
if (dosetcaps)
|
if (dosetcaps)
|
||||||
|
@ -3286,8 +3294,11 @@ gst_pad_push (GstPad * pad, GstBuffer * buffer)
|
||||||
{
|
{
|
||||||
GstPad *peer;
|
GstPad *peer;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
|
#if 0
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
gboolean caps_changed;
|
gboolean caps_changed;
|
||||||
|
#endif
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
|
g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
|
||||||
g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SRC, GST_FLOW_ERROR);
|
g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SRC, GST_FLOW_ERROR);
|
||||||
|
@ -3320,19 +3331,25 @@ gst_pad_push (GstPad * pad, GstBuffer * buffer)
|
||||||
goto not_linked;
|
goto not_linked;
|
||||||
gst_object_ref (peer);
|
gst_object_ref (peer);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* FIXME, disabled for 0.10.5 release because it caused to much
|
||||||
|
* regressions */
|
||||||
/* Before pushing the buffer to the peer pad, ensure that caps
|
/* Before pushing the buffer to the peer pad, ensure that caps
|
||||||
* are set on this pad */
|
* are set on this pad */
|
||||||
caps = GST_BUFFER_CAPS (buffer);
|
caps = GST_BUFFER_CAPS (buffer);
|
||||||
caps_changed = caps && caps != GST_PAD_CAPS (pad);
|
caps_changed = caps && caps != GST_PAD_CAPS (pad);
|
||||||
|
#endif
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (pad);
|
GST_OBJECT_UNLOCK (pad);
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* 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 %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (pad, "caps changed to %" GST_PTR_FORMAT, caps);
|
||||||
if (G_UNLIKELY (!gst_pad_configure_src (pad, caps, TRUE)))
|
if (G_UNLIKELY (!gst_pad_configure_src (pad, caps, TRUE)))
|
||||||
goto not_negotiated;
|
goto not_negotiated;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = gst_pad_chain (peer, buffer);
|
ret = gst_pad_chain (peer, buffer);
|
||||||
|
|
||||||
|
@ -3362,6 +3379,7 @@ not_linked:
|
||||||
GST_OBJECT_UNLOCK (pad);
|
GST_OBJECT_UNLOCK (pad);
|
||||||
return GST_FLOW_NOT_LINKED;
|
return GST_FLOW_NOT_LINKED;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
not_negotiated:
|
not_negotiated:
|
||||||
{
|
{
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
@ -3370,6 +3388,7 @@ not_negotiated:
|
||||||
"element pushed buffer then refused to accept the caps");
|
"element pushed buffer then refused to accept the caps");
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -248,9 +248,12 @@ gst_pipeline_init (GTypeInstance * instance, gpointer g_class)
|
||||||
|
|
||||||
/* create and set a default bus */
|
/* create and set a default bus */
|
||||||
bus = gst_bus_new ();
|
bus = gst_bus_new ();
|
||||||
|
#if 0
|
||||||
|
/* FIXME, disabled for 0.10.5 release as it caused to many regressions */
|
||||||
/* Start our bus in flushing if appropriate */
|
/* Start our bus in flushing if appropriate */
|
||||||
if (pipeline->priv->auto_flush_bus)
|
if (pipeline->priv->auto_flush_bus)
|
||||||
gst_bus_set_flushing (bus, TRUE);
|
gst_bus_set_flushing (bus, TRUE);
|
||||||
|
#endif
|
||||||
|
|
||||||
gst_element_set_bus (GST_ELEMENT_CAST (pipeline), bus);
|
gst_element_set_bus (GST_ELEMENT_CAST (pipeline), bus);
|
||||||
GST_DEBUG_OBJECT (pipeline, "set bus %" GST_PTR_FORMAT " on pipeline", bus);
|
GST_DEBUG_OBJECT (pipeline, "set bus %" GST_PTR_FORMAT " on pipeline", bus);
|
||||||
|
|
Loading…
Reference in a new issue