[0.10] gst-editing-services: track-object: Add method to copy a TrackObject
Thibault Saunier
tsaunier at kemper.freedesktop.org
Wed Apr 25 14:37:14 PDT 2012
Module: gst-editing-services
Branch: 0.10
Commit: efc28fd35e31c6de78f4ce245c1031f5d2d13937
URL: http://cgit.freedesktop.org/gstreamer/gst-editing-services/commit/?id=efc28fd35e31c6de78f4ce245c1031f5d2d13937
Author: Thibault Saunier <thibault.saunier at collabora.com>
Date: Thu Apr 19 00:34:59 2012 -0400
track-object: Add method to copy a TrackObject
API: ges_track_object_copy
---
ges/ges-internal.h | 4 ++++
ges/ges-track-object.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/ges/ges-internal.h b/ges/ges-internal.h
index a104dae..192ca93 100644
--- a/ges/ges-internal.h
+++ b/ges/ges-internal.h
@@ -22,8 +22,12 @@
#define __GES_INTERNAL_H__
#include <gst/gst.h>
+#include "ges-track-object.h"
GST_DEBUG_CATEGORY_EXTERN (_ges_debug);
#define GST_CAT_DEFAULT _ges_debug
+GESTrackObject *
+ges_track_object_copy (GESTrackObject * object, gboolean deep);
+
#endif /* __GES_INTERNAL_H__ */
diff --git a/ges/ges-track-object.c b/ges/ges-track-object.c
index 7318f96..be21798 100644
--- a/ges/ges-track-object.c
+++ b/ges/ges-track-object.c
@@ -1498,3 +1498,49 @@ ges_track_object_set_max_duration (GESTrackObject * object, guint64 maxduration)
object->priv->maxduration = maxduration;
}
+
+GESTrackObject *
+ges_track_object_copy (GESTrackObject * object, gboolean deep)
+{
+ GESTrackObject *ret = NULL;
+ GParameter *params;
+ GParamSpec **specs;
+ guint n, n_specs, n_params;
+ GValue val = { 0 };
+
+ g_return_val_if_fail (GES_IS_TRACK_OBJECT (object), NULL);
+
+ specs =
+ g_object_class_list_properties (G_OBJECT_GET_CLASS (object), &n_specs);
+ params = g_new0 (GParameter, n_specs);
+ n_params = 0;
+
+ for (n = 0; n < n_specs; ++n) {
+ if (g_strcmp0 (specs[n]->name, "parent") &&
+ (specs[n]->flags & G_PARAM_READWRITE) == G_PARAM_READWRITE) {
+ params[n_params].name = g_intern_string (specs[n]->name);
+ g_value_init (¶ms[n_params].value, specs[n]->value_type);
+ g_object_get_property (G_OBJECT (object), specs[n]->name,
+ ¶ms[n_params].value);
+ ++n_params;
+ }
+ }
+
+ ret = g_object_newv (G_TYPE_FROM_INSTANCE (object), n_params, params);
+ g_free (specs);
+ g_free (params);
+
+ if (deep == FALSE)
+ return ret;
+
+ ensure_gnl_object (ret);
+ specs = ges_track_object_list_children_properties (object, &n_specs);
+ for (n = 0; n < n_specs; ++n) {
+ g_value_init (&val, specs[n]->value_type);
+ g_object_get_property (G_OBJECT (object), specs[n]->name, &val);
+ ges_track_object_set_child_property_by_pspec (ret, specs[n], &val);
+ g_value_unset (&val);
+ }
+
+ return ret;
+}
More information about the gstreamer-commits
mailing list