We were still updating them at useless moments, do it only when absolutely needed.
/* callbacks */
static void
-timeline_duration_changed_cb (GESTimeline * timeline,
- GParamSpec * arg, GESTrack * track)
-{
- GESTrackPrivate *priv = track->priv;
-
- /* Remove the last gap on the timeline if not needed anymore */
- if (priv->updating == TRUE) {
- resort_and_fill_gaps (track);
- }
-}
-
-static void
sort_track_elements_cb (GESTrackElement * child,
GParamSpec * arg G_GNUC_UNUSED, GESTrack * track)
{
- resort_and_fill_gaps (track);
+ g_sequence_sort (track->priv->trackelements_by_start,
+ (GCompareDataFunc) element_start_compare, NULL);
}
static void
{
GST_DEBUG ("track:%p, timeline:%p", track, timeline);
- if (track->priv->timeline)
- g_signal_handlers_disconnect_by_func (track->priv->timeline,
- timeline_duration_changed_cb, track);
-
- if (timeline)
- g_signal_connect (timeline, "notify::duration",
- G_CALLBACK (timeline_duration_changed_cb), track);
-
track->priv->timeline = timeline;
resort_and_fill_gaps (track);
}
g_signal_connect (GES_TRACK_ELEMENT (object), "notify::priority",
G_CALLBACK (sort_track_elements_cb), track);
- resort_and_fill_gaps (track);
-
return TRUE;
}
g_return_val_if_fail (GES_IS_TRACK (track), FALSE);
+ resort_and_fill_gaps (track);
g_signal_emit_by_name (track->priv->composition, "commit", TRUE, &ret);
return ret;
assert_equals_uint64 (_DURATION (clip1), 5);
ges_layer_add_clip (layer, GES_CLIP (clip1));
+ ges_timeline_commit (timeline);
assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip1)), 1);
trackelement1 = GES_CONTAINER_CHILDREN (clip1)->data;
fail_unless (trackelement1 != NULL);
}
}
fail_unless (gap != NULL);
- fail_unless (ges_timeline_commit (timeline));
gap_object_check (gap, 5, 10, 1);
clip2 = GES_CLIP (ges_test_clip_new ());
fail_unless (clip2 != NULL);
g_object_set (clip2, "start", (guint64) 35, "duration", (guint64) 5, NULL);
ges_layer_add_clip (layer, GES_CLIP (clip2));
+ fail_unless (ges_timeline_commit (timeline));
assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip2)), 1);
trackelement2 = GES_CONTAINER_CHILDREN (clip2)->data;
fail_unless (trackelement2 != NULL);
/* Set some properties */
asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
clip = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_VIDEO);
+ ges_timeline_commit (timeline);
assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip)), 1);
/* We should not have created any TrackElement in the audio track */
gap = GST_BIN_CHILDREN (composition)->data;
fail_unless (gap != NULL);
- fail_unless (ges_timeline_commit (timeline));
gap_object_check (gap, 0, 10, 1);
+ fail_unless (ges_timeline_commit (timeline));
gst_object_unref (timeline);
}
assert_equals_uint64 (_DURATION (src), 1000);
assert_equals_uint64 (_START (src1), 500);
assert_equals_uint64 (_DURATION (src1), 1500 - 500);
+ ges_timeline_commit (timeline);
GST_DEBUG ("Checking that a transition has been added");
objects = ges_layer_get_clips (layer);
GST_DEBUG
("Changig first source duration to 800 2 transitions should be created");
ges_timeline_element_set_duration (src, 800);
+ ges_timeline_commit (timeline);
/* 600__________________src_____________1400
* 500___________src1________1250
* 1250___________src2________2250
GST_DEBUG
("Set third clip start to 1100, 1 new transition should be created");
ges_timeline_element_set_start (src2, 1100);
+ ges_timeline_commit (timeline);
/* 600____src___1100
* 500___________src1________1250
* 1100___________src2________2100
GST_DEBUG ("Set third clip start to 1000, Transition should be updated");
ges_clip_edit (GES_CLIP (src2), NULL, -1,
GES_EDIT_MODE_NORMAL, GES_EDGE_START, 1000);
+ ges_timeline_commit (timeline);
/* 600____src___1100
* !_tr__^
* 500___________src1________1250
GST_DEBUG ("Adding clip from 500 -- 1000 to first layer");
src1 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 500,
0, 1000, GES_TRACK_TYPE_UNKNOWN));
+ ges_timeline_commit (timeline);
fail_unless (GES_IS_CLIP (src1));
/*
GST_DEBUG ("Moving src2 to 1200, check everything updates properly");
ges_timeline_element_set_start (src2, 1200);
+ ges_timeline_commit (timeline);
/*
* 0___________src_________1000
* 500______tr______1000