layer: Resort clips before syncing priorities
authorThibault Saunier <tsaunier@igalia.com>
Mon, 28 Jan 2019 21:59:40 +0000 (18:59 -0300)
committerThibault Saunier <tsaunier@igalia.com>
Mon, 28 Jan 2019 22:19:46 +0000 (19:19 -0300)
We set the priorities making the assumption that `start_clips` is properly
ordered by start!

Fixes https://gitlab.gnome.org/GNOME/pitivi/issues/2254

ges/ges-layer.c
tests/check/python/test_timeline.py

index ad33c02..80e669e 100644 (file)
@@ -234,6 +234,9 @@ ges_layer_resync_priorities_by_type (GESLayer * layer,
   GList *tmp;
   GESTimelineElement *element;
 
+  layer->priv->clips_start =
+      g_list_sort (layer->priv->clips_start,
+      (GCompareFunc) element_start_compare);
   for (tmp = layer->priv->clips_start; tmp; tmp = tmp->next) {
 
     element = GES_TIMELINE_ELEMENT (tmp->data);
@@ -783,6 +786,9 @@ ges_layer_get_clips_in_interval (GESLayer * layer, GstClockTime start,
 
   g_return_val_if_fail (GES_IS_LAYER (layer), NULL);
 
+  layer->priv->clips_start =
+      g_list_sort (layer->priv->clips_start,
+      (GCompareFunc) element_start_compare);
   for (tmp = layer->priv->clips_start; tmp; tmp = tmp->next) {
     clip_intersects = FALSE;
     clip_start = ges_timeline_element_get_start (tmp->data);
index 045c0e0..72a81b0 100644 (file)
@@ -244,3 +244,17 @@ class TestTransitions(GESSimpleTimelineTest):
         # transition and once for the audio transition.
         self.assertEqual(
             signals, ["notify::start", "clip-added", "clip-added"])
+
+
+class TestPriorities(GESSimpleTimelineTest):
+
+    def test_clips_priorities(self):
+        clip = self.add_clip(0, 0, 100)
+        clip1 = self.add_clip(100, 0, 100)
+        self.timeline.commit()
+
+        self.assertLess(clip.props.priority, clip1.props.priority)
+
+        clip.props.start = 101
+        self.timeline.commit()
+        self.assertGreater(clip.props.priority, clip1.props.priority)
\ No newline at end of file