/** * ges_timeline_element_set_timeline: * @self: a #GESTimelineElement * @timeline: The #GESTimeline @self is in * * Sets the timeline of @self to @timeline. * * Returns: %TRUE if @timeline could be set or %FALSE when @timeline * already had a timeline. */ gboolean ges_timeline_element_set_timeline (GESTimelineElement * self, GESTimeline * timeline) { g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), FALSE); g_return_val_if_fail (timeline == NULL || GES_IS_TIMELINE (timeline), FALSE); GST_DEBUG_OBJECT (self, "set timeline to %" GST_PTR_FORMAT, timeline); if (timeline != NULL && G_UNLIKELY (self->timeline != NULL)) goto had_timeline; self->timeline = timeline; g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TIMELINE]); return TRUE; /* ERROR handling */ had_timeline: { GST_DEBUG_OBJECT (self, "set timeline failed, object already had a " "timeline"); return FALSE; } }
/** * ges_pipeline_set_timeline: * @pipeline: a #GESPipeline * @timeline: the #GESTimeline to set on the @pipeline. * * Sets the timeline to use in this pipeline. * * The reference to the @timeline will be stolen by the @pipeline. * * Returns: TRUE if the @timeline could be successfully set on the @pipeline, * else FALSE. */ gboolean ges_pipeline_set_timeline (GESPipeline * pipeline, GESTimeline * timeline) { g_return_val_if_fail (GES_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (GES_IS_TIMELINE (timeline), FALSE); g_return_val_if_fail (pipeline->priv->timeline == NULL, FALSE); GST_DEBUG ("pipeline:%p, timeline:%p", timeline, pipeline); if (G_UNLIKELY (!gst_bin_add (GST_BIN_CAST (pipeline), GST_ELEMENT (timeline)))) { return FALSE; } pipeline->priv->timeline = timeline; g_signal_connect (timeline, "track-added", G_CALLBACK (_timeline_track_added_cb), pipeline); g_signal_connect (timeline, "track-removed", G_CALLBACK (_timeline_track_removed_cb), pipeline); /* FIXME Check if we should rollback if we can't sync state */ gst_element_sync_state_with_parent (GST_ELEMENT (timeline)); return TRUE; }
/** * ges_pipeline_add_timeline: * @pipeline: a #GESPipeline * @timeline: the #GESTimeline to set on the @pipeline. * * Sets the timeline to use in this pipeline. * * The reference to the @timeline will be stolen by the @pipeline. * * Returns: TRUE if the @timeline could be successfully set on the @pipeline, * else FALSE. */ gboolean ges_pipeline_add_timeline (GESPipeline * pipeline, GESTimeline * timeline) { g_return_val_if_fail (GES_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (GES_IS_TIMELINE (timeline), FALSE); g_return_val_if_fail (pipeline->priv->timeline == NULL, FALSE); GST_DEBUG ("pipeline:%p, timeline:%p", timeline, pipeline); if (G_UNLIKELY (!gst_bin_add (GST_BIN_CAST (pipeline), GST_ELEMENT (timeline)))) { return FALSE; } pipeline->priv->timeline = timeline; /* Connect to pipeline */ g_signal_connect (timeline, "pad-added", (GCallback) pad_added_cb, pipeline); g_signal_connect (timeline, "pad-removed", (GCallback) pad_removed_cb, pipeline); g_signal_connect (timeline, "no-more-pads", (GCallback) no_more_pads_cb, pipeline); /* FIXME Check if we should rollback if we can't sync state */ gst_element_sync_state_with_parent (GST_ELEMENT (timeline)); return TRUE; }
/** * ges_project_load: * @project: A #GESProject that has an @uri set already * @timeline: A blank timeline to load @project into * @error: (out) (allow-none): An error to be set in case something wrong happens or %NULL * * Loads @project into @timeline * * Returns: %TRUE if the project could be loaded %FALSE otherwize. */ gboolean ges_project_load (GESProject * project, GESTimeline * timeline, GError ** error) { g_return_val_if_fail (GES_IS_TIMELINE (timeline), FALSE); g_return_val_if_fail (GES_IS_PROJECT (project), FALSE); g_return_val_if_fail (ges_project_get_uri (project), FALSE); g_return_val_if_fail ( (ges_extractable_get_asset (GES_EXTRACTABLE (timeline)) == NULL), FALSE); if (!_load_project (project, timeline, error)) return FALSE; ges_extractable_set_asset (GES_EXTRACTABLE (timeline), GES_ASSET (project)); return TRUE; }
/** * ges_timeline_element_set_timeline: * @self: a #GESTimelineElement * @timeline: The #GESTimeline @self is in * * Sets the timeline of @self to @timeline. * * Returns: %TRUE if @timeline could be set or %FALSE when @timeline * already had a timeline. */ gboolean ges_timeline_element_set_timeline (GESTimelineElement * self, GESTimeline * timeline) { g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), FALSE); g_return_val_if_fail (timeline == NULL || GES_IS_TIMELINE (timeline), FALSE); GST_DEBUG_OBJECT (self, "set timeline to %" GST_PTR_FORMAT, timeline); if (timeline != NULL && G_UNLIKELY (self->timeline != NULL)) goto had_timeline; if (timeline == NULL) { if (self->timeline) { if (!timeline_remove_element (self->timeline, self)) { GST_INFO_OBJECT (self, "Could not remove from" " currently set timeline %" GST_PTR_FORMAT, self->timeline); return FALSE; } } } else { if (!timeline_add_element (timeline, self)) { GST_INFO_OBJECT (self, "Could not add to timeline %" GST_PTR_FORMAT, self); return FALSE; } } self->timeline = timeline; g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TIMELINE]); return TRUE; /* ERROR handling */ had_timeline: { GST_DEBUG_OBJECT (self, "set timeline failed, object already had a " "timeline"); return FALSE; } }
gboolean ges_formatter_load_from_uri (GESFormatter * formatter, GESTimeline * timeline, const gchar * uri) { gboolean ret = FALSE; GESFormatterClass *klass = GES_FORMATTER_GET_CLASS (formatter); g_return_val_if_fail (GES_IS_FORMATTER (formatter), FALSE); g_return_val_if_fail (GES_IS_TIMELINE (timeline), FALSE); g_signal_connect (timeline, "discovery-error", G_CALLBACK (discovery_error_cb), formatter); if (klass->load_from_uri) { ges_timeline_enable_update (timeline, FALSE); formatter->timeline = timeline; ret = klass->load_from_uri (formatter, timeline, uri); ges_timeline_enable_update (timeline, TRUE); } return ret; }