mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
gst/gstpad.c: Propagate errors from _set_caps() in configure_src/sink functions instead of returning TRUE.
Original commit message from CVS: * gst/gstpad.c: (gst_real_pad_init), (gst_pad_set_active), (gst_pad_link_prepare), (gst_pad_link), (gst_pad_accept_caps), (gst_pad_configure_sink), (gst_pad_configure_src), (gst_pad_alloc_buffer), (gst_pad_query), (gst_pad_send_event), (gst_pad_start_task): Propagate errors from _set_caps() in configure_src/sink functions instead of returning TRUE. FLUSH events can travel up and downstream
This commit is contained in:
parent
be66bb03b4
commit
0e1ad862de
2 changed files with 35 additions and 25 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2005-05-30 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstpad.c: (gst_real_pad_init), (gst_pad_set_active),
|
||||||
|
(gst_pad_link_prepare), (gst_pad_link), (gst_pad_accept_caps),
|
||||||
|
(gst_pad_configure_sink), (gst_pad_configure_src),
|
||||||
|
(gst_pad_alloc_buffer), (gst_pad_query), (gst_pad_send_event),
|
||||||
|
(gst_pad_start_task):
|
||||||
|
Propagate errors from _set_caps() in configure_src/sink
|
||||||
|
functions instead of returning TRUE.
|
||||||
|
FLUSH events can travel up and downstream
|
||||||
|
|
||||||
|
|
||||||
2005-05-30 Wim Taymans <wim@fluendo.com>
|
2005-05-30 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/base/gstbasesink.c: (gst_basesink_preroll_queue_push),
|
* gst/base/gstbasesink.c: (gst_basesink_preroll_queue_push),
|
||||||
|
|
48
gst/gstpad.c
48
gst/gstpad.c
|
@ -256,8 +256,6 @@ gst_real_pad_init (GstRealPad * pad)
|
||||||
g_static_rec_mutex_init (pad->stream_rec_lock);
|
g_static_rec_mutex_init (pad->stream_rec_lock);
|
||||||
|
|
||||||
pad->block_cond = g_cond_new ();
|
pad->block_cond = g_cond_new ();
|
||||||
|
|
||||||
gst_probe_dispatcher_init (&pad->probedisp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1938,6 +1936,7 @@ gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstPadAcceptCapsFunction acceptcaps;
|
GstPadAcceptCapsFunction acceptcaps;
|
||||||
GstPadSetCapsFunction setcaps;
|
GstPadSetCapsFunction setcaps;
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
acceptcaps = GST_RPAD_ACCEPTCAPSFUNC (pad);
|
acceptcaps = GST_RPAD_ACCEPTCAPSFUNC (pad);
|
||||||
setcaps = GST_RPAD_SETCAPSFUNC (pad);
|
setcaps = GST_RPAD_SETCAPSFUNC (pad);
|
||||||
|
@ -1949,11 +1948,11 @@ gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
}
|
}
|
||||||
/* set caps on pad if call succeeds */
|
/* set caps on pad if call succeeds */
|
||||||
gst_pad_set_caps (pad, caps);
|
res = gst_pad_set_caps (pad, caps);
|
||||||
/* no need to unref the caps here, set_caps takes a ref and
|
/* no need to unref the caps here, set_caps takes a ref and
|
||||||
* our ref goes away when we leave this function. */
|
* our ref goes away when we leave this function. */
|
||||||
|
|
||||||
return TRUE;
|
return res;
|
||||||
|
|
||||||
not_accepted:
|
not_accepted:
|
||||||
{
|
{
|
||||||
|
@ -1967,6 +1966,7 @@ gst_pad_configure_src (GstPad * pad, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstPadAcceptCapsFunction acceptcaps;
|
GstPadAcceptCapsFunction acceptcaps;
|
||||||
GstPadSetCapsFunction setcaps;
|
GstPadSetCapsFunction setcaps;
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
acceptcaps = GST_RPAD_ACCEPTCAPSFUNC (pad);
|
acceptcaps = GST_RPAD_ACCEPTCAPSFUNC (pad);
|
||||||
setcaps = GST_RPAD_SETCAPSFUNC (pad);
|
setcaps = GST_RPAD_SETCAPSFUNC (pad);
|
||||||
|
@ -1978,11 +1978,11 @@ gst_pad_configure_src (GstPad * pad, GstCaps * caps)
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
}
|
}
|
||||||
/* set caps on pad if call succeeds */
|
/* set caps on pad if call succeeds */
|
||||||
gst_pad_set_caps (pad, caps);
|
res = gst_pad_set_caps (pad, caps);
|
||||||
/* no need to unref the caps here, set_caps takes a ref and
|
/* no need to unref the caps here, set_caps takes a ref and
|
||||||
* our ref goes away when we leave this function. */
|
* our ref goes away when we leave this function. */
|
||||||
|
|
||||||
return TRUE;
|
return res;
|
||||||
|
|
||||||
not_accepted:
|
not_accepted:
|
||||||
{
|
{
|
||||||
|
@ -2294,7 +2294,7 @@ no_peer:
|
||||||
}
|
}
|
||||||
flushing:
|
flushing:
|
||||||
{
|
{
|
||||||
/* pad has no peer */
|
/* peer was flushing */
|
||||||
GST_UNLOCK (peer);
|
GST_UNLOCK (peer);
|
||||||
GST_CAT_DEBUG (GST_CAT_PADS,
|
GST_CAT_DEBUG (GST_CAT_PADS,
|
||||||
"%s:%s called bufferallocfunc but peer was flushing, returning NULL",
|
"%s:%s called bufferallocfunc but peer was flushing, returning NULL",
|
||||||
|
@ -3245,26 +3245,24 @@ gst_pad_send_event (GstPad * pad, GstEvent * event)
|
||||||
GST_CAT_DEBUG (GST_CAT_EVENT, "have event type %d on pad %s:%s",
|
GST_CAT_DEBUG (GST_CAT_EVENT, "have event type %d on pad %s:%s",
|
||||||
GST_EVENT_TYPE (event), GST_DEBUG_PAD_NAME (realpad));
|
GST_EVENT_TYPE (event), GST_DEBUG_PAD_NAME (realpad));
|
||||||
|
|
||||||
if (GST_PAD_IS_SINK (realpad)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
case GST_EVENT_FLUSH:
|
||||||
case GST_EVENT_FLUSH:
|
GST_CAT_DEBUG (GST_CAT_EVENT, "have flush event");
|
||||||
GST_CAT_DEBUG (GST_CAT_EVENT, "have flush event");
|
if (GST_EVENT_FLUSH_DONE (event)) {
|
||||||
if (GST_EVENT_FLUSH_DONE (event)) {
|
GST_RPAD_UNSET_FLUSHING (realpad);
|
||||||
GST_RPAD_UNSET_FLUSHING (realpad);
|
GST_CAT_DEBUG (GST_CAT_EVENT, "cleared flush flag");
|
||||||
GST_CAT_DEBUG (GST_CAT_EVENT, "cleared flush flag");
|
} else {
|
||||||
} else {
|
/* can't even accept a flush begin event when flushing */
|
||||||
/* can't even accept a flush begin event when flushing */
|
|
||||||
if (GST_RPAD_IS_FLUSHING (realpad))
|
|
||||||
goto flushing;
|
|
||||||
GST_RPAD_SET_FLUSHING (realpad);
|
|
||||||
GST_CAT_DEBUG (GST_CAT_EVENT, "set flush flag");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (GST_RPAD_IS_FLUSHING (realpad))
|
if (GST_RPAD_IS_FLUSHING (realpad))
|
||||||
goto flushing;
|
goto flushing;
|
||||||
break;
|
GST_RPAD_SET_FLUSHING (realpad);
|
||||||
}
|
GST_CAT_DEBUG (GST_CAT_EVENT, "set flush flag");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (GST_RPAD_IS_FLUSHING (realpad))
|
||||||
|
goto flushing;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((eventfunc = GST_RPAD_EVENTFUNC (realpad)) == NULL)
|
if ((eventfunc = GST_RPAD_EVENTFUNC (realpad)) == NULL)
|
||||||
|
|
Loading…
Reference in a new issue