mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
composition: cleanup GnlCompositionEntry before its actual removal.
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
This commit is contained in:
parent
dcb7577673
commit
caa916e509
1 changed files with 2 additions and 73 deletions
|
@ -175,7 +175,7 @@ struct _GnlCompositionPrivate
|
||||||
/* While we do not get a buffer on our srcpad,
|
/* While we do not get a buffer on our srcpad,
|
||||||
* we are not commited */
|
* we are not commited */
|
||||||
gulong commited_probeid;
|
gulong commited_probeid;
|
||||||
/* 0 means that we already received the right segment */
|
/* 0 means that we already received the right caps or segment */
|
||||||
gint awaited_caps_seqnum;
|
gint awaited_caps_seqnum;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -294,12 +294,6 @@ struct _GnlCompositionEntry
|
||||||
{
|
{
|
||||||
GnlObject *object;
|
GnlObject *object;
|
||||||
GnlComposition *comp;
|
GnlComposition *comp;
|
||||||
|
|
||||||
/* handler id for block probe */
|
|
||||||
gulong probeid;
|
|
||||||
gulong dataprobeid;
|
|
||||||
|
|
||||||
gboolean seeked;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -754,20 +748,6 @@ gnl_composition_class_init (GnlCompositionClass * klass)
|
||||||
static void
|
static void
|
||||||
hash_value_destroy (GnlCompositionEntry * entry)
|
hash_value_destroy (GnlCompositionEntry * entry)
|
||||||
{
|
{
|
||||||
GstPad *srcpad;
|
|
||||||
GstElement *element = GST_ELEMENT (entry->object);
|
|
||||||
|
|
||||||
srcpad = GNL_OBJECT_SRC (element);
|
|
||||||
if (entry->probeid) {
|
|
||||||
gst_pad_remove_probe (srcpad, entry->probeid);
|
|
||||||
entry->probeid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entry->dataprobeid) {
|
|
||||||
gst_pad_remove_probe (srcpad, entry->dataprobeid);
|
|
||||||
entry->dataprobeid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_slice_free (GnlCompositionEntry, entry);
|
g_slice_free (GnlCompositionEntry, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,42 +876,6 @@ signal_duration_change (GnlComposition * comp)
|
||||||
gst_message_new_duration_changed (GST_OBJECT_CAST (comp)));
|
gst_message_new_duration_changed (GST_OBJECT_CAST (comp)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
unblock_child_pads (GValue * item, GValue * ret G_GNUC_UNUSED,
|
|
||||||
GnlComposition * comp)
|
|
||||||
{
|
|
||||||
GstPad *pad;
|
|
||||||
GstElement *child = g_value_get_object (item);
|
|
||||||
GnlCompositionEntry *entry = COMP_ENTRY (comp, child);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (child, "unblocking pads");
|
|
||||||
|
|
||||||
pad = GNL_OBJECT_SRC (child);
|
|
||||||
if (entry->probeid) {
|
|
||||||
gst_pad_remove_probe (pad, entry->probeid);
|
|
||||||
entry->probeid = 0;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
unblock_children (GnlComposition * comp)
|
|
||||||
{
|
|
||||||
GstIterator *children;
|
|
||||||
|
|
||||||
children = gst_bin_iterate_elements (GST_BIN (comp->priv->current_bin));
|
|
||||||
|
|
||||||
retry:
|
|
||||||
if (G_UNLIKELY (gst_iterator_fold (children,
|
|
||||||
(GstIteratorFoldFunction) unblock_child_pads, NULL,
|
|
||||||
comp) == GST_ITERATOR_RESYNC)) {
|
|
||||||
gst_iterator_resync (children);
|
|
||||||
goto retry;
|
|
||||||
}
|
|
||||||
gst_iterator_free (children);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
reset_child (GValue * item, GValue * ret G_GNUC_UNUSED, gpointer user_data)
|
reset_child (GValue * item, GValue * ret G_GNUC_UNUSED, gpointer user_data)
|
||||||
{
|
{
|
||||||
|
@ -2316,7 +2260,6 @@ gnl_composition_change_state (GstElement * element, GstStateChange transition)
|
||||||
{
|
{
|
||||||
GstIterator *children;
|
GstIterator *children;
|
||||||
GnlComposition *comp = (GnlComposition *) element;
|
GnlComposition *comp = (GnlComposition *) element;
|
||||||
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (comp, "%s => %s",
|
GST_DEBUG_OBJECT (comp, "%s => %s",
|
||||||
gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
|
gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
|
||||||
|
@ -2370,21 +2313,7 @@ gnl_composition_change_state (GstElement * element, GstStateChange transition)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
||||||
|
|
||||||
if (ret == GST_STATE_CHANGE_FAILURE)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
switch (transition) {
|
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
|
||||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
|
||||||
unblock_children (comp);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
|
|
Loading…
Reference in a new issue