summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <thibault.saunier@collabora.com>2013-07-24 14:26:18 -0400
committerThibault Saunier <thibault.saunier@collabora.com>2013-07-24 21:30:23 -0400
commitc1451cf48c4d6c169e9f16c450d5ffd9af3b2804 (patch)
treeb11ae7c117543bc6c12dffb784c995e40a9f04aa
parente8b3eaf0f2c0caeff638256fa63921c18c812c59 (diff)
clip: Fix the spliting method
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
-rw-r--r--ges/ges-clip.c4
-rw-r--r--ges/ges-internal.h2
-rw-r--r--ges/ges-track-element.c10
3 files changed, 10 insertions, 6 deletions
diff --git a/ges/ges-clip.c b/ges/ges-clip.c
index bcc3cdf..602cd38 100644
--- a/ges/ges-clip.c
+++ b/ges/ges-clip.c
@@ -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;
diff --git a/ges/ges-internal.h b/ges/ges-internal.h
index e03fd7e..c4aea8f 100644
--- a/ges/ges-internal.h
+++ b/ges/ges-internal.h
@@ -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__ */
diff --git a/ges/ges-track-element.c b/ges/ges-track-element.c
index bf81e3a..33f0c8b 100644
--- a/ges/ges-track-element.c
+++ b/ges/ges-track-element.c
@@ -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);
}