static void asset_loaded_cb (GObject * source_object, GAsyncResult * res, GMainLoop * mainloop) { GError *error = NULL; GESUriClipAsset *mfs = GES_URI_CLIP_ASSET (ges_asset_request_finish (res, &error)); if (error) { GST_WARNING ("error creating asseti %s", error->message); return; } assetsLoaded++; /* * Check if we have loaded last asset and trigger concatenating */ if (assetsLoaded == assetsCount) { GstDiscovererInfo *info = ges_uri_clip_asset_get_info (mfs); GstEncodingProfile *profile = make_profile_from_info (info); ges_pipeline_set_render_settings (pipeline, output_uri, profile); /* We want the pipeline to render (without any preview) */ if (!ges_pipeline_set_mode (pipeline, TIMELINE_MODE_SMART_RENDER)) { g_main_loop_quit (mainloop); return; } gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); } gst_object_unref (mfs); }
static void new_asset_cb (GESAsset * source, GAsyncResult * res, GESProject * project) { GError *error = NULL; gchar *possible_id = NULL; GESAsset *asset = ges_asset_request_finish (res, &error); if (error) { possible_id = ges_project_try_updating_id (project, source, error); if (possible_id == NULL) return; ges_project_create_asset (project, possible_id, ges_asset_get_extractable_type (source)); g_free (possible_id); g_error_free (error); return; } ges_project_add_asset (project, asset); if (asset) gst_object_unref (asset); }
static void new_asset_cb (GESAsset * source, GAsyncResult * res, GESProject * project) { GError *error = NULL; gchar *possible_id = NULL; const gchar *id = ges_asset_get_id (source); GESAsset *asset = ges_asset_request_finish (res, &error); if (error) { possible_id = ges_project_try_updating_id (project, source, error); if (possible_id == NULL) { g_hash_table_remove (project->priv->loading_assets, id); g_hash_table_add (project->priv->loaded_with_error, g_strdup (id)); g_signal_emit (project, _signals[ERROR_LOADING_ASSET], 0, error, id, ges_asset_get_extractable_type (source)); return; } ges_project_create_asset (project, possible_id, ges_asset_get_extractable_type (source)); g_free (possible_id); g_error_free (error); return; } ges_project_add_asset (project, asset); if (asset) gst_object_unref (asset); }
static void source_asset_created (GObject * source, GAsyncResult * res, gpointer udata) { GError *error = NULL; GESAsset *a = ges_asset_request_finish (res, &error); fail_unless (a == NULL); assert_equals_int (error->domain, GST_RESOURCE_ERROR); g_main_loop_quit (mainloop); }
static void asset_loaded_cb (GObject * source, GAsyncResult * res, GMainLoop * mainloop) { GESUriClipAsset *mfs = GES_URI_CLIP_ASSET (ges_asset_request_finish (res, NULL)); GstDiscovererInfo *discoverer_info = NULL; discoverer_info = ges_uri_clip_asset_get_info (mfs); GST_DEBUG ("Result is %d", gst_discoverer_info_get_result (discoverer_info)); GST_DEBUG ("Info type is %s", G_OBJECT_TYPE_NAME (mfs)); GST_DEBUG ("Duration is %" GST_TIME_FORMAT, GST_TIME_ARGS (ges_uri_clip_asset_get_duration (mfs))); gst_object_unref (mfs); g_main_loop_quit (mainloop); }
static void asset_created_cb (GObject * source, GAsyncResult * res, gpointer udata) { GList *tracks, *tmp; GESAsset *asset; GESLayer *layer; GESUriClip *tlfs; GError *error = NULL; asset = ges_asset_request_finish (res, &error); ASSERT_OBJECT_REFCOUNT (asset, "1 for us + for the cache + 1 taken " "by g_simple_async_result_complete_in_idle", 3); fail_unless (error == NULL); fail_if (asset == NULL); fail_if (g_strcmp0 (ges_asset_get_id (asset), av_uri)); layer = GES_LAYER (g_async_result_get_user_data (res)); tlfs = GES_URI_CLIP (ges_layer_add_asset (layer, asset, 0, 0, GST_CLOCK_TIME_NONE, GES_TRACK_TYPE_UNKNOWN)); fail_unless (GES_IS_URI_CLIP (tlfs)); fail_if (g_strcmp0 (ges_uri_clip_get_uri (tlfs), av_uri)); assert_equals_uint64 (_DURATION (tlfs), GST_SECOND); fail_unless (ges_clip_get_supported_formats (GES_CLIP (tlfs)) & GES_TRACK_TYPE_VIDEO); fail_unless (ges_clip_get_supported_formats (GES_CLIP (tlfs)) & GES_TRACK_TYPE_AUDIO); tracks = ges_timeline_get_tracks (ges_layer_get_timeline (layer)); for (tmp = tracks; tmp; tmp = tmp->next) { GList *trackelements = ges_track_get_elements (GES_TRACK (tmp->data)); assert_equals_int (g_list_length (trackelements), 1); fail_unless (GES_IS_VIDEO_URI_SOURCE (trackelements->data) || GES_IS_AUDIO_URI_SOURCE (trackelements->data)); g_list_free_full (trackelements, gst_object_unref); } g_list_free_full (tracks, gst_object_unref); gst_object_unref (asset); g_main_loop_quit (mainloop); }
static void new_asset_cb (GESAsset * source, GAsyncResult * res, NewAssetUData * udata) { GError *error = NULL; GESAsset *asset = ges_asset_request_finish (res, &error); GST_DEBUG_OBJECT (udata->layer, "%" GST_PTR_FORMAT " Asset loaded, " "setting its asset", udata->clip); if (error) { GESProject *project = udata->layer->timeline ? GES_PROJECT (ges_extractable_get_asset (GES_EXTRACTABLE (udata->layer->timeline))) : NULL; if (project) { gchar *possible_id; possible_id = ges_project_try_updating_id (project, source, error); if (possible_id) { ges_asset_request_async (ges_asset_get_extractable_type (source), possible_id, NULL, (GAsyncReadyCallback) new_asset_cb, udata); g_free (possible_id); return; } } GST_ERROR ("Asset could not be created for uri %s, error: %s", ges_asset_get_id (asset), error->message); } else { GESProject *project = udata->layer->timeline ? GES_PROJECT (ges_extractable_get_asset (GES_EXTRACTABLE (udata->layer->timeline))) : NULL; ges_extractable_set_asset (GES_EXTRACTABLE (udata->clip), asset); ges_project_add_asset (project, asset); ges_layer_add_clip (udata->layer, udata->clip); } gst_object_unref (asset); g_slice_free (NewAssetUData, udata); }
static void new_asset_cb (GESAsset * source, GAsyncResult * res, PendingAsset * passet) { GError *error = NULL; gchar *possible_id = NULL; GList *tmp, *pendings = NULL; GESFormatter *self = passet->formatter; const gchar *id = ges_asset_get_id (source); GESBaseXmlFormatterPrivate *priv = _GET_PRIV (self); GESAsset *asset = ges_asset_request_finish (res, &error); if (error) { GST_LOG_OBJECT (self, "Error %s creating asset id: %s", error->message, id); /* We set the metas on the Asset to give hints to the user */ if (passet->metadatas) ges_meta_container_add_metas_from_string (GES_META_CONTAINER (source), passet->metadatas); if (passet->properties) gst_structure_foreach (passet->properties, (GstStructureForeachFunc) set_property_foreach, source); possible_id = ges_project_try_updating_id (GES_FORMATTER (self)->project, source, error); if (possible_id == NULL) { GST_WARNING_OBJECT (self, "Abandoning creation of asset %s with ID %s" "- Error: %s", g_type_name (G_OBJECT_TYPE (source)), id, error->message); pendings = g_hash_table_lookup (priv->assetid_pendingclips, id); for (tmp = pendings; tmp; tmp = tmp->next) _free_pending_clip (priv, (PendingClip *) tmp->data); _free_pending_asset (priv, passet); goto done; } /* We got a possible ID replacement for that asset, create it, and * make sure the assetid_pendingclips will use it */ ges_asset_request_async (ges_asset_get_extractable_type (source), possible_id, NULL, (GAsyncReadyCallback) new_asset_cb, passet); ges_project_add_loading_asset (GES_FORMATTER (self)->project, ges_asset_get_extractable_type (source), possible_id); pendings = g_hash_table_lookup (priv->assetid_pendingclips, id); if (pendings) { g_hash_table_remove (priv->assetid_pendingclips, id); g_hash_table_insert (priv->assetid_pendingclips, g_strdup (possible_id), pendings); /* pendings should no be freed */ pendings = NULL; } goto done; } /* now that we have the GESAsset, we create the GESClips */ pendings = g_hash_table_lookup (priv->assetid_pendingclips, id); GST_DEBUG_OBJECT (self, "Asset created with ID %s, now creating pending " " Clips, nb pendings: %i", id, g_list_length (pendings)); for (tmp = pendings; tmp; tmp = tmp->next) { GList *tmpeffect; GESClip *clip; PendingClip *pend = (PendingClip *) tmp->data; clip = _add_object_to_layer (priv, pend->id, pend->layer, asset, pend->start, pend->inpoint, pend->duration, pend->track_types, pend->metadatas, pend->properties); if (clip == NULL) continue; _add_children_properties (priv, pend->children_props, clip); _add_pending_bindings (priv, pend->pending_bindings, clip); GST_DEBUG_OBJECT (self, "Adding %i effect to new object", g_list_length (pend->effects)); for (tmpeffect = pend->effects; tmpeffect; tmpeffect = tmpeffect->next) { PendingEffects *peffect = (PendingEffects *) tmpeffect->data; /* We keep a ref as _free_pending_effect unrefs it */ _add_track_element (self, clip, gst_object_ref (peffect->trackelement), peffect->track_id, peffect->children_properties, peffect->properties); } _free_pending_clip (priv, pend); } /* And now add to the project */ ges_project_add_asset (self->project, asset); gst_object_unref (self); _free_pending_asset (priv, passet); done: if (asset) gst_object_unref (asset); if (possible_id) g_free (possible_id); if (pendings) { g_hash_table_remove (priv->assetid_pendingclips, id); g_list_free (pendings); } if (g_hash_table_size (priv->assetid_pendingclips) == 0 && priv->pending_assets == NULL) _loading_done (self); }