GESTimeline * overlayTL (void) { GESTimeline *timeline; GESLayer *layer, *layer2; timeline = ges_timeline_new_video (); layer = ges_layer_new (); layer2 = ges_layer_new (); ges_layer_set_priority (layer2, 1); guint prio1 = ges_layer_get_priority (layer); guint prio2 = ges_layer_get_priority (layer2); g_object_set (layer, "auto-transition", TRUE, NULL); g_print ("prios %d %d\n", prio1, prio2); ges_timeline_add_layer (timeline, layer); ges_timeline_add_layer (timeline, layer2); ges_clip_unknown_from_rel_path ("image/PNG_transparency_demonstration_1.png", layer, 0, 0, 10); ges_clip_unknown_from_rel_path ("hd/fluidsimulation.mp4", layer2, 0, 0, 10); ges_timeline_commit (timeline); return timeline; }
/**************************************************** * Our listening of children * ****************************************************/ static void _update_our_values (GESGroup * group) { GList *tmp; GESContainer *container = GES_CONTAINER (group); guint32 min_layer_prio = G_MAXINT32, max_layer_prio = 0; for (tmp = GES_CONTAINER_CHILDREN (group); tmp; tmp = tmp->next) { GESContainer *child = tmp->data; if (GES_IS_CLIP (child)) { GESLayer *layer = ges_clip_get_layer (GES_CLIP (child)); gint32 prio = ges_layer_get_priority (layer); min_layer_prio = MIN (prio, min_layer_prio); max_layer_prio = MAX (prio, max_layer_prio); } else if (GES_IS_GROUP (child)) { gint32 prio = _PRIORITY (child), height = GES_CONTAINER_HEIGHT (child); min_layer_prio = MIN (prio, min_layer_prio); max_layer_prio = MAX ((prio + height), max_layer_prio); } } if (min_layer_prio != _PRIORITY (group)) { group->priv->setting_value = TRUE; _set_priority0 (GES_TIMELINE_ELEMENT (group), min_layer_prio); group->priv->setting_value = FALSE; for (tmp = GES_CONTAINER_CHILDREN (group); tmp; tmp = tmp->next) { GESTimelineElement *child = tmp->data; guint32 child_prio = GES_IS_CLIP (child) ? ges_clip_get_layer_priority (GES_CLIP (child)) : _PRIORITY (child); _ges_container_set_priority_offset (container, child, min_layer_prio - child_prio); } } group->priv->max_layer_prio = max_layer_prio; _ges_container_set_height (GES_CONTAINER (group), max_layer_prio - min_layer_prio + 1); }
child, min_layer_prio - child_prio); } } group->priv->max_layer_prio = max_layer_prio; _ges_container_set_height (GES_CONTAINER (group), max_layer_prio - min_layer_prio + 1); } static void _child_priority_changed_cb (GESLayer * layer, GParamSpec * arg G_GNUC_UNUSED, GESTimelineElement * clip) { GESContainer *container = GES_CONTAINER (GES_TIMELINE_ELEMENT_PARENT (clip)); gint layer_prio = ges_layer_get_priority (layer); gint offset = _ges_container_get_priority_offset (container, clip); if (container->children_control_mode != GES_CHILDREN_UPDATE) { GST_DEBUG_OBJECT (container, "Ignoring updated"); return; } if (layer_prio + offset == _PRIORITY (container)) return; container->initiated_move = clip; _set_priority0 (GES_TIMELINE_ELEMENT (container), layer_prio + offset); container->initiated_move = NULL; }