mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 20:21:24 +00:00
container: Make sure that the child exists when emiting the "child-removed" signal
+ Add a test
This commit is contained in:
parent
229ec5f435
commit
0df2d4f945
2 changed files with 47 additions and 1 deletions
|
@ -136,7 +136,6 @@ _free_mapping (ChildMapping * mapping)
|
||||||
g_signal_handler_disconnect (child, mapping->priority_notifyid);
|
g_signal_handler_disconnect (child, mapping->priority_notifyid);
|
||||||
|
|
||||||
ges_timeline_element_set_parent (child, NULL);
|
ges_timeline_element_set_parent (child, NULL);
|
||||||
gst_object_unref (child);
|
|
||||||
g_slice_free (ChildMapping, mapping);
|
g_slice_free (ChildMapping, mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,6 +657,7 @@ ges_container_remove (GESContainer * container, GESTimelineElement * child)
|
||||||
|
|
||||||
g_signal_emit (container, ges_container_signals[CHILD_REMOVED_SIGNAL], 0,
|
g_signal_emit (container, ges_container_signals[CHILD_REMOVED_SIGNAL], 0,
|
||||||
child);
|
child);
|
||||||
|
gst_object_unref (child);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,6 +324,51 @@ GST_START_TEST (test_clip_group_ungroup)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
child_removed_cb (GESClip * clip, GESTimelineElement * effect,
|
||||||
|
gboolean * called)
|
||||||
|
{
|
||||||
|
ASSERT_OBJECT_REFCOUNT (effect, "Keeping alive ref + emission ref", 2);
|
||||||
|
*called = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_START_TEST (test_clip_refcount_remove_child)
|
||||||
|
{
|
||||||
|
GESClip *clip;
|
||||||
|
GESTrack *track;
|
||||||
|
gboolean called;
|
||||||
|
GESTrackElement *effect;
|
||||||
|
|
||||||
|
ges_init ();
|
||||||
|
|
||||||
|
clip = GES_CLIP (ges_test_clip_new ());
|
||||||
|
track = ges_track_audio_raw_new ();
|
||||||
|
effect = GES_TRACK_ELEMENT (ges_effect_new ("identity"));
|
||||||
|
|
||||||
|
fail_unless (ges_track_add_element (track, effect));
|
||||||
|
fail_unless (ges_container_add (GES_CONTAINER (clip),
|
||||||
|
GES_TIMELINE_ELEMENT (effect)));
|
||||||
|
ASSERT_OBJECT_REFCOUNT (effect, "1 for the container + 1 for the track", 2);
|
||||||
|
|
||||||
|
fail_unless (ges_track_remove_element (track, effect));
|
||||||
|
ASSERT_OBJECT_REFCOUNT (effect, "1 for the container + 1 for the track", 1);
|
||||||
|
|
||||||
|
g_signal_connect (clip, "child-removed", G_CALLBACK (child_removed_cb),
|
||||||
|
&called);
|
||||||
|
fail_unless (ges_container_remove (GES_CONTAINER (clip),
|
||||||
|
GES_TIMELINE_ELEMENT (effect)));
|
||||||
|
fail_unless (called == TRUE);
|
||||||
|
fail_if (G_IS_OBJECT (effect));
|
||||||
|
|
||||||
|
gst_object_unref (track);
|
||||||
|
gst_object_unref (clip);
|
||||||
|
fail_if (G_IS_OBJECT (track));
|
||||||
|
fail_if (G_IS_OBJECT (clip));
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
ges_suite (void)
|
ges_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -335,6 +380,7 @@ ges_suite (void)
|
||||||
tcase_add_test (tc_chain, test_object_properties);
|
tcase_add_test (tc_chain, test_object_properties);
|
||||||
tcase_add_test (tc_chain, test_split_object);
|
tcase_add_test (tc_chain, test_split_object);
|
||||||
tcase_add_test (tc_chain, test_clip_group_ungroup);
|
tcase_add_test (tc_chain, test_clip_group_ungroup);
|
||||||
|
tcase_add_test (tc_chain, test_clip_refcount_remove_child);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue