GESTrackObject: add a ges_track_object_set_child_property_method

test: Test the new method
This commit is contained in:
Thibault Saunier 2011-02-08 10:25:41 +01:00 committed by Edward Hervey
parent 28ea2cf7a1
commit d9c07a4ed4
4 changed files with 84 additions and 4 deletions

View file

@ -83,6 +83,7 @@ ges_track_object_get_inpoint
ges_track_object_get_duration ges_track_object_get_duration
ges_track_object_get_priority ges_track_object_get_priority
ges_track_object_is_active ges_track_object_is_active
ges_track_object_set_child_property
<SUBSECTION Standard> <SUBSECTION Standard>
GES_TRACK_OBJECT_DURATION GES_TRACK_OBJECT_DURATION
GES_TRACK_OBJECT_INPOINT GES_TRACK_OBJECT_INPOINT

View file

@ -920,3 +920,35 @@ ges_track_object_is_active (GESTrackObject * object)
else else
return object->active; return object->active;
} }
/**
* ges_track_object_set_child_property:
* @object: a #GESTrackObject
* @property_name: The name of the property to set
* @value: the value
*
* Sets a property of a child of @object. The property name
* should look like ClasseName-property-name
*/
void
ges_track_object_set_child_property (GESTrackObject * object,
const gchar * property_name, GValue * 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_set_property (G_OBJECT (element), prop_name[1], value);
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);
}
}

View file

@ -152,6 +152,7 @@ void ges_track_object_set_start (GESTrackObject * object, guint64 start);
void ges_track_object_set_inpoint (GESTrackObject * object, guint64 inpoint); void ges_track_object_set_inpoint (GESTrackObject * object, guint64 inpoint);
void ges_track_object_set_duration (GESTrackObject * object, guint64 duration); void ges_track_object_set_duration (GESTrackObject * object, guint64 duration);
void ges_track_object_set_priority (GESTrackObject * object, guint32 priority); void ges_track_object_set_priority (GESTrackObject * object, guint32 priority);
gboolean ges_track_object_set_active (GESTrackObject * object, gboolean active);
guint64 ges_track_object_get_start (GESTrackObject * object); guint64 ges_track_object_get_start (GESTrackObject * object);
guint64 ges_track_object_get_inpoint (GESTrackObject * object); guint64 ges_track_object_get_inpoint (GESTrackObject * object);
@ -159,7 +160,7 @@ guint64 ges_track_object_get_duration (GESTrackObject * object);
guint32 ges_track_object_get_priority (GESTrackObject * object); guint32 ges_track_object_get_priority (GESTrackObject * object);
gboolean ges_track_object_is_active (GESTrackObject * object); gboolean ges_track_object_is_active (GESTrackObject * object);
gboolean ges_track_object_set_active (GESTrackObject * object, gboolean active); void ges_track_object_set_child_property (GESTrackObject * object,
const gchar * property_name, GValue * value);
G_END_DECLS G_END_DECLS
#endif /* _GES_TRACK_OBJECT */ #endif /* _GES_TRACK_OBJECT */

View file

@ -218,8 +218,8 @@ GST_START_TEST (test_tl_effect)
GES_TRACK_OPERATION (tmp->data)); GES_TRACK_OPERATION (tmp->data));
fail_unless (priority > effect_prio); fail_unless (priority > effect_prio);
fail_unless (GES_IS_TRACK_EFFECT (tmp->data)); fail_unless (GES_IS_TRACK_EFFECT (tmp->data));
fail_unless (ges_track_object_get_track (GES_TRACK_OBJECT (tmp->data))-> fail_unless (ges_track_object_get_track (GES_TRACK_OBJECT (tmp->
type == track_type[i]); data))->type == track_type[i]);
effect_prio = priority; effect_prio = priority;
g_object_unref (tmp->data); g_object_unref (tmp->data);
@ -313,6 +313,51 @@ GST_START_TEST (test_priorities_tl_object)
GST_END_TEST; GST_END_TEST;
GST_START_TEST (test_track_effect_set_properties)
{
GESTimeline *timeline;
GESTimelineLayer *layer;
GESTrack *track_video;
GESTimelineEffect *tl_effect;
GESTrackEffect *tck_effect;
GValue value = { 0 };
ges_init ();
timeline = ges_timeline_new ();
layer = (GESTimelineLayer *) ges_simple_timeline_layer_new ();
track_video = ges_track_video_raw_new ();
ges_timeline_add_track (timeline, track_video);
ges_timeline_add_layer (timeline, layer);
GST_DEBUG ("Create effect");
tl_effect = ges_timeline_effect_new_from_bin_desc ("agingtv", NULL);
g_object_set (tl_effect, "duration", 25 * GST_SECOND, NULL);
ges_simple_timeline_layer_add_object ((GESSimpleTimelineLayer *) (layer),
(GESTimelineObject *) tl_effect, 0);
tck_effect = ges_track_effect_new_from_bin_desc ("agingtv");
fail_unless (ges_timeline_object_add_track_object (GES_TIMELINE_OBJECT
(tl_effect), GES_TRACK_OBJECT (tck_effect)));
fail_unless (ges_track_add_object (track_video,
GES_TRACK_OBJECT (tck_effect)));
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_timeline_layer_remove_object (layer, (GESTimelineObject *) tl_effect);
g_object_unref (timeline);
}
GST_END_TEST;
static Suite * static Suite *
ges_suite (void) ges_suite (void)
{ {
@ -326,6 +371,7 @@ ges_suite (void)
tcase_add_test (tc_chain, test_get_effects_from_tl); tcase_add_test (tc_chain, test_get_effects_from_tl);
tcase_add_test (tc_chain, test_tl_effect); tcase_add_test (tc_chain, test_tl_effect);
tcase_add_test (tc_chain, test_priorities_tl_object); tcase_add_test (tc_chain, test_priorities_tl_object);
tcase_add_test (tc_chain, test_track_effect_set_properties);
return s; return s;
} }