diff options
author | Mathieu Duponchelle <seeed@laposte.net> | 2011-07-08 03:37:28 +0200 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@collabora.com> | 2012-01-11 11:56:14 -0300 |
commit | c1917156086c89a906561bc2f6337e57e9c4d70c (patch) | |
tree | 48f0a59a7b71df6d2426674af296cc07e34cf97c | |
parent | 49e547d8fbc875f33409a8da10380f712a05d133 (diff) |
ges: Add API to get the TrackObject-s contained in a Track
Sort the track_objects list
API: ges_track_get_objects
-rw-r--r-- | ges/ges-track.c | 42 | ||||
-rw-r--r-- | ges/ges-track.h | 2 |
2 files changed, 42 insertions, 2 deletions
diff --git a/ges/ges-track.c b/ges/ges-track.c index 0e808615..c61451ac 100644 --- a/ges/ges-track.c +++ b/ges/ges-track.c @@ -335,6 +335,26 @@ ges_track_set_caps (GESTrack * track, const GstCaps * caps) /* FIXME : update all trackobjects ? */ } + +/* FIXME : put the compare function in the utils */ + +static gint +objects_start_compare (GESTrackObject * a, GESTrackObject * b) +{ + if (a->start == b->start) { + if (a->priority < b->priority) + return -1; + if (a->priority > b->priority) + return 1; + return 0; + } + if (a->start < b->start) + return -1; + if (a->start > b->start) + return 1; + return 0; +} + /** * ges_track_add_object: * @track: a #GESTrack @@ -383,14 +403,32 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object) } g_object_ref_sink (object); - - track->priv->trackobjects = g_list_append (track->priv->trackobjects, object); + track->priv->trackobjects = + g_list_insert_sorted (track->priv->trackobjects, object, + (GCompareFunc) objects_start_compare); g_signal_emit (track, ges_track_signals[TRACK_OBJECT_ADDED], 0, GES_TRACK_OBJECT (object)); return TRUE; } +GList * +ges_track_get_objects (GESTrack * track) +{ + GList *ret = NULL; + GList *tmp; + + g_return_val_if_fail (GES_IS_TRACK (track), NULL); + + for (tmp = track->priv->trackobjects; tmp; tmp = tmp->next) { + ret = g_list_prepend (ret, tmp->data); + g_object_ref (tmp->data); + } + + ret = g_list_reverse (ret); + return ret; +} + /** * ges_track_remove_object: * @track: a #GESTrack diff --git a/ges/ges-track.h b/ges/ges-track.h index c082e9e2..fa44ced2 100644 --- a/ges/ges-track.h +++ b/ges/ges-track.h @@ -98,6 +98,8 @@ gboolean ges_track_remove_object (GESTrack * track, GESTrack *ges_track_video_raw_new (void); GESTrack *ges_track_audio_raw_new (void); +GList* ges_track_get_objects (GESTrack *track); + G_END_DECLS #endif /* _GES_TRACK */ |