mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 23:48:53 +00:00
utilities: Make internal utilities instead of copy/pasting functions
This commit is contained in:
parent
3e310e5960
commit
af326df8bd
5 changed files with 57 additions and 70 deletions
|
@ -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_standard_transition_assets (void);
|
||||||
G_GNUC_INTERNAL void _init_formatter_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__ */
|
#endif /* __GES_INTERNAL_H__ */
|
||||||
|
|
|
@ -210,24 +210,6 @@ ges_timeline_layer_init (GESTimelineLayer * self)
|
||||||
self->max_gnl_priority = LAYER_HEIGHT;
|
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 *
|
static GList *
|
||||||
track_get_by_layer (GESTimelineLayer * layer, GESTrack * track)
|
track_get_by_layer (GESTimelineLayer * layer, GESTrack * track)
|
||||||
{
|
{
|
||||||
|
@ -895,8 +877,6 @@ ges_timeline_layer_get_priority (GESTimelineLayer * layer)
|
||||||
GList *
|
GList *
|
||||||
ges_timeline_layer_get_objects (GESTimelineLayer * layer)
|
ges_timeline_layer_get_objects (GESTimelineLayer * layer)
|
||||||
{
|
{
|
||||||
GList *ret = NULL;
|
|
||||||
GList *tmp;
|
|
||||||
GESTimelineLayerClass *klass;
|
GESTimelineLayerClass *klass;
|
||||||
|
|
||||||
g_return_val_if_fail (GES_IS_TIMELINE_LAYER (layer), NULL);
|
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);
|
return klass->get_objects (layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (tmp = layer->priv->objects_start; tmp; tmp = tmp->next) {
|
return g_list_sort (g_list_copy_deep (layer->priv->objects_start,
|
||||||
ret = g_list_prepend (ret, tmp->data);
|
(GCopyFunc) gst_object_ref, NULL),
|
||||||
g_object_ref (tmp->data);
|
(GCompareFunc) timeline_object_start_compare);
|
||||||
}
|
|
||||||
|
|
||||||
ret = g_list_reverse (ret);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1010,7 +986,7 @@ ges_timeline_layer_add_object (GESTimelineLayer * layer,
|
||||||
|
|
||||||
/* Take a reference to the object and store it stored by start/priority */
|
/* Take a reference to the object and store it stored by start/priority */
|
||||||
priv->objects_start = g_list_insert_sorted (priv->objects_start, object,
|
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 */
|
/* Inform the object it's now in this layer */
|
||||||
ges_timeline_object_set_layer (object, layer);
|
ges_timeline_object_set_layer (object, layer);
|
||||||
|
|
|
@ -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
|
static inline void
|
||||||
sort_track_objects (GESTimeline * timeline, GESTrackObject * obj)
|
sort_track_objects (GESTimeline * timeline, GESTrackObject * obj)
|
||||||
{
|
{
|
||||||
TrackObjIters *iters = g_hash_table_lookup (timeline->priv->obj_iters, obj);
|
TrackObjIters *iters = g_hash_table_lookup (timeline->priv->obj_iters, obj);
|
||||||
|
|
||||||
g_sequence_sort_changed (iters->iter_obj,
|
g_sequence_sort_changed (iters->iter_obj,
|
||||||
(GCompareDataFunc) objects_start_compare, NULL);
|
(GCompareDataFunc) track_object_start_compare, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
|
@ -709,7 +692,7 @@ start_tracking_track_obj (GESTimeline * timeline, GESTrackObject * tckobj)
|
||||||
(GCompareDataFunc) compare_uint64, NULL);
|
(GCompareDataFunc) compare_uint64, NULL);
|
||||||
iters->iter_obj =
|
iters->iter_obj =
|
||||||
g_sequence_insert_sorted (priv->tracksources, g_object_ref (tckobj),
|
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_start, tckobj, pstart);
|
||||||
g_hash_table_insert (priv->by_object, pstart, tckobj);
|
g_hash_table_insert (priv->by_object, pstart, tckobj);
|
||||||
|
|
|
@ -92,27 +92,6 @@ static void composition_duration_cb (GstElement * composition, GParamSpec * arg
|
||||||
G_GNUC_UNUSED, GESTrack * obj);
|
G_GNUC_UNUSED, GESTrack * obj);
|
||||||
|
|
||||||
/* Private methods/functions/callbacks */
|
/* 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
|
static void
|
||||||
add_trackobj_to_list_foreach (GESTrackObject * trackobj, GList ** list)
|
add_trackobj_to_list_foreach (GESTrackObject * trackobj, GList ** list)
|
||||||
{
|
{
|
||||||
|
@ -248,7 +227,7 @@ static inline void
|
||||||
resort_and_fill_gaps (GESTrack * track)
|
resort_and_fill_gaps (GESTrack * track)
|
||||||
{
|
{
|
||||||
g_sequence_sort (track->priv->tckobjs_by_start,
|
g_sequence_sort (track->priv->tckobjs_by_start,
|
||||||
(GCompareDataFunc) objects_start_compare, NULL);
|
(GCompareDataFunc) track_object_start_compare, NULL);
|
||||||
|
|
||||||
if (track->priv->updating == TRUE) {
|
if (track->priv->updating == TRUE) {
|
||||||
update_gaps (track);
|
update_gaps (track);
|
||||||
|
@ -770,7 +749,7 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object)
|
||||||
g_object_ref_sink (object);
|
g_object_ref_sink (object);
|
||||||
g_hash_table_insert (track->priv->tckobjs_iter, object,
|
g_hash_table_insert (track->priv->tckobjs_iter, object,
|
||||||
g_sequence_insert_sorted (track->priv->tckobjs_by_start, 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,
|
g_signal_emit (track, ges_track_signals[TRACK_OBJECT_ADDED], 0,
|
||||||
GES_TRACK_OBJECT (object));
|
GES_TRACK_OBJECT (object));
|
||||||
|
|
|
@ -58,3 +58,46 @@ ges_timeline_new_audio_video (void)
|
||||||
|
|
||||||
return timeline;
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue