diff options
author | Thibault Saunier <tsaunier@gnome.org> | 2014-06-06 12:08:47 +0200 |
---|---|---|
committer | Thibault Saunier <tsaunier@gnome.org> | 2014-06-09 16:10:41 +0200 |
commit | a3e87f262b87bfdb37ce6ef57d6e6680cd789646 (patch) | |
tree | 91827b35b4126e3ff14a0601ba17d83959229fb3 | |
parent | 03c87dbbc7d3034dddc39364dd345daa31ff7229 (diff) |
tools: Fix transition handling in ges-launch
https://bugzilla.gnome.org/show_bug.cgi?id=730806
-rw-r--r-- | tools/ges-launch.c | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/tools/ges-launch.c b/tools/ges-launch.c index a6a5eed7..cdc8afdb 100644 --- a/tools/ges-launch.c +++ b/tools/ges-launch.c @@ -251,6 +251,13 @@ str_to_time (char *time) return nsecs * GST_SECOND; } +static void +_clip_added_cb (GESLayer * layer, GESClip * clip, GESAsset * asset) +{ + if (GES_IS_TRANSITION_CLIP (clip)) + ges_extractable_set_asset (GES_EXTRACTABLE (clip), asset); +} + static GESTimeline * create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri, const gchar * scenario) @@ -259,7 +266,8 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri, GESTrack *tracka = NULL, *trackv = NULL; GESTimeline *timeline; gboolean activate_before_paused = TRUE; - guint i; + guint i, clip_added_sigid = 0; + GstClockTime next_trans_dur = 0; GESProject *project = ges_project_new (proj_uri); if (new_paths->len) @@ -280,6 +288,7 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri, goto activate_validate; } + g_object_set (timeline, "auto-transition", TRUE, NULL); if (track_types & GES_TRACK_TYPE_AUDIO) { tracka = GES_TRACK (ges_audio_track_new ()); if (disable_mixing) @@ -336,21 +345,19 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri, } else if (!g_strcmp0 ("+transition", source)) { - clip = GES_CLIP (ges_transition_clip_new_for_nick (arg0)); + GESAsset *asset = + ges_asset_request (GES_TYPE_TRANSITION_CLIP, arg0, NULL); - if (!clip) { - g_error ("invalid transition type\n"); - goto build_failure; + if (asset == NULL) { + g_warning ("Can not create transition %s", arg0); } - g_object_set (G_OBJECT (clip), "duration", duration, NULL); - - g_printf ("Adding <transition:%s> duration %" GST_TIME_FORMAT "\n", arg0, - GST_TIME_ARGS (duration)); - - } + next_trans_dur = duration; + clip_added_sigid = g_signal_connect (layer, "clip-added", + (GCallback) _clip_added_cb, asset); - else if (!g_strcmp0 ("+title", source)) { + continue; + } else if (!g_strcmp0 ("+title", source)) { clip = GES_CLIP (ges_title_clip_new ()); g_object_set (clip, "duration", duration, "text", arg0, NULL); @@ -401,9 +408,17 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri, g_free (uri); } - g_object_set (G_OBJECT (clip), "start", ges_layer_get_duration (layer), - NULL); + g_object_set (G_OBJECT (clip), "start", + ges_layer_get_duration (layer) - next_trans_dur, NULL); + ges_layer_add_clip (layer, clip); + + if (clip_added_sigid) { + g_signal_handler_disconnect (layer, clip_added_sigid); + clip_added_sigid = 0; + next_trans_dur = 0; + } + } activate_validate: |