commit f07bb9d178b5509f52623c59ee8953c52d2fe85e
Author: Mathieu Duponchelle <[email protected]>
Date: Fri Aug 16 20:02:00 2013 +0200
integration: add an argument allowing to test specific effects.
You should change the names here so we have different XML files generated, and we get more info when we get the results on stdout
```diff
+ {"test-effects", 'e', 0, G_OPTION_ARG_STRING, &test_effects,
+ "Test all available effects", "N"},
Sound indeed like the thing to do :)
commit 923a04dba6831bb043454e807f2874d984da0fb1
Author: Mathieu Duponchelle <[email protected]>
Date: Fri Aug 16 20:00:30 2013 +0200
assets: add all effects assets at initialization.
diff --git a/ges/ges-asset.c b/ges/ges-asset.c
index 6be3e3f..82ed0a5 100644
--- a/ges/ges-asset.c
+++ b/ges/ges-asset.c
@@ -87,6 +87,8 @@
#include <gst/gst.h>
+#include <string.h>
+
enum
{
PROP_0,
@@ -558,6 +560,27 @@ ges_asset_cache_put (GESAsset * asset, GSimpleAsyncResult * res)
UNLOCK_CACHE;
}
+static void
+_init_effect_assets (void)
+{
+ GstRegistry *registry;
+ GList *features, *tmp;
+
+ registry = gst_registry_get ();
+ features = gst_registry_get_feature_list (registry, GST_TYPE_ELEMENT_FACTORY);
+ for (tmp = features; tmp; tmp = tmp->next) {
+ GstElementFactory *fact = tmp->data;
+ const gchar *klass;
+
+ klass = gst_element_factory_get_metadata (fact, "klass");
+ if (strstr (klass, "Effect")) {
+ GESAsset *asset = ges_asset_request (GES_TYPE_EFFECT,
+ gst_plugin_feature_get_name (fact), NULL);
+ gst_object_unref (asset);
+ }
+ }
+}
+
void
ges_asset_cache_init (void)
{
@@ -567,6 +590,7 @@ ges_asset_cache_init (void)
_init_formatter_assets ();
_init_standard_transition_assets ();
+ _init_effect_assets ();
}
Looks good, but I do not like the idea it takes so much time (you said ~1.6 sec iirc :/)
commit 410bcc6f96e1ef63e5bb7ba2f3716469f880d8f1
Author: Mathieu Duponchelle <[email protected]>
Date: Tue Aug 13 18:05:55 2013 +0200
trackelement: split bindings correctly.
diff --git a/ges/ges-clip.c b/ges/ges-clip.c
index 602cd38..801cb83 100644
--- a/ges/ges-clip.c
+++ b/ges/ges-clip.c
@@ -1206,7 +1206,6 @@ ges_clip_split (GESClip * clip, guint64 position)
{
GList *tmp;
GESClip *new_object;
-
GstClockTime start, inpoint, duration;
g_return_val_if_fail (GES_IS_CLIP (clip), NULL);
@@ -1243,7 +1242,6 @@ ges_clip_split (GESClip * clip, guint64 position)
ges_layer_add_clip (clip->priv->layer, new_object);
ges_clip_set_moving_from_layer (new_object, FALSE);
- _set_duration0 (GES_TIMELINE_ELEMENT (clip), position - _START (clip));
for (tmp = GES_CONTAINER_CHILDREN (clip); tmp; tmp = tmp->next) {
GESTrackElement *new_trackelement, *trackelement =
GES_TRACK_ELEMENT (tmp->data);
@@ -1267,8 +1265,12 @@ ges_clip_split (GESClip * clip, guint64 position)
GES_TIMELINE_ELEMENT (new_trackelement));
ges_track_element_copy_properties (GES_TIMELINE_ELEMENT (trackelement),
GES_TIMELINE_ELEMENT (new_trackelement));
+
+ ges_track_element_split_bindings (trackelement, new_trackelement, position);
}
+ _set_duration0 (GES_TIMELINE_ELEMENT (clip), position - _START (clip));
+
return new_object;
}
diff --git a/ges/ges-internal.h b/ges/ges-internal.h
index 9ce44f0..61a73a9 100644
--- a/ges/ges-internal.h
+++ b/ges/ges-internal.h
@@ -285,4 +285,7 @@ G_GNUC_INTERNAL guint32 _ges_track_element_get_layer_priority (GESTrackElement
G_GNUC_INTERNAL void ges_track_element_copy_properties (GESTimelineElement * element,
GESTimelineElement * elementcopy);
+G_GNUC_INTERNAL void ges_track_element_split_bindings(GESTrackElement *element,
missing a space before '('
+ GESTrackElement *new_element,
+ guint64 position);
#endif /* __GES_INTERNAL_H__ */
diff --git a/ges/ges-track-element.c b/ges/ges-track-element.c
index 8e81475..8260aa1 100644
--- a/ges/ges-track-element.c
+++ b/ges/ges-track-element.c
@@ -1392,6 +1392,73 @@ ges_track_element_copy_properties (GESTimelineElement * element,
g_free (specs);
}
+void
+ges_track_element_split_bindings (GESTrackElement * element,
+ GESTrackElement * new_element, guint64 position)
+{
+ GParamSpec **specs;
+ guint n, n_specs;
+ GstControlBinding *binding;
+ GstTimedValueControlSource *source, *new_source;
+
+ specs =
+ ges_track_element_list_children_properties (GES_TRACK_ELEMENT (element),
+ &n_specs);
+ for (n = 0; n < n_specs; ++n) {
+ GList *values, *tmp;
+ GstTimedValue *last_value = NULL;
+ gboolean past_position = FALSE;
+ GstInterpolationMode mode;
+
+ binding = ges_track_element_get_control_binding (element, specs[n]->name);
+ if (!binding)
+ continue;
+
+ g_object_get (binding, "control_source", &source, NULL);
+
+ if (!GST_IS_TIMED_VALUE_CONTROL_SOURCE (source))
+ continue;
What should actyally be done here? :) Add a FIXME please
commit 8276bb95ecef20d3b101b7c8affa80eccf44eb72
Author: Mathieu Duponchelle <[email protected]>
Date: Tue Aug 13 17:57:33 2013 +0200
trackelement: update control bindings correctly.
Please be more verbose here. I can't really understand why you need to do that.
commit 650069f17dc6e5c1b386b67d4ceea8e1ceb5e4cd
Author: Mathieu Duponchelle <[email protected]>
Date: Mon Aug 12 21:25:31 2013 +0200
container: resort children after prepending an element.
diff --git a/ges/ges-container.c b/ges/ges-container.c
index b9cdb69..ecf6a78 100644
--- a/ges/ges-container.c
+++ b/ges/ges-container.c
@@ -495,6 +495,8 @@ ges_container_add (GESContainer * container, GESTimelineElement * child)
container->children = g_list_prepend (container->children, child);
+ _ges_container_sort_children (container);
+
/* Listen to all property changes */
mapping->start_notifyid =
g_signal_connect (G_OBJECT (child), "notify::start",
OK
commit d941885ce921c3560e5c4f45408924bc351b9e33
Author: Mathieu Duponchelle <[email protected]>
Date: Mon Aug 12 16:13:40 2013 +0200
timeline: when there are no objects anymore, set duration to 0.
diff --git a/ges/ges-timeline.c b/ges/ges-timeline.c
index b8839d4..c528775 100644
--- a/ges/ges-timeline.c
+++ b/ges/ges-timeline.c
@@ -602,10 +602,15 @@ timeline_update_duration (GESTimeline * timeline)
GSequenceIter *it = g_sequence_get_end_iter (timeline->priv->starts_ends);
it = g_sequence_iter_prev (it);
- if (g_sequence_iter_is_end (it))
+
+ if (g_sequence_iter_is_end (it)) {
+ timeline->priv->duration = 0;
+ g_object_notify_by_pspec (G_OBJECT (timeline), properties[PROP_DURATION]);
return;
+ }
cduration = g_sequence_get (it);
+
if (cduration && timeline->priv->duration != *cduration) {
GST_DEBUG ("track duration : %" GST_TIME_FORMAT " current : %"
GST_TIME_FORMAT, GST_TIME_ARGS (*cduration),
OK
commit 0030444aef1bdd4dde39fd75b18e40c7bab3f0d2
Author: Mathieu Duponchelle <[email protected]>
Date: Mon Aug 12 15:01:53 2013 +0200
ges-audio-track: Actually return an AudioTrack.
We were returning an audio track, just wrongly casted to VideoTrack
diff --git a/ges/ges-audio-track.c b/ges/ges-audio-track.c
index c63d6df..87a60ab 100644
--- a/ges/ges-audio-track.c
+++ b/ges/ges-audio-track.c
@@ -93,10 +93,10 @@ ges_audio_track_class_init (GESAudioTrackClass * klass)
*
* Returns: A new #GESTrack
*/
-GESVideoTrack *
+GESAudioTrack *
ges_audio_track_new (void)
{
- GESVideoTrack *ret;
+ GESAudioTrack *ret;
GstCaps *caps = gst_caps_from_string (DEFAULT_CAPS);
ret = g_object_new (GES_TYPE_AUDIO_TRACK, "caps", caps,
diff --git a/ges/ges-audio-track.h b/ges/ges-audio-track.h
index 3b920de..ab9afb4 100644
--- a/ges/ges-audio-track.h
+++ b/ges/ges-audio-track.h
@@ -55,7 +55,7 @@ struct _GESAudioTrack
};
GType ges_audio_track_get_type (void) G_GNUC_CONST;
-GESVideoTrack* ges_audio_track_new (void);
+GESAudioTrack* ges_audio_track_new (void);
OOps, funny we did not see it before
G_END_DECLS
#endif /* _GES_AUDIO_TRACK_H_ */
commit 4b3e9ba7bc164682d51cc7c3b59edab5f3105d72
Author: Mathieu Duponchelle <[email protected]>
Date: Sun Aug 11 20:06:49 2013 +0200
pipeline: add a get_mode method.
diff --git a/ges/ges-pipeline.c b/ges/ges-pipeline.c
index 08aa752..9000264 100644
--- a/ges/ges-pipeline.c
+++ b/ges/ges-pipeline.c
@@ -131,8 +131,8 @@ _overlay_set_render_rectangle (GstVideoOverlay * overlay, gint x,
{
GESPipeline *pipeline = GES_TIMELINE_PIPELINE (overlay);
- gst_video_overlay_set_render_rectangle (GST_VIDEO_OVERLAY (pipeline->
- priv->playsink), x, y, width, height);
+ gst_video_overlay_set_render_rectangle (GST_VIDEO_OVERLAY (pipeline->priv->
+ playsink), x, y, width, height);
}
static void
@@ -140,8 +140,8 @@ _overlay_set_window_handle (GstVideoOverlay * overlay, guintptr handle)
{
GESPipeline *pipeline = GES_TIMELINE_PIPELINE (overlay);
- gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (pipeline->priv->
- playsink), handle);
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (pipeline->
+ priv->playsink), handle);
}
static void
@@ -448,8 +448,8 @@ ges_pipeline_change_state (GstElement * element, GstStateChange transition)
ret = GST_STATE_CHANGE_FAILURE;
goto done;
}
- if (self->
- priv->mode & (TIMELINE_MODE_RENDER | TIMELINE_MODE_SMART_RENDER))
+ if (self->priv->
+ mode & (TIMELINE_MODE_RENDER | TIMELINE_MODE_SMART_RENDER))
GST_DEBUG ("rendering => Updating pipeline caps");
if (!ges_pipeline_update_caps (self)) {
GST_ERROR_OBJECT (element, "Error setting the caps for rendering");
@@ -922,6 +922,18 @@ ges_pipeline_set_render_settings (GESPipeline * pipeline,
}
/**
+ * ges_pipeline_get_mode:
+ * @pipeline: a #GESPipeline
+ *
+ * Returns: the #GESPipelineFlags currently in use.
+ **/
+GESPipelineFlags
+ges_pipeline_get_mode (GESPipeline * pipeline)
+{
+ return pipeline->priv->mode;
+}
+
+/**
* ges_pipeline_set_mode:
* @pipeline: a #GESPipeline
* @mode: the #GESPipelineFlags to use
diff --git a/ges/ges-pipeline.h b/ges/ges-pipeline.h
index 49a68c6..2f3cca5 100644
--- a/ges/ges-pipeline.h
+++ b/ges/ges-pipeline.h
@@ -88,6 +88,8 @@ gboolean ges_pipeline_set_render_settings (GESPipeline *pipeline,
gboolean ges_pipeline_set_mode (GESPipeline *pipeline,
GESPipelineFlags mode);
+GESPipelineFlags ges_pipeline_get_mode (GESPipeline *pipeline);
+
GstSample *
ges_pipeline_get_thumbnail(GESPipeline *self, GstCaps *caps);
Please add to docs/libs/*section.txt
commit f1b1f97f9de7c5bea8288df95c0ee9e351757906
Author: Mathieu Duponchelle <[email protected]>
Date: Sun Aug 11 18:59:26 2013 +0200
integration: add manipulation tests.
We should not merge that until tests pass, please provide a branch without it
diff --git a/tests/check/ges/integration.c b/tests/check/ges/integration.c
index 1eb33a7..a57fa7e 100644
--- a/tests/check/ges/integration.c
+++ b/tests/check/ges/integration.c
@@ -811,6 +811,57 @@ test_mixing (void)
}
+static void
+test_adding (void)
+{
+ GESTimeline *timeline;
+ GESLayer *layer;
+ GESUriClipAsset *asset1;
+ GESUriClipAsset *asset2;
+ GESPipeline *pipeline;
+ GESClip *clip;
+
+ timeline = ges_timeline_new_audio_video ();
+
+ get_asset (testfilename1, asset1);
+ get_asset (testfilename2, asset2);
+ layer = ges_layer_new ();
+ fail_unless (ges_timeline_add_layer (timeline, layer));
+
+ ges_layer_add_asset (layer, GES_ASSET (asset1), 2 * GST_SECOND,
+ 0 * GST_SECOND, 1 * GST_SECOND, GES_TRACK_TYPE_UNKNOWN);
+ gst_object_unref (asset1);
+
+ ges_timeline_commit (timeline);
+
+ pipeline = ges_pipeline_new ();
+ ges_pipeline_add_timeline (pipeline, timeline);
+
+ gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED);
+ gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, -1);
+
+ gst_element_seek_simple (GST_ELEMENT (pipeline),
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, 0.5 * GST_SECOND);
+
+ clip = ges_layer_add_asset (layer, GES_ASSET (asset2), 0 * GST_SECOND,
+ 0 * GST_SECOND, 1 * GST_SECOND, GES_TRACK_TYPE_UNKNOWN);
+
+ ges_timeline_commit (timeline);
+ gst_element_seek_simple (GST_ELEMENT (pipeline),
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, 0.5 * GST_SECOND);
+
+ ges_layer_remove_clip (layer, clip);
+
+ ges_timeline_commit (timeline);
+
+ gst_element_seek_simple (GST_ELEMENT (pipeline),
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, 0.5 * GST_SECOND);
+
+ gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
+}
#define CREATE_TEST(name, func, profile) \
GST_START_TEST (test_##name##_raw_h264_mov) \
@@ -866,10 +917,27 @@ GST_END_TEST;
#define CREATE_PLAYBACK_TEST(name) \
CREATE_TEST_FROM_NAMES(name, _playback, PROFILE_NONE)
+#define CREATE_MANIPULATION_TEST(name) \
+ CREATE_TEST_FROM_NAMES(name, _manipulation, PROFILE_NONE)
+
#define CREATE_TEST_FULL(name) \
CREATE_PLAYBACK_TEST(name) \
CREATE_RENDERING_TEST(name, func)
+#define ADD_MANIPULATION_TESTS(name) \
+ tcase_add_test (tc_chain, test_##name##_manipulation_vorbis_vp8_webm); \
+ tcase_add_test (tc_chain, test_##name##_manipulation_vorbis_theora_ogv); \
+ tcase_add_test (tc_chain, test_##name##_manipulation_raw_h264_mov); \
+ tcase_add_test (tc_chain, test_##name##_manipulation_mp3_h264_mov); \
+ tests_names = g_list_prepend (tests_names, g_strdup_printf ("%s%s%s", "test_", #name, \
+ "_manipulation_mp3_h264_mov")); \
+ tests_names = g_list_prepend (tests_names, g_strdup_printf ("%s%s%s", "test_", #name, \
+ "_manipulation_raw_h264_mov")); \
+ tests_names = g_list_prepend (tests_names, g_strdup_printf ("%s%s%s", "test_", #name, \
+ "_manipulation_vorbis_theora_ogv")); \
+ tests_names = g_list_prepend (tests_names, g_strdup_printf ("%s%s%s", "test_", #name, \
+ "_manipulation_vorbis_vp8_webm"));
+
#define ADD_PLAYBACK_TESTS(name) \
tcase_add_test (tc_chain, test_##name##_playback_vorbis_vp8_webm); \
tcase_add_test (tc_chain, test_##name##_playback_vorbis_theora_ogv); \
@@ -957,6 +1025,8 @@ CREATE_PLAYBACK_TEST(seeking_paused_noplay)
CREATE_PLAYBACK_TEST(seeking_paused_audio_noplay)
CREATE_PLAYBACK_TEST(seeking_paused_video_noplay)
CREATE_PLAYBACK_TEST(image)
+
+CREATE_MANIPULATION_TEST(adding)
/* *INDENT-ON* */
static Suite *
@@ -990,6 +1060,8 @@ ges_suite (void)
ADD_PLAYBACK_TESTS (seeking_paused_audio_noplay);
ADD_PLAYBACK_TESTS (seeking_paused_video_noplay);
+ ADD_MANIPULATION_TESTS (adding);
+
/* TODO : next test case : complex timeline created from project. */
/* TODO : deep checking of rendered clips */
/* TODO : might be interesting to try all profiles, and maintain a list of currently working profiles ? */
commit 417fb5e355c48ba4e471dc14f4b47ea4c640a04a
Author: Mathieu Duponchelle <[email protected]>
Date: Sun Aug 11 18:57:46 2013 +0200
integration: NULL terminate options.
Didn't I merge that??
diff --git a/tests/check/ges/integration.c b/tests/check/ges/integration.c
index e5f888e..1eb33a7 100644
--- a/tests/check/ges/integration.c
+++ b/tests/check/ges/integration.c
@@ -1041,7 +1041,8 @@ main (int argc, char **argv)
GOptionEntry options[] = {
{"list-tests", 'l', 0.0, G_OPTION_ARG_NONE, &list_tests,
- "List all avalaible tests", "N"}
+ "List all avalaible tests", "N"},
+ {NULL}
};
ctx = g_option_context_new ("Run integration tests");
commit 2ae74b426d0ccacc9b38bab723f0ba5ee3e8bdf3
Author: Mathieu Duponchelle <[email protected]>
Date: Wed Aug 7 19:37:49 2013 +0200
basexmlformatter: Only set timeline auto transitions when done loading.
diff --git a/ges/ges-base-xml-formatter.c b/ges/ges-base-xml-formatter.c
index 2e854c1..2ab382f 100644
--- a/ges/ges-base-xml-formatter.c
+++ b/ges/ges-base-xml-formatter.c
@@ -111,6 +111,8 @@ struct _GESBaseXmlFormatterPrivate
GESClip *current_clip;
PendingClip *current_pending_clip;
+
+ gboolean timeline_auto_transition;
};
static void
@@ -221,6 +223,8 @@ _load_from_uri (GESFormatter * self, GESTimeline * timeline, const gchar * uri,
{
GESBaseXmlFormatterPrivate *priv = _GET_PRIV (self);
+ ges_timeline_set_auto_transition (timeline, FALSE);
+
priv->parsecontext =
create_parser_context (GES_BASE_XML_FORMATTER (self), uri, error);
@@ -356,6 +360,7 @@ ges_base_xml_formatter_init (GESBaseXmlFormatter * self)
priv->current_track_element = NULL;
priv->current_clip = NULL;
priv->current_pending_clip = NULL;
+ priv->timeline_auto_transition = FALSE;
}
static void
@@ -406,8 +411,12 @@ _loading_done (GESFormatter * self)
g_markup_parse_context_free (priv->parsecontext);
priv->parsecontext = NULL;
+ ges_timeline_set_auto_transition (self->timeline,
+ priv->timeline_auto_transition);
+
g_hash_table_foreach (priv->layers, (GHFunc) _set_auto_transition, NULL);
ges_project_set_loaded (self->project, self);
+ GST_ERROR ("loading done");
}
static void
@@ -808,6 +817,35 @@ ges_base_xml_formatter_add_clip (GESBaseXmlFormatter * self,
}
void
+ges_base_xml_formatter_set_timeline_properties (GESBaseXmlFormatter * self,
+ GESTimeline * timeline, const gchar * properties, const gchar * metadatas)
+{
+ GESBaseXmlFormatterPrivate *priv = _GET_PRIV (self);
+ gboolean auto_transition = FALSE;
+
+ if (properties) {
+ GstStructure *props = gst_structure_from_string (properties, NULL);
+
+ if (props) {
+ if (gst_structure_get_boolean (props, "auto-transition",
+ &auto_transition))
+ gst_structure_remove_field (props, "auto-transition");
+
+ gst_structure_foreach (props,
+ (GstStructureForeachFunc) set_property_foreach, timeline);
+ gst_structure_free (props);
+ }
+ }
+
+ if (metadatas) {
+ ges_meta_container_add_metas_from_string (GES_META_CONTAINER (timeline),
+ metadatas);
+ };
+
+ priv->timeline_auto_transition = auto_transition;
+}
+
+void
ges_base_xml_formatter_add_layer (GESBaseXmlFormatter * self,
GType extractable_type, guint priority, GstStructure * properties,
const gchar * metadatas, GError ** error)
diff --git a/ges/ges-internal.h b/ges/ges-internal.h
index c4aea8f..9ce44f0 100644
--- a/ges/ges-internal.h
+++ b/ges/ges-internal.h
@@ -253,6 +253,12 @@ G_GNUC_INTERNAL gint element_start_compare (GESTimelineElement *
G_GNUC_INTERNAL gint element_end_compare (GESTimelineElement * a,
GESTimelineElement * b);
+void
+ges_base_xml_formatter_set_timeline_properties(GESBaseXmlFormatter * self,
+ GESTimeline *timeline,
+ const gchar *properties,
+ const gchar *metadatas);
+
/****************************************************
* GESContainer *
****************************************************/
diff --git a/ges/ges-xml-formatter.c b/ges/ges-xml-formatter.c
index 63b3bc4..d76abed 100644
--- a/ges/ges-xml-formatter.c
+++ b/ges/ges-xml-formatter.c
@@ -244,19 +244,8 @@ _parse_timeline (GMarkupParseContext * context, const gchar * element_name,
if (timeline == NULL)
return;
- if (properties) {
- GstStructure *props = gst_structure_from_string (properties, NULL);
-
- if (props) {
- gst_structure_foreach (props,
- (GstStructureForeachFunc) set_property_foreach, timeline);
- gst_structure_free (props);
- }
- }
- if (metadatas) {
- ges_meta_container_add_metas_from_string (GES_META_CONTAINER (timeline),
- metadatas);
- };
+ ges_base_xml_formatter_set_timeline_properties (GES_BASE_XML_FORMATTER (self),
+ timeline, properties, metadatas);
}
static inline void
+1
commit dd8cb5c4637b87376d3458bf0e02bf4ec28b84cd
Author: Mathieu Duponchelle <[email protected]>
Date: Wed Aug 7 16:12:27 2013 +0200
integration: make test_basic be two concatenated clips.
diff --git a/tests/check/ges/integration.c b/tests/check/ges/integration.c
index 3fb7344..e5f888e 100644
--- a/tests/check/ges/integration.c
+++ b/tests/check/ges/integration.c
@@ -627,8 +627,10 @@ run_basic (GESTimeline * timeline)
{
GESLayer *layer;
GESUriClipAsset *asset1;
+ GESUriClipAsset *asset2;
get_asset (testfilename1, asset1);
+ get_asset (testfilename2, asset2);
layer = ges_layer_new ();
fail_unless (ges_timeline_add_layer (timeline, layer));
@@ -637,12 +639,16 @@ run_basic (GESTimeline * timeline)
gst_object_unref (asset1);
/* Test most simple case */
+ ges_layer_add_asset (layer, GES_ASSET (asset2), 1 * GST_SECOND,
+ 0 * GST_SECOND, 1 * GST_SECOND, GES_TRACK_TYPE_UNKNOWN);
+ gst_object_unref (asset2);
+
/**
* Our timeline
*
- * inpoints 0--------0
- * | clip |
- * time 0--------1
+ * inpoints 0--------0 0--------0
+ * | clip | | clip2 |
+ * time 0------- 1 1--------2
*/
fail_unless (check_timeline (timeline));
+1