From: Thibault Saunier Date: Thu, 11 Aug 2016 13:14:42 +0000 (-0400) Subject: Finally move clip priority handling to GESLayer. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3daf8bd78833f60d26d5f19b119936dd4b61f6d6;p=platform%2Fupstream%2Fgst-editing-services.git Finally move clip priority handling to GESLayer. Fix all tests as we now have 1 priority inside the layer dedicated to transitions (basically no source clip will ever have a priority of 0 inside a layer). Differential Revision: https://phabricator.freedesktop.org/D1276 --- diff --git a/ges/ges-auto-transition.c b/ges/ges-auto-transition.c index c539dbf..3961621 100644 --- a/ges/ges-auto-transition.c +++ b/ges/ges-auto-transition.c @@ -86,19 +86,6 @@ neighbour_changed_cb (GESClip * clip, GParamSpec * arg G_GNUC_UNUSED, } static void -_height_changed_cb (GESClip * clip, GParamSpec * arg G_GNUC_UNUSED, - GESAutoTransition * self) -{ - /* FIXME This is really not smart and we should properly implement clip - * priority management at the Layer level */ - self->positioning = TRUE; - _set_priority0 (GES_TIMELINE_ELEMENT (self->next_clip), - _PRIORITY (self->previous_clip) + - GES_CONTAINER_HEIGHT (self->previous_clip)); - self->positioning = FALSE; -} - -static void _track_changed_cb (GESTrackElement * track_element, GParamSpec * arg G_GNUC_UNUSED, GESAutoTransition * self) { @@ -125,8 +112,6 @@ ges_auto_transition_finalize (GObject * object) neighbour_changed_cb, self); g_signal_handlers_disconnect_by_func (self->next_source, neighbour_changed_cb, self); - g_signal_handlers_disconnect_by_func (self->previous_clip, - _height_changed_cb, self); g_signal_handlers_disconnect_by_func (self->next_source, _track_changed_cb, self); g_signal_handlers_disconnect_by_func (self->previous_source, @@ -177,16 +162,12 @@ ges_auto_transition_new (GESTrackElement * transition, G_CALLBACK (neighbour_changed_cb), self); g_signal_connect (next_source, "notify::duration", G_CALLBACK (neighbour_changed_cb), self); - g_signal_connect (self->previous_clip, "notify::height", - G_CALLBACK (_height_changed_cb), self); g_signal_connect (next_source, "notify::track", G_CALLBACK (_track_changed_cb), self); g_signal_connect (previous_source, "notify::track", G_CALLBACK (_track_changed_cb), self); - _height_changed_cb (self->previous_clip, NULL, self); - GST_DEBUG_OBJECT (self, "Created transition %" GST_PTR_FORMAT " between %" GST_PTR_FORMAT " and: %" GST_PTR_FORMAT " in layer nb %i, start: %" GST_TIME_FORMAT " duration: %" diff --git a/ges/ges-layer.c b/ges/ges-layer.c index ebc69a6..ca78065 100644 --- a/ges/ges-layer.c +++ b/ges/ges-layer.c @@ -228,18 +228,34 @@ ges_layer_init (GESLayer * self) static gboolean ges_layer_resync_priorities (GESLayer * layer) { + GstClockTime next_reset = 0; + gint priority = 1; GList *tmp; GESTimelineElement *element; - GST_DEBUG ("Resync priorities of %p", layer); - - /* TODO : Inhibit composition updates while doing this. - * Ideally we want to do it from an even higher level, but here will - * do in the meantime. */ + GST_INFO_OBJECT (layer, "Resync priorities (prio: %d)", + layer->priv->priority); for (tmp = layer->priv->clips_start; tmp; tmp = tmp->next) { + element = GES_TIMELINE_ELEMENT (tmp->data); - _set_priority0 (element, _PRIORITY (element)); + + if (GES_IS_TRANSITION_CLIP (element)) { + _set_priority0 (element, 0); + + continue; + } + + if (element->start > next_reset) { + priority = 1; + next_reset = 0; + } + + if (element->start + element->duration > next_reset) + next_reset = element->start + element->duration; + + _set_priority0 (element, priority); + priority = priority + GES_CONTAINER_HEIGHT (element); } return TRUE; @@ -515,7 +531,7 @@ ges_layer_add_clip (GESLayer * layer, GESClip * clip) g_return_val_if_fail (GES_IS_LAYER (layer), FALSE); g_return_val_if_fail (GES_IS_CLIP (clip), FALSE); - GST_DEBUG_OBJECT (layer, "adding clip:%p", clip); + GST_DEBUG_OBJECT (layer, "adding clip: %s", GES_TIMELINE_ELEMENT_NAME (clip)); priv = layer->priv; current_layer = ges_clip_get_layer (clip); diff --git a/tests/check/ges/backgroundsource.c b/tests/check/ges/backgroundsource.c index 2f08b11..5edb149 100644 --- a/tests/check/ges/backgroundsource.c +++ b/tests/check/ges/backgroundsource.c @@ -85,7 +85,7 @@ GST_START_TEST (test_test_source_properties) fail_unless (ges_timeline_commit (timeline)); /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change more properties, see if they propagate */ g_object_set (clip, "start", (guint64) 420, "duration", (guint64) 510, @@ -100,17 +100,17 @@ GST_START_TEST (test_test_source_properties) fail_unless (ges_timeline_commit (timeline)); /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Test mute support */ g_object_set (clip, "mute", TRUE, NULL); fail_unless (ges_timeline_commit (timeline)); nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, FALSE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, FALSE); g_object_set (clip, "mute", FALSE, NULL); fail_unless (ges_timeline_commit (timeline)); nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); ges_container_remove (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (trackelement)); diff --git a/tests/check/ges/clip.c b/tests/check/ges/clip.c index 7794565..41a2975 100644 --- a/tests/check/ges/clip.c +++ b/tests/check/ges/clip.c @@ -68,7 +68,7 @@ GST_START_TEST (test_object_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change more properties, see if they propagate */ g_object_set (clip, "start", (guint64) 420, "duration", (guint64) 510, @@ -83,7 +83,7 @@ GST_START_TEST (test_object_properties) /* And let's also check that it propagated correctly to GNonLin */ ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* This time, we move the trackelement to see if the changes move @@ -93,7 +93,7 @@ GST_START_TEST (test_object_properties) assert_equals_uint64 (_START (clip), 400); assert_equals_uint64 (_START (trackelement), 400); nle_object_check (ges_track_element_get_nleobject (trackelement), 400, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); ges_container_remove (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (trackelement)); @@ -320,7 +320,7 @@ GST_START_TEST (test_split_object) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 50, 12, - 50, MIN_NLE_PRIO, TRUE); + 50, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); splitclip = ges_clip_split (clip, 67); fail_unless (GES_IS_CLIP (splitclip)); @@ -637,38 +637,56 @@ GST_START_TEST (test_effects_priorities) fail_unless (ges_container_add (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (effect2))); - fail_unless_equals_int (MIN_NLE_PRIO + 0, _PRIORITY (effect)); - fail_unless_equals_int (MIN_NLE_PRIO + 1, _PRIORITY (effect1)); - fail_unless_equals_int (MIN_NLE_PRIO + 2, _PRIORITY (effect2)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect1)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect2)); fail_unless (ges_clip_set_top_effect_priority (clip, GES_BASE_EFFECT (effect), 2)); - fail_unless_equals_int (MIN_NLE_PRIO + 0, _PRIORITY (effect1)); - fail_unless_equals_int (MIN_NLE_PRIO + 1, _PRIORITY (effect2)); - fail_unless_equals_int (MIN_NLE_PRIO + 2, _PRIORITY (effect)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect1)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect2)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect)); fail_unless (ges_clip_set_top_effect_priority (clip, GES_BASE_EFFECT (effect), 0)); - fail_unless_equals_int (MIN_NLE_PRIO + 0, _PRIORITY (effect)); - fail_unless_equals_int (MIN_NLE_PRIO + 1, _PRIORITY (effect1)); - fail_unless_equals_int (MIN_NLE_PRIO + 2, _PRIORITY (effect2)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect1)); + fail_unless_equals_int (MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect2)); fail_unless (ges_clip_move_to_layer (clip, layer1)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 0, _PRIORITY (effect)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 1, _PRIORITY (effect1)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 2, _PRIORITY (effect2)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect1)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect2)); fail_unless (ges_clip_set_top_effect_priority (clip, GES_BASE_EFFECT (effect), 2)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 0, _PRIORITY (effect1)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 1, _PRIORITY (effect2)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 2, _PRIORITY (effect)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect1)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect2)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect)); fail_unless (ges_clip_set_top_effect_priority (clip, GES_BASE_EFFECT (effect), 0)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 0, _PRIORITY (effect)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 1, _PRIORITY (effect1)); - fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + 2, _PRIORITY (effect2)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, + _PRIORITY (effect)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, + _PRIORITY (effect1)); + fail_unless_equals_int (LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2, + _PRIORITY (effect2)); gst_object_unref (timeline); } diff --git a/tests/check/ges/effects.c b/tests/check/ges/effects.c index 145fea5..82ef486 100644 --- a/tests/check/ges/effects.c +++ b/tests/check/ges/effects.c @@ -111,7 +111,8 @@ GST_START_TEST (test_get_effects_from_tl) assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (source)), 1); video_source = GES_CONTAINER_CHILDREN (source)->data; fail_unless (GES_IS_VIDEO_TEST_SOURCE (video_source)); - assert_equals_int (_PRIORITY (video_source), MIN_NLE_PRIO); + assert_equals_int (_PRIORITY (video_source), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); GST_DEBUG ("Create effect"); effect = ges_effect_new ("agingtv"); @@ -127,17 +128,20 @@ GST_START_TEST (test_get_effects_from_tl) GES_TIMELINE_ELEMENT (effect))); fail_unless (ges_track_element_get_track (GES_TRACK_ELEMENT (effect)) == track_video); - assert_equals_int (_PRIORITY (effect), MIN_NLE_PRIO + 0); - assert_equals_int (_PRIORITY (video_source), MIN_NLE_PRIO + 1); + assert_equals_int (_PRIORITY (effect), MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0); + assert_equals_int (_PRIORITY (video_source), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1); GST_DEBUG ("Adding effect 1"); fail_unless (ges_container_add (GES_CONTAINER (source), GES_TIMELINE_ELEMENT (effect1))); fail_unless (ges_track_element_get_track (GES_TRACK_ELEMENT (effect1)) == track_video); - assert_equals_int (_PRIORITY (effect), MIN_NLE_PRIO); - assert_equals_int (_PRIORITY (effect1), MIN_NLE_PRIO + 1); - assert_equals_int (_PRIORITY (video_source), MIN_NLE_PRIO + 2); + assert_equals_int (_PRIORITY (effect), MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (_PRIORITY (effect1), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1); + assert_equals_int (_PRIORITY (video_source), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 2); GST_DEBUG ("Adding effect 2"); fail_unless (ges_container_add (GES_CONTAINER (source), @@ -280,9 +284,11 @@ GST_START_TEST (test_priorities_clip) fail_unless (GES_IS_EFFECT (audio_effect)); fail_unless (GES_IS_EFFECT (video_effect)); - /* FIXME This is ridiculus, both effects should have the same priority (0) */ - assert_equals_int (_PRIORITY (audio_effect), MIN_NLE_PRIO); - assert_equals_int (_PRIORITY (video_effect), MIN_NLE_PRIO + 1); + /* FIXME This is ridiculus, both effects should have the same priority */ + assert_equals_int (_PRIORITY (audio_effect), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (_PRIORITY (video_effect), + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1); assert_equals_int (GES_CONTAINER_HEIGHT (effect_clip), 2); effect = ges_effect_new ("agingtv"); @@ -302,14 +308,19 @@ GST_START_TEST (test_priorities_clip) fail_unless (ges_clip_set_top_effect_priority (GES_CLIP (effect_clip), GES_BASE_EFFECT (effect1), 0)); - assert_equals_int (_PRIORITY (effect), 3 + MIN_NLE_PRIO); - assert_equals_int (_PRIORITY (effect1), 0 + MIN_NLE_PRIO); + assert_equals_int (_PRIORITY (effect_clip), 1); + + assert_equals_int (_PRIORITY (effect), 3 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (_PRIORITY (effect1), + 0 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (GES_CONTAINER_HEIGHT (effect_clip), 4); fail_unless (ges_clip_set_top_effect_priority (GES_CLIP (effect_clip), GES_BASE_EFFECT (effect1), 3)); - assert_equals_int (_PRIORITY (effect), 2 + MIN_NLE_PRIO); - assert_equals_int (_PRIORITY (effect1), 3 + MIN_NLE_PRIO); + assert_equals_int (_PRIORITY (effect), 2 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (_PRIORITY (effect1), + 3 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); assert_equals_int (GES_CONTAINER_HEIGHT (effect_clip), 4); effects = ges_clip_get_top_effects (GES_CLIP (effect_clip)); @@ -520,25 +531,25 @@ GST_START_TEST (test_split_clip_effect_priorities) ges_layer_add_clip (layer, clip); source = ges_clip_find_track_element (clip, NULL, GES_TYPE_VIDEO_SOURCE); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 2); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 3); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 3); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 4); nclip = ges_clip_split (clip, GST_SECOND); neffect = ges_clip_find_track_element (nclip, NULL, GES_TYPE_EFFECT); nsource = ges_clip_find_track_element (nclip, NULL, GES_TYPE_VIDEO_SOURCE); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 2); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 3); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (neffect), 2); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (nsource), 3); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 3); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 4); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (neffect), 5); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (nsource), 6); /* Create a transition ... */ ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (clip), GST_SECOND / 2); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 2); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 3); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (neffect), 4); - assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (nsource), 5); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (effect), 3); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (source), 4); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (neffect), 5); + assert_equals_uint64 (GES_TIMELINE_ELEMENT_PRIORITY (nsource), 6); gst_object_unref (timeline); } diff --git a/tests/check/ges/layer.c b/tests/check/ges/layer.c index 5b47875..91c738a 100644 --- a/tests/check/ges/layer.c +++ b/tests/check/ges/layer.c @@ -72,34 +72,34 @@ GST_START_TEST (test_layer_properties) assert_equals_uint64 (_START (clip), 42); assert_equals_uint64 (_DURATION (clip), 51); assert_equals_uint64 (_INPOINT (clip), 12); - assert_equals_uint64 (_PRIORITY (clip), 0); + assert_equals_uint64 (_PRIORITY (clip), 1); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change the priority of the layer */ g_object_set (layer, "priority", 1, NULL); assert_equals_int (ges_layer_get_priority (layer), 1); - assert_equals_uint64 (_PRIORITY (clip), 0); + assert_equals_uint64 (_PRIORITY (clip), 1); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, LAYER_HEIGHT + MIN_NLE_PRIO, TRUE); + 51, LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change it to an insanely high value */ g_object_set (layer, "priority", 31, NULL); assert_equals_int (ges_layer_get_priority (layer), 31); - assert_equals_uint64 (_PRIORITY (clip), 0); + assert_equals_uint64 (_PRIORITY (clip), 1); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO + LAYER_HEIGHT * 31, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + LAYER_HEIGHT * 31, TRUE); /* and back to 0 */ g_object_set (layer, "priority", 0, NULL); assert_equals_int (ges_layer_get_priority (layer), 0); - assert_equals_uint64 (_PRIORITY (clip), 0); + assert_equals_uint64 (_PRIORITY (clip), 1); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO + 0, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, TRUE); gst_object_unref (trackelement); fail_unless (ges_layer_remove_clip (layer, clip)); @@ -119,7 +119,7 @@ GST_START_TEST (test_layer_priorities) GESClip *clip1, *clip2, *clip3; GstElement *nleobj1, *nleobj2, *nleobj3; guint prio1, prio2, prio3; - GList *objs, *tmp; + GList *objs; ges_init (); @@ -144,24 +144,19 @@ GST_START_TEST (test_layer_priorities) fail_unless (ges_timeline_add_track (timeline, track)); clip1 = GES_CLIP (ges_test_clip_new ()); - ges_clip_set_supported_formats (clip1, - GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO); clip2 = GES_CLIP (ges_test_clip_new ()); - ges_clip_set_supported_formats (clip2, - GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO); clip3 = GES_CLIP (ges_test_clip_new ()); - ges_clip_set_supported_formats (clip3, - GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO); fail_unless (clip1 != NULL); fail_unless (clip2 != NULL); fail_unless (clip3 != NULL); /* Set priorities on the objects */ - g_object_set (clip1, "priority", 0, NULL); + g_object_set (clip1, "priority", 0, "start", 0, "duration", 10, NULL); assert_equals_int (_PRIORITY (clip1), 0); - g_object_set (clip2, "priority", 1, NULL); + g_object_set (clip2, "priority", 1, "start", 10, "duration", 10, NULL); assert_equals_int (_PRIORITY (clip2), 1); - g_object_set (clip3, "priority", LAYER_HEIGHT + 1, NULL); + g_object_set (clip3, "priority", LAYER_HEIGHT + 1, "start", 20, "duration", + 10, NULL); assert_equals_int (_PRIORITY (clip3), LAYER_HEIGHT + 1); /* Add objects to the timeline */ @@ -178,11 +173,11 @@ GST_START_TEST (test_layer_priorities) fail_unless (trackelement3 != NULL); ges_timeline_commit (timeline); - assert_equals_int (_PRIORITY (clip1), 0); + assert_equals_int (_PRIORITY (clip1), 1); nleobj1 = ges_track_element_get_nleobject (trackelement1); fail_unless (nleobj1 != NULL); g_object_get (nleobj1, "priority", &prio1, NULL); - assert_equals_int (prio1, MIN_NLE_PRIO); + assert_equals_int (prio1, MIN_NLE_PRIO + TRANSITIONS_HEIGHT); assert_equals_int (_PRIORITY (clip2), 1); nleobj2 = ges_track_element_get_nleobject (trackelement2); @@ -191,13 +186,16 @@ GST_START_TEST (test_layer_priorities) /* clip2 is on the second layer and has a priority of 1 */ assert_equals_int (prio2, MIN_NLE_PRIO + LAYER_HEIGHT + 1); - assert_equals_int (_PRIORITY (clip3), LAYER_HEIGHT - 1); + /* We do not take into account users set priorities */ + assert_equals_int (_PRIORITY (clip3), 1); + nleobj3 = ges_track_element_get_nleobject (trackelement3); fail_unless (nleobj3 != NULL); + /* clip3 is on the third layer and has a priority of LAYER_HEIGHT + 1 * it priority must have the maximum priority of this layer*/ g_object_get (nleobj3, "priority", &prio3, NULL); - assert_equals_int (prio3, MIN_NLE_PRIO + LAYER_HEIGHT * 3 - 1); + assert_equals_int (prio3, 1 + MIN_NLE_PRIO + LAYER_HEIGHT * 2); /* Move layers around */ g_object_set (layer1, "priority", 2, NULL); @@ -209,15 +207,16 @@ GST_START_TEST (test_layer_priorities) assert_equals_int (ges_layer_get_priority (layer1), 2); assert_equals_int (ges_layer_get_priority (layer2), 0); assert_equals_int (ges_layer_get_priority (layer3), 1); - assert_equals_int (_PRIORITY (clip1), 0); + assert_equals_int (_PRIORITY (clip1), 1); assert_equals_int (_PRIORITY (clip2), 1); - assert_equals_int (_PRIORITY (clip3), LAYER_HEIGHT - 1); + assert_equals_int (_PRIORITY (clip3), 1); g_object_get (nleobj1, "priority", &prio1, NULL); g_object_get (nleobj2, "priority", &prio2, NULL); g_object_get (nleobj3, "priority", &prio3, NULL); - assert_equals_int (prio1, 2 * LAYER_HEIGHT + MIN_NLE_PRIO); + assert_equals_int (prio1, + 2 * LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); assert_equals_int (prio2, MIN_NLE_PRIO + 1); - assert_equals_int (prio3, LAYER_HEIGHT * 2 - 1 + MIN_NLE_PRIO); + assert_equals_int (prio3, LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); /* And move objects around */ fail_unless (ges_clip_move_to_layer (clip2, layer1)); @@ -228,22 +227,21 @@ GST_START_TEST (test_layer_priorities) assert_equals_int (g_list_length (objs), 3); fail_unless (ges_layer_get_clips (layer2) == NULL); fail_unless (ges_layer_get_clips (layer3) == NULL); - - for (tmp = objs; tmp; tmp = g_list_next (tmp)) { - gst_object_unref (tmp->data); - } - g_list_free (objs); + g_list_free_full (objs, gst_object_unref); /* Check their priorities (layer1 priority is now 2) */ - assert_equals_int (_PRIORITY (clip1), 0); - assert_equals_int (_PRIORITY (clip2), 1); - assert_equals_int (_PRIORITY (clip3), LAYER_HEIGHT - 1); + assert_equals_int (_PRIORITY (clip1), 1); + assert_equals_int (_PRIORITY (clip2), 2); + assert_equals_int (_PRIORITY (clip3), 3); g_object_get (nleobj1, "priority", &prio1, NULL); g_object_get (nleobj2, "priority", &prio2, NULL); g_object_get (nleobj3, "priority", &prio3, NULL); - assert_equals_int (prio1, 2 * LAYER_HEIGHT + MIN_NLE_PRIO); - assert_equals_int (prio2, 2 * LAYER_HEIGHT + 1 + MIN_NLE_PRIO); - assert_equals_int (prio3, LAYER_HEIGHT * 3 - 1 + MIN_NLE_PRIO); + assert_equals_int (prio1, + 2 * LAYER_HEIGHT + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (prio2, + 2 * LAYER_HEIGHT + 1 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); + assert_equals_int (prio3, + 2 * LAYER_HEIGHT + 2 + MIN_NLE_PRIO + TRANSITIONS_HEIGHT); /* And change TrackElement-s priorities and check that changes are not * refected on it containing Clip diff --git a/tests/check/ges/overlays.c b/tests/check/ges/overlays.c index 85aaa8a..be44fc9 100644 --- a/tests/check/ges/overlays.c +++ b/tests/check/ges/overlays.c @@ -81,7 +81,7 @@ GST_START_TEST (test_overlay_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change more properties, see if they propagate */ g_object_set (clip, "start", (guint64) 420, "duration", (guint64) 510, @@ -96,7 +96,7 @@ GST_START_TEST (test_overlay_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, TRUE); ges_container_remove (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (trackelement)); diff --git a/tests/check/ges/project.c b/tests/check/ges/project.c index 5935a04..1e151c8 100644 --- a/tests/check/ges/project.c +++ b/tests/check/ges/project.c @@ -254,10 +254,12 @@ _test_project (GESProject * project, GESTimeline * timeline) assert_equals_int (nb_scratch_lines, 12); nle_object_check (ges_track_element_get_nleobject (trackelement), - 0, 1000000000, 0, 1000000000, MIN_NLE_PRIO, TRUE); + 0, 1000000000, 0, 1000000000, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, + TRUE); } else { nle_object_check (ges_track_element_get_nleobject (trackelement), - 0, 1000000000, 0, 1000000000, MIN_NLE_PRIO + 1, TRUE); + 0, 1000000000, 0, 1000000000, + MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 1, TRUE); } } break; diff --git a/tests/check/ges/test-utils.h b/tests/check/ges/test-utils.h index b8cbcb4..17c81ad 100644 --- a/tests/check/ges/test-utils.h +++ b/tests/check/ges/test-utils.h @@ -31,7 +31,7 @@ GESPipeline * ges_test_create_pipeline (GESTimeline *timeline); * 1- The Gaps */ #define MIN_NLE_PRIO 2 - +#define TRANSITIONS_HEIGHT 1 #define LAYER_HEIGHT 1000 gchar * ges_test_get_tmp_uri (const gchar * filename); diff --git a/tests/check/ges/titles.c b/tests/check/ges/titles.c index cf8aceb..90467a0 100644 --- a/tests/check/ges/titles.c +++ b/tests/check/ges/titles.c @@ -81,7 +81,7 @@ GST_START_TEST (test_title_source_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 0, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change more properties, see if they propagate */ g_object_set (clip, "start", (guint64) 420, "duration", (guint64) 510, @@ -96,7 +96,7 @@ GST_START_TEST (test_title_source_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 0, 510, MIN_NLE_PRIO + 0, TRUE); + 0, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, TRUE); ges_container_remove (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (trackelement)); diff --git a/tests/check/ges/uriclip.c b/tests/check/ges/uriclip.c index d1f046f..44bc9e9 100644 --- a/tests/check/ges/uriclip.c +++ b/tests/check/ges/uriclip.c @@ -168,7 +168,7 @@ GST_START_TEST (test_filesource_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 42, 51, 12, - 51, MIN_NLE_PRIO, TRUE); + 51, MIN_NLE_PRIO + TRANSITIONS_HEIGHT, TRUE); /* Change more properties, see if they propagate */ g_object_set (clip, "start", (guint64) 420, "duration", (guint64) 510, @@ -183,17 +183,17 @@ GST_START_TEST (test_filesource_properties) /* And let's also check that it propagated correctly to GNonLin */ nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, TRUE); /* Test mute support */ g_object_set (clip, "mute", TRUE, NULL); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, FALSE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, FALSE); g_object_set (clip, "mute", FALSE, NULL); ges_timeline_commit (timeline); nle_object_check (ges_track_element_get_nleobject (trackelement), 420, 510, - 120, 510, MIN_NLE_PRIO + 0, TRUE); + 120, 510, MIN_NLE_PRIO + TRANSITIONS_HEIGHT + 0, TRUE); ges_container_remove (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (trackelement)); diff --git a/tests/check/python/test_clip.py b/tests/check/python/test_clip.py index 9c91a14..83c7a8d 100644 --- a/tests/check/python/test_clip.py +++ b/tests/check/python/test_clip.py @@ -98,6 +98,8 @@ class TestTitleClip(unittest.TestCase): children2 = clip2.get_children(True) self.assertNotEqual(children2[0].props.priority, children2[1].props.priority) + + class TestTrackElements(unittest.TestCase): def test_add_to_layer_with_effect_remove_add(self): timeline = GES.Timeline.new_audio_video()