diff --git a/docs/design/effects.txt b/docs/design/effects.txt index c3a9404a81..9844b21f5a 100644 --- a/docs/design/effects.txt +++ b/docs/design/effects.txt @@ -162,7 +162,7 @@ C. Keyframes */ void ges_track_object_get_child_property (GESTrackObject *object, const gchar *property_name, - GValue * value); + gpointer value); /** * ges_track_object_get_material: diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt index 25c17fbd84..6c6719f0e1 100644 --- a/docs/libs/ges-sections.txt +++ b/docs/libs/ges-sections.txt @@ -84,6 +84,7 @@ ges_track_object_get_duration ges_track_object_get_priority ges_track_object_is_active ges_track_object_set_child_property +ges_track_object_get_child_property GES_TRACK_OBJECT_DURATION GES_TRACK_OBJECT_INPOINT diff --git a/ges/ges-track-object.c b/ges/ges-track-object.c index f46c655fe2..d87d84f17e 100644 --- a/ges/ges-track-object.c +++ b/ges/ges-track-object.c @@ -952,3 +952,34 @@ ges_track_object_set_child_property (GESTrackObject * object, GST_DEBUG ("The child properties haven't been set on %p", object); } } + +/** +* ges_track_object_get_child_property: +* @object: The origin #GESTrackObject +* @property_name: The name of the property +* @value: return location for the property value +* +* Gets a property of a child of @object. +*/ +void +ges_track_object_get_child_property (GESTrackObject * object, + const gchar * property_name, gpointer value) +{ + GESTrackObjectPrivate *priv = object->priv; + + if (priv->properties_hashtable) { + GstElement *element; + gchar **prop_name; + + element = g_hash_table_lookup (priv->properties_hashtable, property_name); + if (element) { + prop_name = g_strsplit (property_name, "-", 2); + g_object_get (G_OBJECT (element), prop_name[1], value, NULL); + g_strfreev (prop_name); + } else { + GST_ERROR ("The %s property doesn't exist", property_name); + } + } else { + GST_DEBUG ("The child properties haven't been set on %p", object); + } +} diff --git a/ges/ges-track-object.h b/ges/ges-track-object.h index be8cf6fc49..bd35435411 100644 --- a/ges/ges-track-object.h +++ b/ges/ges-track-object.h @@ -162,5 +162,8 @@ gboolean ges_track_object_is_active (GESTrackObject * object); void ges_track_object_set_child_property (GESTrackObject * object, const gchar * property_name, GValue * value); +void ges_track_object_get_child_property (GESTrackObject *object, + const gchar *property_name, + gpointer value); G_END_DECLS #endif /* _GES_TRACK_OBJECT */ diff --git a/tests/check/ges/effects.c b/tests/check/ges/effects.c index da2f668d20..f5fab1284d 100644 --- a/tests/check/ges/effects.c +++ b/tests/check/ges/effects.c @@ -321,6 +321,7 @@ GST_START_TEST (test_track_effect_set_properties) GESTimelineEffect *tl_effect; GESTrackEffect *tck_effect; GValue value = { 0 }; + guint val; ges_init (); @@ -347,9 +348,11 @@ GST_START_TEST (test_track_effect_set_properties) g_value_init (&value, G_TYPE_UINT); g_value_set_uint (&value, 17); - ges_track_object_set_child_property (GES_TRACK_OBJECT (tck_effect), "GstAgingTV-scratch-lines", &value); + ges_track_object_get_child_property (GES_TRACK_OBJECT (tck_effect), + "GstAgingTV-scratch-lines", &val); + fail_unless (val == 17); ges_timeline_layer_remove_object (layer, (GESTimelineObject *) tl_effect);