mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 08:46:40 +00:00
Iterate until we find the real pad when creating a ghostpad make a copy of the event in the default dispatcher.
Original commit message from CVS: Iterate until we find the real pad when creating a ghostpad make a copy of the event in the default dispatcher.
This commit is contained in:
parent
b792a2af1f
commit
2bcb002772
1 changed files with 10 additions and 5 deletions
15
gst/gstpad.c
15
gst/gstpad.c
|
@ -2233,13 +2233,20 @@ gst_ghost_pad_new (gchar *name,
|
|||
GstPad *pad)
|
||||
{
|
||||
GstGhostPad *ghostpad;
|
||||
GstRealPad *realpad;
|
||||
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
|
||||
|
||||
ghostpad = g_object_new (gst_ghost_pad_get_type () ,NULL);
|
||||
gst_pad_set_name (GST_PAD (ghostpad), name);
|
||||
GST_GPAD_REALPAD (ghostpad) = GST_PAD_REALIZE (pad);
|
||||
|
||||
realpad = (GstRealPad *) pad;
|
||||
|
||||
while (!GST_IS_REAL_PAD (realpad)) {
|
||||
realpad = GST_PAD_REALIZE (realpad);
|
||||
}
|
||||
GST_GPAD_REALPAD (ghostpad) = realpad;
|
||||
GST_PAD_PADTEMPLATE (ghostpad) = GST_PAD_PADTEMPLATE (pad);
|
||||
|
||||
/* add ourselves to the real pad's list of ghostpads */
|
||||
|
@ -2264,12 +2271,12 @@ gst_pad_event_default_dispatch (GstPad *pad, GstElement *element, GstEvent *even
|
|||
/* for all pads in the opposite direction that are connected */
|
||||
if (GST_PAD_DIRECTION (eventpad) != GST_PAD_DIRECTION (pad) && GST_PAD_IS_CONNECTED (eventpad)) {
|
||||
if (GST_PAD_DIRECTION (eventpad) == GST_PAD_SRC) {
|
||||
gst_pad_push (eventpad, GST_BUFFER (gst_event_new (GST_EVENT_TYPE (event))));
|
||||
gst_pad_push (eventpad, GST_BUFFER (gst_event_copy (event)));
|
||||
}
|
||||
else {
|
||||
GstPad *peerpad = GST_PAD_CAST (GST_RPAD_PEER (eventpad));
|
||||
|
||||
gst_pad_send_event (peerpad, gst_event_new (GST_EVENT_TYPE (event)));
|
||||
gst_pad_send_event (peerpad, gst_event_copy (event));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2293,14 +2300,12 @@ gst_pad_event_default (GstPad *pad, GstEvent *event)
|
|||
case GST_EVENT_EOS:
|
||||
gst_element_set_eos (element);
|
||||
gst_pad_event_default_dispatch (pad, element, event);
|
||||
gst_event_free (event);
|
||||
/* we have to try to schedule another element because this one is disabled */
|
||||
gst_element_yield (element);
|
||||
break;
|
||||
case GST_EVENT_FLUSH:
|
||||
default:
|
||||
gst_pad_event_default_dispatch (pad, element, event);
|
||||
gst_event_free (event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue