formatter: Do not serialize top effect priorities
authorThibault Saunier <tsaunier@gnome.org>
Wed, 4 Nov 2015 19:20:10 +0000 (20:20 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Wed, 4 Nov 2015 20:13:07 +0000 (21:13 +0100)
We just need to make sure they are always serialized in the right
order (which is the case) and de serializing them will lead to the
right behaviour.

We should not serialize the priority as the priority of the source
itself depends on the action having been done on the parent clip,
and we do not serialize the source priorities (and should not, GES
should just do the right thing).

Differential Revision: https://phabricator.freedesktop.org/D491

ges/ges-base-xml-formatter.c
ges/ges-xml-formatter.c

index 5223ecb61d1ce59ca7689b48f29cb8fa52125b6a..bf176d8e4c5d459fbb16788f89f6f53ec7f0b1e7 100644 (file)
@@ -567,9 +567,12 @@ _add_track_element (GESFormatter * self, GESClip * clip,
   gst_structure_foreach (children_properties,
       (GstStructureForeachFunc) _set_child_property, trackelement);
 
-  if (properties)
+  if (properties) {
+    /* We do not serialize the priority anymore, and we should never have. */
+    gst_structure_remove_field (properties, "priority");
     gst_structure_foreach (properties,
         (GstStructureForeachFunc) set_property_foreach, trackelement);
+  }
 }
 
 static void
index 340fa7afed561f1b45019b0e5e1d20aa15805879..07588f657a7fefbca0cd8ea7a3297b6ba0a30299 100644 (file)
@@ -1085,7 +1085,8 @@ _save_effect (GString * str, guint clip_id, GESTrackElement * trackelement,
   g_list_free_full (tracks, gst_object_unref);
 
   properties = _serialize_properties (G_OBJECT (trackelement), "start",
-      "in-point", "duration", "locked", "max-duration", "name", NULL);
+      "in-point", "duration", "locked", "max-duration", "name", "priority",
+      NULL);
   metas =
       ges_meta_container_metas_to_string (GES_META_CONTAINER (trackelement));
   extractable_id = ges_extractable_get_id (GES_EXTRACTABLE (trackelement));
@@ -1146,8 +1147,6 @@ _save_layers (GESXmlFormatter * self, GString * str, GESTimeline * timeline)
         continue;
       }
 
-      effects = ges_clip_get_top_effects (clip);
-
       /* We escape all mandatrorry properties that are handled sparetely
        * and vtype for StandarTransition as it is the asset ID */
       properties = _serialize_properties (G_OBJECT (clip),
@@ -1169,9 +1168,14 @@ _save_layers (GESXmlFormatter * self, GString * str, GESTimeline * timeline)
       g_hash_table_insert (self->priv->element_id, clip,
           GINT_TO_POINTER (priv->nbelements));
 
-      for (tmpeffect = effects; tmpeffect; tmpeffect = tmpeffect->next)
+      /* Effects must always be serialized in the right priority order.
+       * List order is guaranteed by the fact that ges_clip_get_top_effects
+       * sorts the effects. */
+      effects = ges_clip_get_top_effects (clip);
+      for (tmpeffect = effects; tmpeffect; tmpeffect = tmpeffect->next) {
         _save_effect (str, priv->nbelements,
             GES_TRACK_ELEMENT (tmpeffect->data), timeline);
+      }
 
       tracks = ges_timeline_get_tracks (timeline);