From af326df8bdbca988140b3cdbb17bc20180159767 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Thu, 10 Jan 2013 11:15:32 -0300 Subject: [PATCH] utilities: Make internal utilities instead of copy/pasting functions --- ges/ges-internal.h | 6 ++++++ ges/ges-timeline-layer.c | 32 ++++---------------------------- ges/ges-timeline.c | 21 ++------------------- ges/ges-track.c | 25 ++----------------------- ges/ges-utils.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 70 deletions(-) diff --git a/ges/ges-internal.h b/ges/ges-internal.h index 71cbc5a..c555111 100644 --- a/ges/ges-internal.h +++ b/ges/ges-internal.h @@ -208,4 +208,10 @@ G_GNUC_INTERNAL void set_property_foreach (GQuark field_id G_GNUC_INTERNAL void _init_standard_transition_assets (void); G_GNUC_INTERNAL void _init_formatter_assets (void); +/* Utilities */ +G_GNUC_INTERNAL gint track_object_start_compare (GESTrackObject * a, + GESTrackObject * b); +G_GNUC_INTERNAL gint timeline_object_start_compare (GESTimelineObject * a, + GESTimelineObject * b); + #endif /* __GES_INTERNAL_H__ */ diff --git a/ges/ges-timeline-layer.c b/ges/ges-timeline-layer.c index 9cf91bf..2bb29d8 100644 --- a/ges/ges-timeline-layer.c +++ b/ges/ges-timeline-layer.c @@ -210,24 +210,6 @@ ges_timeline_layer_init (GESTimelineLayer * self) self->max_gnl_priority = LAYER_HEIGHT; } -/* Private methods and utils */ -static gint -objects_start_compare (GESTimelineObject * a, GESTimelineObject * 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; -} - static GList * track_get_by_layer (GESTimelineLayer * layer, GESTrack * track) { @@ -895,8 +877,6 @@ ges_timeline_layer_get_priority (GESTimelineLayer * layer) GList * ges_timeline_layer_get_objects (GESTimelineLayer * layer) { - GList *ret = NULL; - GList *tmp; GESTimelineLayerClass *klass; g_return_val_if_fail (GES_IS_TIMELINE_LAYER (layer), NULL); @@ -907,13 +887,9 @@ ges_timeline_layer_get_objects (GESTimelineLayer * layer) return klass->get_objects (layer); } - for (tmp = layer->priv->objects_start; tmp; tmp = tmp->next) { - ret = g_list_prepend (ret, tmp->data); - g_object_ref (tmp->data); - } - - ret = g_list_reverse (ret); - return ret; + return g_list_sort (g_list_copy_deep (layer->priv->objects_start, + (GCopyFunc) gst_object_ref, NULL), + (GCompareFunc) timeline_object_start_compare); } /** @@ -1010,7 +986,7 @@ ges_timeline_layer_add_object (GESTimelineLayer * layer, /* Take a reference to the object and store it stored by start/priority */ priv->objects_start = g_list_insert_sorted (priv->objects_start, object, - (GCompareFunc) objects_start_compare); + (GCompareFunc) timeline_object_start_compare); /* Inform the object it's now in this layer */ ges_timeline_object_set_layer (object, layer); diff --git a/ges/ges-timeline.c b/ges/ges-timeline.c index e0726e9..2ef5370 100644 --- a/ges/ges-timeline.c +++ b/ges/ges-timeline.c @@ -572,30 +572,13 @@ timeline_update_duration (GESTimeline * timeline) } } -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; -} - static inline void sort_track_objects (GESTimeline * timeline, GESTrackObject * obj) { TrackObjIters *iters = g_hash_table_lookup (timeline->priv->obj_iters, obj); g_sequence_sort_changed (iters->iter_obj, - (GCompareDataFunc) objects_start_compare, NULL); + (GCompareDataFunc) track_object_start_compare, NULL); } static gint @@ -709,7 +692,7 @@ start_tracking_track_obj (GESTimeline * timeline, GESTrackObject * tckobj) (GCompareDataFunc) compare_uint64, NULL); iters->iter_obj = g_sequence_insert_sorted (priv->tracksources, g_object_ref (tckobj), - (GCompareDataFunc) objects_start_compare, NULL); + (GCompareDataFunc) track_object_start_compare, NULL); g_hash_table_insert (priv->by_start, tckobj, pstart); g_hash_table_insert (priv->by_object, pstart, tckobj); diff --git a/ges/ges-track.c b/ges/ges-track.c index cd04ece..851a70d 100644 --- a/ges/ges-track.c +++ b/ges/ges-track.c @@ -92,27 +92,6 @@ static void composition_duration_cb (GstElement * composition, GParamSpec * arg G_GNUC_UNUSED, GESTrack * obj); /* Private methods/functions/callbacks */ - -/* Utilities */ -static gint -objects_start_compare (GESTrackObject * a, GESTrackObject * b, - gpointer user_data) -{ - - 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; -} - static void add_trackobj_to_list_foreach (GESTrackObject * trackobj, GList ** list) { @@ -248,7 +227,7 @@ static inline void resort_and_fill_gaps (GESTrack * track) { g_sequence_sort (track->priv->tckobjs_by_start, - (GCompareDataFunc) objects_start_compare, NULL); + (GCompareDataFunc) track_object_start_compare, NULL); if (track->priv->updating == TRUE) { update_gaps (track); @@ -770,7 +749,7 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object) g_object_ref_sink (object); g_hash_table_insert (track->priv->tckobjs_iter, object, g_sequence_insert_sorted (track->priv->tckobjs_by_start, object, - (GCompareDataFunc) objects_start_compare, NULL)); + (GCompareDataFunc) track_object_start_compare, NULL)); g_signal_emit (track, ges_track_signals[TRACK_OBJECT_ADDED], 0, GES_TRACK_OBJECT (object)); diff --git a/ges/ges-utils.c b/ges/ges-utils.c index 2857024..e3ba51b 100644 --- a/ges/ges-utils.c +++ b/ges/ges-utils.c @@ -58,3 +58,46 @@ ges_timeline_new_audio_video (void) return timeline; } + +/* Internal utilities */ +gint +track_object_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; + if (a->duration < b->duration) + return -1; + if (a->duration > b->duration) + return 1; + return 0; + } + if (a->start < b->start) + return -1; + if (a->start > b->start) + return 1; + return 0; +} + +gint +timeline_object_start_compare (GESTimelineObject * a, GESTimelineObject * b) +{ + if (a->start == b->start) { + if (a->priority < b->priority) + return -1; + if (a->priority > b->priority) + return 1; + if (a->duration < b->duration) + return -1; + if (a->duration > b->duration) + return 1; + return 0; + } + if (a->start < b->start) + return -1; + if (a->start > b->start) + return 1; + return 0; +} -- 2.7.4