From: Thibault Saunier Date: Wed, 3 Jul 2019 16:10:24 +0000 (-0400) Subject: gesdemux: Detect recursively loading the same project file X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=902b8ad98e8e6464531483985ebdda7e4aaec9e0;p=platform%2Fupstream%2Fgst-editing-services.git gesdemux: Detect recursively loading the same project file And error out when it is the case. --- diff --git a/plugins/ges/gesdemux.c b/plugins/ges/gesdemux.c index e14e789..6017978 100644 --- a/plugins/ges/gesdemux.c +++ b/plugins/ges/gesdemux.c @@ -210,6 +210,7 @@ ges_demux_create_timeline (GESDemux * self, gchar * uri, GError ** error) G_GNUC_UNUSED void *unused; TimelineConstructionData data = { 0, }; GMainContext *ctx = g_main_context_new (); + GstQuery *query; g_main_context_push_thread_default (ctx); data.ml = g_main_loop_new (ctx, TRUE); @@ -231,6 +232,26 @@ ges_demux_create_timeline (GESDemux * self, gchar * uri, GError ** error) g_main_loop_run (data.ml); g_main_loop_unref (data.ml); + query = gst_query_new_uri (); + if (gst_pad_peer_query (self->sinkpad, query)) { + gchar *upstream_uri = NULL; + GList *assets, *tmp; + gst_query_parse_uri (query, &upstream_uri); + + assets = ges_project_list_assets (project, GES_TYPE_URI_CLIP); + for (tmp = assets; tmp; tmp = tmp->next) { + const gchar *id = ges_asset_get_id (tmp->data); + + if (!g_strcmp0 (id, upstream_uri)) { + g_set_error (error, GST_STREAM_ERROR, GST_STREAM_ERROR_DEMUX, + "Recursively loading uri: %s", upstream_uri); + break; + } + } + + g_list_free_full (assets, g_object_unref); + } + done: if (data.loaded_sigid) g_signal_handler_disconnect (project, data.loaded_sigid);