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 extractable_set_asset (GESExtractable * self, GESAsset * asset) { GESUriClip *uriclip = GES_URI_CLIP (self); GESUriClipAsset *filesource_asset = GES_URI_CLIP_ASSET (asset); GESClip *clip = GES_CLIP (self); if (GST_CLOCK_TIME_IS_VALID (GES_TIMELINE_ELEMENT_DURATION (clip)) == FALSE) _set_duration0 (GES_TIMELINE_ELEMENT (uriclip), ges_uri_clip_asset_get_duration (filesource_asset)); ges_timeline_element_set_max_duration (GES_TIMELINE_ELEMENT (uriclip), ges_uri_clip_asset_get_duration (filesource_asset)); ges_uri_clip_set_is_image (uriclip, ges_uri_clip_asset_is_image (filesource_asset)); if (ges_clip_get_supported_formats (clip) == GES_TRACK_TYPE_UNKNOWN) { ges_clip_set_supported_formats (clip, ges_clip_asset_get_supported_formats (GES_CLIP_ASSET (filesource_asset))); } GES_TIMELINE_ELEMENT (uriclip)->asset = asset; }
static void asset_added_cb (GESProject * project, GESAsset * asset, void *mainloop) { GstDiscovererInfo *info; info = ges_uri_clip_asset_get_info (GES_URI_CLIP_ASSET (asset)); fail_unless (GST_IS_DISCOVERER_INFO (info)); g_main_loop_quit ((GMainLoop *) mainloop); }
GESTimeline * compTL (void) { GESTimeline *timeline; GESTrack *trackv; timeline = ges_timeline_new (); trackv = GES_TRACK (ges_video_track_new ()); ges_timeline_add_track (timeline, trackv); const gchar *assets[] = { "image/vieh.png", "image/PNG_transparency_demonstration_1.png", "image/Ice_Cream.png", "image/Fish.png" }; guint asset_count = 4; for (int i = 1; i <= asset_count; i++) { GESLayer *layer = ges_layer_new (); ges_timeline_add_layer (timeline, layer); g_object_set (layer, "priority", i - 1, NULL); GESClip *vieh = ges_clip_from_rel_path (assets[i - 1], layer, 0, 0, 10, GES_TRACK_TYPE_VIDEO); GESTrackElement *elem = ges_clip_find_track_element (vieh, trackv, G_TYPE_NONE); GESUriClipAsset *asset = GES_URI_CLIP_ASSET (ges_extractable_get_asset (GES_EXTRACTABLE (vieh))); guint width = ges_asset_get_width (asset); guint height = ges_asset_get_height (asset); g_print ("%s: %dx%d\n", assets[i - 1], width, height); ges_track_element_set_child_properties (elem, "posx", i * 100, "posy", i * 100, "width", i * 100 * width / height, "height", (i * 100) - 1, NULL); } GESLayer *backgroud_layer = ges_layer_new (); ges_timeline_add_layer (timeline, backgroud_layer); g_object_set (backgroud_layer, "priority", asset_count, NULL); ges_clip_from_rel_path ("image/wallpaper-2597248.jpg", backgroud_layer, 0, 0, 10, GES_TRACK_TYPE_VIDEO); ges_timeline_commit (timeline); return timeline; }
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 GList * ges_uri_clip_create_track_elements (GESClip * clip, GESTrackType type) { GList *res = NULL; const GList *tmp, *stream_assets; g_return_val_if_fail (GES_TIMELINE_ELEMENT (clip)->asset, NULL); stream_assets = ges_uri_clip_asset_get_stream_assets (GES_URI_CLIP_ASSET (GES_TIMELINE_ELEMENT (clip)->asset)); for (tmp = stream_assets; tmp; tmp = tmp->next) { GESTrackElementAsset *asset = GES_TRACK_ELEMENT_ASSET (tmp->data); if (ges_track_element_asset_get_track_type (asset) == type) res = g_list_prepend (res, ges_asset_extract (GES_ASSET (asset), NULL)); } return res; }
static gboolean extractable_set_asset (GESExtractable * self, GESAsset * asset) { gboolean res = TRUE; GESUriClip *uriclip = GES_URI_CLIP (self); GESUriClipAsset *uri_clip_asset; GESClip *clip = GES_CLIP (self); GESLayer *layer = ges_clip_get_layer (clip); GList *tmp; GESTimelineElement *audio_source = NULL, *video_source = NULL; g_return_val_if_fail (GES_IS_URI_CLIP_ASSET (asset), FALSE); uri_clip_asset = GES_URI_CLIP_ASSET (asset); if (GST_CLOCK_TIME_IS_VALID (GES_TIMELINE_ELEMENT_DURATION (clip)) == FALSE) _set_duration0 (GES_TIMELINE_ELEMENT (uriclip), ges_uri_clip_asset_get_duration (uri_clip_asset)); ges_timeline_element_set_max_duration (GES_TIMELINE_ELEMENT (uriclip), ges_uri_clip_asset_get_duration (uri_clip_asset)); ges_uri_clip_set_is_image (uriclip, ges_uri_clip_asset_is_image (uri_clip_asset)); if (ges_clip_get_supported_formats (clip) == GES_TRACK_TYPE_UNKNOWN) { ges_clip_set_supported_formats (clip, ges_clip_asset_get_supported_formats (GES_CLIP_ASSET (uri_clip_asset))); } GES_TIMELINE_ELEMENT (uriclip)->asset = asset; if (layer) { GList *children = ges_container_get_children (GES_CONTAINER (self), TRUE); for (tmp = children; tmp; tmp = tmp->next) { if (GES_IS_SOURCE (tmp->data)) { GESTrack *track = ges_track_element_get_track (tmp->data); if (track->type == GES_TRACK_TYPE_AUDIO) audio_source = gst_object_ref (tmp->data); else if (track->type == GES_TRACK_TYPE_VIDEO) video_source = gst_object_ref (tmp->data); ges_track_remove_element (track, tmp->data); ges_container_remove (GES_CONTAINER (self), tmp->data); } } g_list_free_full (children, g_object_unref); gst_object_ref (clip); ges_layer_remove_clip (layer, clip); res = ges_layer_add_clip (layer, clip); for (tmp = GES_CONTAINER_CHILDREN (self); tmp; tmp = tmp->next) { if (GES_IS_SOURCE (tmp->data)) { GESTrack *track = ges_track_element_get_track (tmp->data); if (track->type == GES_TRACK_TYPE_AUDIO && audio_source) ges_track_element_copy_properties (audio_source, tmp->data); else if (track->type == GES_TRACK_TYPE_VIDEO && video_source) ges_track_element_copy_properties (video_source, tmp->data); } } g_clear_object (&audio_source); g_clear_object (&video_source); gst_object_unref (clip); gst_object_unref (layer); } if (res) { g_free (uriclip->priv->uri); uriclip->priv->uri = g_strdup (ges_asset_get_id (asset)); } return res; }
void getClips (JsonReader * reader, GESLayer * layer, GESTrackType type, gboolean absolute_paths) { int i; json_reader_read_member (reader, "clips"); g_print ("= clips =\n"); for (i = 0; i < json_reader_count_elements (reader); i++) { json_reader_read_element (reader, i); const char *src = getString (reader, "src"); int start = getInt (reader, "start"); int in = getInt (reader, "in"); int dur = getInt (reader, "dur"); g_print ("Clip: %s (start: %d, in: %d, dur: %d)\n", src, start, in, dur); GESClip *clip; if (is_in_members (reader, "multi") && getBool (reader, "multi")) { g_print ("multi on.\n"); clip = ges_multi_clip_from_path (src, layer, start, in, dur, absolute_paths); } else { const char *path; if (absolute_paths == TRUE) { path = src; } else { path = ges_renderer_get_absolute_path (src); } clip = ges_clip_from_path (path, layer, start, in, dur, type); } GESTimeline *tl = ges_layer_get_timeline (layer); GList *tracks = ges_timeline_get_tracks (tl); GESTrack *trackv = g_list_first (tracks)->data; GESTrack *tracka = g_list_last (tracks)->data; if (is_in_members (reader, "volume")) { double volume = getDouble (reader, "volume"); GESTrackElement *audioElement = ges_clip_find_track_element (clip, tracka, G_TYPE_NONE); if (audioElement != NULL) { ges_track_element_set_child_properties (audioElement, "volume", volume, NULL); } } GESTrackElement *videoElement = ges_clip_find_track_element (clip, trackv, G_TYPE_NONE); if (videoElement != NULL) { if (is_in_members (reader, "x")) { int x = getInt (reader, "x"); ges_track_element_set_child_properties (videoElement, "posx", x, NULL); } if (is_in_members (reader, "y")) { int y = getInt (reader, "y"); ges_track_element_set_child_properties (videoElement, "posy", y, NULL); } if (is_in_members (reader, "alpha")) { gdouble alpha = getDouble (reader, "alpha"); ges_track_element_set_child_properties (videoElement, "alpha", alpha, NULL); } if (is_in_members (reader, "size")) { gdouble size = getDouble (reader, "size"); GESUriClipAsset *asset = GES_URI_CLIP_ASSET (ges_extractable_get_asset (GES_EXTRACTABLE (clip))); guint width = ges_asset_get_width (asset); guint height = ges_asset_get_height (asset); if (width != 0 && height != 0) { double dw = width * size; double dh = height * size; g_print ("%dx%d => * %f => %dx%d\n", width, height, size, (int) dw, (int) dh); ges_track_element_set_child_properties (videoElement, "width", (int) dw, "height", (int) dh, NULL); } } if (is_in_members (reader, "effect")) { const char *effect_str = getString (reader, "effect"); if (strcmp (effect_str, "") != 0) { g_print ("Using effect %s", effect_str); GESEffect *effect = ges_effect_new (effect_str); ges_container_add (GES_CONTAINER (clip), GES_TIMELINE_ELEMENT (effect)); } } } json_reader_end_element (reader); } json_reader_end_member (reader); }