clip: Fix the spliting method
authorThibault Saunier <thibault.saunier@collabora.com>
Wed, 24 Jul 2013 18:26:18 +0000 (14:26 -0400)
committerThibault Saunier <thibault.saunier@collabora.com>
Thu, 25 Jul 2013 01:30:23 +0000 (21:30 -0400)
We should make sure that the newly created trackelement are inside
a container when adding them to as this is needed for GESUriClip-s.

Also do not try to set a child property on the TrackElement itself.

https://bugzilla.gnome.org/show_bug.cgi?id=703152

ges/ges-clip.c
ges/ges-internal.h
ges/ges-track-element.c

index bcc3cdf..602cd38 100644 (file)
@@ -1250,7 +1250,7 @@ ges_clip_split (GESClip * clip, guint64 position)
 
     new_trackelement =
         GES_TRACK_ELEMENT (ges_timeline_element_copy (GES_TIMELINE_ELEMENT
-            (trackelement), TRUE));
+            (trackelement), FALSE));
     if (new_trackelement == NULL) {
       GST_WARNING_OBJECT (trackelement, "Could not create a copy");
       continue;
@@ -1265,6 +1265,8 @@ ges_clip_split (GESClip * clip, guint64 position)
 
     ges_container_add (GES_CONTAINER (new_object),
         GES_TIMELINE_ELEMENT (new_trackelement));
+    ges_track_element_copy_properties (GES_TIMELINE_ELEMENT (trackelement),
+        GES_TIMELINE_ELEMENT (new_trackelement));
   }
 
   return new_object;
index e03fd7e..c4aea8f 100644 (file)
@@ -276,5 +276,7 @@ GList*            ges_clip_create_track_elements  (GESClip *clip, GESTrackType t
 #define         GNL_OBJECT_TRACK_ELEMENT_QUARK                  (g_quark_from_string ("gnl_object_track_element_quark"))
 G_GNUC_INTERNAL gboolean  ges_track_element_set_track           (GESTrackElement * object, GESTrack * track);
 G_GNUC_INTERNAL guint32   _ges_track_element_get_layer_priority (GESTrackElement * element);
+G_GNUC_INTERNAL void ges_track_element_copy_properties          (GESTimelineElement * element,
+                                                                 GESTimelineElement * elementcopy);
 
 #endif /* __GES_INTERNAL_H__ */
index bf81e3a..33f0c8b 100644 (file)
@@ -113,8 +113,6 @@ static gboolean _set_inpoint (GESTimelineElement * element,
 static gboolean _set_duration (GESTimelineElement * element,
     GstClockTime duration);
 static gboolean _set_priority (GESTimelineElement * element, guint32 priority);
-static void _deep_copy (GESTimelineElement * element,
-    GESTimelineElement * copy);
 
 static GParamSpec **default_list_children_properties (GESTrackElement * object,
     guint * n_properties);
@@ -258,7 +256,7 @@ ges_track_element_class_init (GESTrackElementClass * klass)
   element_class->set_duration = _set_duration;
   element_class->set_inpoint = _set_inpoint;
   element_class->set_priority = _set_priority;
-  element_class->deep_copy = _deep_copy;
+  element_class->deep_copy = ges_track_element_copy_properties;
 
   klass->create_gnl_object = ges_track_element_create_gnl_object_func;
   /*  There is no 'get_props_hashtable' default implementation */
@@ -1251,7 +1249,8 @@ prop_hash_not_set:
 }
 
 void
-_deep_copy (GESTimelineElement * element, GESTimelineElement * elementcopy)
+ges_track_element_copy_properties (GESTimelineElement * element,
+    GESTimelineElement * elementcopy)
 {
   GParamSpec **specs;
   guint n, n_specs;
@@ -1264,7 +1263,8 @@ _deep_copy (GESTimelineElement * element, GESTimelineElement * elementcopy)
       &n_specs);
   for (n = 0; n < n_specs; ++n) {
     g_value_init (&val, specs[n]->value_type);
-    g_object_get_property (G_OBJECT (element), specs[n]->name, &val);
+    ges_track_element_get_child_property_by_pspec (GES_TRACK_ELEMENT (element),
+        specs[n], &val);
     ges_track_element_set_child_property_by_pspec (copy, specs[n], &val);
     g_value_unset (&val);
   }