clip: Copy trackelement's metadata upon splitting
authorPiotrek Brzeziński <thewildtree@outlook.com>
Wed, 21 Jul 2021 17:31:53 +0000 (19:31 +0200)
committerPiotrek Brzeziński <thewildtree@outlook.com>
Sat, 14 Aug 2021 13:46:07 +0000 (15:46 +0200)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/260>

ges/ges-clip.c
tests/check/ges/clip.c

index fbd4f47..1b297b3 100644 (file)
@@ -3480,6 +3480,7 @@ ges_clip_split_full (GESClip * clip, guint64 position, GError ** error)
     GESTrackElement *copy, *orig = tmp->data;
     GESTrack *track = ges_track_element_get_track (orig);
     GESAutoTransition *trans;
+    gchar *meta;
 
     copy = ges_clip_copy_track_element_into (new_object, orig, new_inpoint);
 
@@ -3490,6 +3491,10 @@ ges_clip_split_full (GESClip * clip, guint64 position, GError ** error)
       g_hash_table_insert (track_for_copy, gst_object_ref (copy),
           gst_object_ref (track));
 
+    meta = ges_meta_container_metas_to_string (GES_META_CONTAINER (orig));
+    ges_meta_container_add_metas_from_string (GES_META_CONTAINER (copy), meta);
+    g_free (meta);
+
     trans = timeline ?
         ges_timeline_get_auto_transition_at_edge (timeline, orig,
         GES_EDGE_END) : NULL;
index cabb3e2..f2a9d23 100644 (file)
@@ -475,6 +475,7 @@ GST_START_TEST (test_split_object)
       *splittrackelement;
   guint32 priority1, priority2, effect_priority1, effect_priority2;
   guint selection_called = 0;
+  const gchar *meta;
 
   ges_init ();
 
@@ -502,6 +503,9 @@ GST_START_TEST (test_split_object)
   fail_unless (trackelement1 != NULL);
   fail_unless (GES_TIMELINE_ELEMENT_PARENT (trackelement1) ==
       GES_TIMELINE_ELEMENT (clip));
+  ges_meta_container_set_string (GES_META_CONTAINER (trackelement1), "test_key",
+      "test_value");
+
   trackelement2 = GES_CONTAINER_CHILDREN (clip)->next->data;
   fail_unless (trackelement2 != NULL);
   fail_unless (GES_TIMELINE_ELEMENT_PARENT (trackelement2) ==
@@ -633,6 +637,9 @@ GST_START_TEST (test_split_object)
   assert_equals_int (GES_TIMELINE_ELEMENT_PRIORITY (splittrackelement),
       priority1 + 3);
   fail_unless (GES_TIMELINE_ELEMENT_PRIORITY (trackelement1) == priority2);
+  meta = ges_meta_container_get_string (GES_META_CONTAINER (splittrackelement),
+      "test_key");
+  fail_unless_equals_string (meta, "test_value");
 
   fail_unless (splittrackelement != trackelement1);
   fail_unless (splittrackelement != trackelement2);