ges-launch: Let user set the track types to use

This commit is contained in:
Thibault Saunier 2013-11-14 16:17:31 -03:00
parent 7a1a044354
commit e5d28fa86e

View file

@ -38,6 +38,7 @@ static gboolean seenerrors = FALSE;
static gchar **new_paths = NULL; static gchar **new_paths = NULL;
static GMainLoop *mainloop; static GMainLoop *mainloop;
static GHashTable *tried_uris; static GHashTable *tried_uris;
static GESTrackType track_types = GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO;
static gchar * static gchar *
ensure_uri (gchar * location) ensure_uri (gchar * location)
@ -48,6 +49,35 @@ ensure_uri (gchar * location)
return gst_filename_to_uri (location, NULL); return gst_filename_to_uri (location, NULL);
} }
static guint
get_flags_from_string (GType type, const gchar * str_flags)
{
guint i;
gint flags = 0;
GFlagsClass *class = g_type_class_ref (type);
for (i = 0; i < class->n_values; i++) {
if (g_strrstr (str_flags, class->values[i].value_nick)) {
flags |= class->values[i].value;
}
}
g_type_class_unref (class);
return flags;
}
static gboolean
parse_track_type (const gchar * option_name, const gchar * value,
gpointer udata, GError ** error)
{
track_types = get_flags_from_string (GES_TYPE_TRACK_TYPE, value);
if (track_types == 0)
return FALSE;
return TRUE;
}
static gboolean static gboolean
thumbnail_cb (gpointer pipeline) thumbnail_cb (gpointer pipeline)
{ {
@ -147,18 +177,26 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri)
if (proj_uri) if (proj_uri)
return timeline; return timeline;
tracka = GES_TRACK (ges_audio_track_new ());
trackv = GES_TRACK (ges_video_track_new ());
/* We are only going to be doing one layer of clips */ /* We are only going to be doing one layer of clips */
layer = (GESLayer *) ges_simple_layer_new (); layer = (GESLayer *) ges_simple_layer_new ();
/* Add the tracks and the layer to the timeline */ /* Add the tracks and the layer to the timeline */
if (!ges_timeline_add_layer (timeline, layer) || if (!ges_timeline_add_layer (timeline, layer))
!(ges_timeline_add_track (timeline, tracka)) ||
!(ges_timeline_add_track (timeline, trackv)))
goto build_failure; goto build_failure;
if (track_types & GES_TRACK_TYPE_AUDIO) {
tracka = GES_TRACK (ges_audio_track_new ());
if (!(ges_timeline_add_track (timeline, tracka)))
goto build_failure;
}
if (track_types & GES_TRACK_TYPE_VIDEO) {
trackv = GES_TRACK (ges_video_track_new ());
if (!(ges_timeline_add_track (timeline, trackv)))
goto build_failure;
}
/* Here we've finished initializing our timeline, we're /* Here we've finished initializing our timeline, we're
* ready to start using it... by solely working with the layer !*/ * ready to start using it... by solely working with the layer !*/
@ -603,6 +641,8 @@ main (int argc, gchar ** argv)
"Do not output status information of TYPE", "TYPE1,TYPE2,..."}, "Do not output status information of TYPE", "TYPE1,TYPE2,..."},
{"sample-paths", 'P', 0, G_OPTION_ARG_STRING_ARRAY, &new_paths, {"sample-paths", 'P', 0, G_OPTION_ARG_STRING_ARRAY, &new_paths,
"List of pathes to look assets in if they were moved"}, "List of pathes to look assets in if they were moved"},
{"track-types", 'P', 0, G_OPTION_ARG_CALLBACK, &parse_track_type,
"Defines the track types to be created"},
{NULL} {NULL}
}; };
GOptionContext *ctx; GOptionContext *ctx;