diff options
author | Thibault Saunier <thibault.saunier@collabora.com> | 2013-11-22 17:49:49 -0300 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@collabora.com> | 2013-11-22 17:50:27 -0300 |
commit | e7a45f0eef880a5530431c8ae1984a85169921d6 (patch) | |
tree | 06bd8b268f7f7d0d4313c14c8a04132f36f88284 | |
parent | 04071e72145a12aa87e02224f05108cf615e4deb (diff) |
Remove GESSimplerLayer, that API should land into GESLayer in the end
The priority handling of clip is now handled by GESLayer itself, and
handling clip as a ordered list should be implemented in GESLayer itself
too, this way the user can decide to switch mode at any time instead of
-rw-r--r-- | docs/libs/ges-docs.sgml | 5 | ||||
-rw-r--r-- | docs/libs/ges-sections.txt | 22 | ||||
-rw-r--r-- | docs/libs/ges.types | 1 | ||||
-rw-r--r-- | ges/Makefile.am | 2 | ||||
-rw-r--r-- | ges/ges-base-effect-clip.c | 4 | ||||
-rw-r--r-- | ges/ges-effect-clip.c | 4 | ||||
-rw-r--r-- | ges/ges-simple-layer.c | 526 | ||||
-rw-r--r-- | ges/ges-simple-layer.h | 101 | ||||
-rw-r--r-- | ges/ges-transition-clip.c | 4 | ||||
-rw-r--r-- | ges/ges.h | 1 | ||||
-rw-r--r-- | tests/check/Makefile.am | 1 | ||||
-rw-r--r-- | tests/check/ges/backgroundsource.c | 4 | ||||
-rw-r--r-- | tests/check/ges/effects.c | 22 | ||||
-rw-r--r-- | tests/check/ges/overlays.c | 4 | ||||
-rw-r--r-- | tests/check/ges/simplelayer.c | 454 | ||||
-rw-r--r-- | tests/check/ges/text_properties.c | 4 | ||||
-rw-r--r-- | tests/check/ges/titles.c | 4 | ||||
-rw-r--r-- | tests/examples/concatenate.c | 2 | ||||
-rw-r--r-- | tests/examples/ges-ui.c | 63 | ||||
-rw-r--r-- | tests/examples/simple1.c | 6 | ||||
-rw-r--r-- | tests/examples/test3.c | 7 | ||||
-rw-r--r-- | tests/examples/test4.c | 5 | ||||
-rw-r--r-- | tests/examples/thumbnails.c | 6 | ||||
-rw-r--r-- | tools/ges-launch.c | 6 |
24 files changed, 49 insertions, 1209 deletions
diff --git a/docs/libs/ges-docs.sgml b/docs/libs/ges-docs.sgml index 506f724c..7a315299 100644 --- a/docs/libs/ges-docs.sgml +++ b/docs/libs/ges-docs.sgml @@ -82,11 +82,6 @@ platform as well as Windows. It is released under the GNU Library General Public </chapter> <chapter> - <title>Simple Timeline interface</title> - <xi:include href="xml/ges-simple-layer.xml"/> - </chapter> - - <chapter> <title>Convenience classes</title> <xi:include href="xml/ges-pipeline.xml"/> </chapter> diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt index d2991695..1e1255e7 100644 --- a/docs/libs/ges-sections.txt +++ b/docs/libs/ges-sections.txt @@ -671,28 +671,6 @@ ges_transition_clip_get_type <SECTION> -<FILE>ges-simple-layer</FILE> -<TITLE>GESSimpleLayer</TITLE> -GESSimpleLayer -ges_simple_layer_new -ges_simple_layer_add_object -ges_simple_layer_move_object -ges_simple_layer_nth -ges_simple_layer_index -ges_simple_layer_is_valid -<SUBSECTION Standard> -GESSimpleLayerClass -ges_simple_layer_get_type -GESSimpleLayerPrivate -GES_IS_SIMPLE_LAYER -GES_IS_SIMPLE_LAYER_CLASS -GES_SIMPLE_LAYER -GES_SIMPLE_LAYER_CLASS -GES_SIMPLE_LAYER_GET_CLASS -GES_TYPE_SIMPLE_LAYER -</SECTION> - -<SECTION> <FILE>ges-test-clip</FILE> <TITLE>GESTestClip</TITLE> GESTestClip diff --git a/docs/libs/ges.types b/docs/libs/ges.types index dc024f8e..afed6550 100644 --- a/docs/libs/ges.types +++ b/docs/libs/ges.types @@ -2,7 +2,6 @@ #include <ges/ges.h> ges_formatter_get_type -ges_simple_layer_get_type %ges_text_halign_get_type %ges_text_valign_get_type ges_timeline_get_type diff --git a/ges/Makefile.am b/ges/Makefile.am index 5ded057a..00bb1ecc 100644 --- a/ges/Makefile.am +++ b/ges/Makefile.am @@ -12,7 +12,6 @@ libges_@GST_API_VERSION@_la_SOURCES = \ ges.c \ ges-enums.c \ ges-meta-container.c \ - ges-simple-layer.c \ ges-timeline.c \ ges-layer.c \ ges-clip.c \ @@ -77,7 +76,6 @@ libges_@GST_API_VERSION@include_HEADERS = \ ges-enums.h \ ges-gerror.h \ ges-meta-container.h \ - ges-simple-layer.h \ ges-timeline.h \ ges-layer.h \ ges-clip.h \ diff --git a/ges/ges-base-effect-clip.c b/ges/ges-base-effect-clip.c index ba23d875..6fb2668b 100644 --- a/ges/ges-base-effect-clip.c +++ b/ges/ges-base-effect-clip.c @@ -23,10 +23,6 @@ * * The effect will be applied on the sources that have lower priorities * (higher number) between the inpoint and the end of it. - * - * In a #GESSimpleLayer, the priorities will be set for you but if - * you use another type of #GESLayer, you will have to handle it - * yourself. */ #include <ges/ges.h> diff --git a/ges/ges-effect-clip.c b/ges/ges-effect-clip.c index 10e9020b..4567c944 100644 --- a/ges/ges-effect-clip.c +++ b/ges/ges-effect-clip.c @@ -24,10 +24,6 @@ * * The effect will be applied on the sources that have lower priorities * (higher number) between the inpoint and the end of it. - * - * In a #GESSimpleLayer, the priorities will be set for you but if - * you use another type of #GESLayer, you will have to handle it - * yourself. */ #include <ges/ges.h> diff --git a/ges/ges-simple-layer.c b/ges/ges-simple-layer.c deleted file mode 100644 index ebc13ba3..00000000 --- a/ges/ges-simple-layer.c +++ /dev/null @@ -1,526 +0,0 @@ -/* GStreamer Editing Services - * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk> - * 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -/** - * SECTION:ges-simple-layer - * @short_description: High-level GESLayer - * - * #GESSimpleLayer allows using #GESClip(s) with a list-like - * API. Clients can add any type of GESClip to a - * GESSimpleLayer, and the layer will automatically compute the - * appropriate start times. - * - * Users should be aware that GESBaseTransitionClip objects are considered to - * have a negative duration for the purposes of positioning GESSourceClip - * objects (i.e., adding a GESBaseTransitionClip creates an overlap between - * the two adjacent sources. - */ - -#include <ges/ges.h> -#include "ges-internal.h" - -static void ges_simple_layer_object_removed (GESLayer * layer, GESClip * clip); - -static void ges_simple_layer_object_added (GESLayer * layer, GESClip * clip); - -static void -clip_height_changed_cb (GESClip * clip G_GNUC_UNUSED, - GParamSpec * arg G_GNUC_UNUSED, GESSimpleLayer * layer); - -static GList *get_objects (GESLayer * layer); - -G_DEFINE_TYPE (GESSimpleLayer, ges_simple_layer, GES_TYPE_LAYER); - -struct _GESSimpleLayerPrivate -{ - /* Sorted list of objects */ - GList *objects; - - gboolean adding_object; - gboolean valid; -}; - -enum -{ - OBJECT_MOVED, - LAST_SIGNAL, -}; - -enum -{ - PROP_0, - PROP_VALID, - LAST_PROP, -}; - -static guint gstl_signals[LAST_SIGNAL] = { 0 }; - -static void -ges_simple_layer_get_property (GObject * object, - guint property_id, GValue * value, GParamSpec * pspec) -{ - GESSimpleLayer *self; - self = GES_SIMPLE_LAYER (object); - - switch (property_id) { - case PROP_VALID: - g_value_set_boolean (value, self->priv->valid); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -ges_simple_layer_set_property (GObject * object, guint property_id, - const GValue * value, GParamSpec * pspec) -{ - switch (property_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -} - -static void -ges_simple_layer_class_init (GESSimpleLayerClass * klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GESLayerClass *layer_class = GES_LAYER_CLASS (klass); - - g_type_class_add_private (klass, sizeof (GESSimpleLayerPrivate)); - - object_class->get_property = ges_simple_layer_get_property; - object_class->set_property = ges_simple_layer_set_property; - - /* Be informed when objects are being added/removed from elsewhere */ - layer_class->object_removed = ges_simple_layer_object_removed; - layer_class->object_added = ges_simple_layer_object_added; - layer_class->get_objects = get_objects; - - /** - * GESSimpleLayer:valid: - * - * FALSE when the arrangement of objects in the layer would cause errors or - * unexpected output during playback. Do not set the containing pipeline - * state to PLAYING when this property is FALSE. - */ - g_object_class_install_property (object_class, PROP_VALID, - g_param_spec_boolean ("valid", "Valid", - "Layer is in a valid configuration", FALSE, G_PARAM_READABLE)); - - /** - * GESSimpleLayer::object-moved: - * @layer: the #GESSimpleLayer - * @object: the #GESClip that was added - * @old: the previous position of the object - * @new: the new position of the object - * - * Will be emitted when an object is moved with - * #ges_simple_layer_move_object. - */ - gstl_signals[OBJECT_MOVED] = - g_signal_new ("object-moved", G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GESSimpleLayerClass, - object_moved), - NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 3, - GES_TYPE_CLIP, G_TYPE_INT, G_TYPE_INT); -} - -static void -ges_simple_layer_init (GESSimpleLayer * self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, - GES_TYPE_SIMPLE_LAYER, GESSimpleLayerPrivate); - - self->priv->objects = NULL; -} - -static void -gstl_recalculate (GESSimpleLayer * self) -{ - GList *tmp; - gint64 pos = 0; - gint priority = 0; - gint transition_priority = 0; - gint height; - GESClip *prev_object = NULL; - GESClip *prev_transition = NULL; - gboolean valid = TRUE; - GESSimpleLayerPrivate *priv = self->priv; - - priority = GES_LAYER (self)->min_gnl_priority; - - GST_DEBUG ("recalculating values"); - - if (priv->objects && GES_IS_BASE_TRANSITION_CLIP (priv->objects->data)) { - valid = FALSE; - } - - for (tmp = priv->objects; tmp; tmp = tmp->next) { - GESClip *clip; - guint64 dur; - GList *l_next; - - clip = (GESClip *) tmp->data; - dur = _DURATION (clip); - height = GES_CONTAINER_HEIGHT (clip); - - if (GES_IS_SOURCE_CLIP (clip)) { - - GST_LOG ("%p clip: height: %d: priority %d", clip, height, priority); - - if (G_UNLIKELY (_START (clip) != pos)) { - _set_start0 (GES_TIMELINE_ELEMENT (clip), pos); - } - - if (G_UNLIKELY (_PRIORITY (clip) != priority)) { - _set_priority0 (GES_TIMELINE_ELEMENT (clip), priority); - } - - transition_priority = MAX (0, priority - 1); - priority += height; - pos += dur; - - g_assert (priority != -1); - - } else if (GES_IS_BASE_TRANSITION_CLIP (clip)) { - - pos -= dur; - if (pos < 0) - pos = 0; - - GST_LOG ("%p clip: height: %d: trans_priority %d Position: %" - G_GINT64_FORMAT ", duration %" G_GINT64_FORMAT, clip, height, - transition_priority, pos, dur); - - g_assert (transition_priority != -1); - - if (G_UNLIKELY (_START (clip) != pos)) - _set_start0 (GES_TIMELINE_ELEMENT (clip), pos); - - if (G_UNLIKELY (_PRIORITY (clip) != transition_priority)) { - _set_priority0 (GES_TIMELINE_ELEMENT (clip), transition_priority); - } - - /* sanity checks */ - l_next = g_list_next (tmp); - - if (GES_IS_BASE_TRANSITION_CLIP (prev_object)) { - GST_ERROR ("two transitions in sequence!"); - valid = FALSE; - } - - if (prev_object && (_DURATION (prev_object) < dur)) { - GST_ERROR ("transition duration exceeds that of previous neighbor!"); - valid = FALSE; - } - - if (l_next && (_DURATION (l_next->data) < dur)) { - GST_ERROR ("transition duration exceeds that of next neighbor!"); - valid = FALSE; - } - - if (prev_transition) { - guint64 start, end; - end = (_DURATION (prev_transition) + _START (prev_transition)); - - start = pos; - - if (end > start) { - GST_ERROR ("%" G_GUINT64_FORMAT ", %" G_GUINT64_FORMAT ": " - "overlapping transitions!", start, end); - valid = FALSE; - } - } - prev_transition = clip; - } - - prev_object = clip; - - } - - if (prev_object && GES_IS_BASE_TRANSITION_CLIP (prev_object)) { - valid = FALSE; - } - - GST_DEBUG ("Finished recalculating: final start pos is: %" GST_TIME_FORMAT, - GST_TIME_ARGS (pos)); - - GES_LAYER (self)->max_gnl_priority = priority; - - if (valid != self->priv->valid) { - self->priv->valid = valid; - g_object_notify (G_OBJECT (self), "valid"); - } -} - -/** - * ges_simple_layer_add_object: - * @layer: a #GESSimpleLayer - * @object: the #GESClip to add - * @position: the position at which to add the object - * - * Adds the object at the given position in the layer. The position is where - * the object will be inserted. To put the object before all objects, use - * position 0. To put after all objects, use position -1. - * - * When adding transitions, it is important that the adjacent objects - * (objects at position, and position + 1) be (1) A derivative of - * GESSourceClip or other non-transition, and (2) have a duration at least - * as long as the duration of the transition. - * - * The layer will steal a reference to the provided object. - * - * Returns: TRUE if the object was successfuly added, else FALSE. - */ -gboolean -ges_simple_layer_add_object (GESSimpleLayer * layer, - GESClip * clip, gint position) -{ - gboolean res; - GList *nth; - GESSimpleLayerPrivate *priv = layer->priv; - - GST_DEBUG ("layer:%p, clip:%p, position:%d", layer, clip, position); - - nth = g_list_nth (priv->objects, position); - - if (GES_IS_BASE_TRANSITION_CLIP (clip)) { - GList *lprev = g_list_previous (nth); - - GESClip *prev = GES_CLIP (lprev ? lprev->data : NULL); - GESClip *next = GES_CLIP (nth ? nth->data : NULL); - - if ((prev && GES_IS_BASE_TRANSITION_CLIP (prev)) || - (next && GES_IS_BASE_TRANSITION_CLIP (next))) { - GST_ERROR ("Not adding transition: Only insert transitions between two" - " sources, or at the begining or end the layer\n"); - return FALSE; - } - } - - - priv->adding_object = TRUE; - - /* provisionally insert the clip */ - priv->objects = g_list_insert (priv->objects, clip, position); - - res = ges_layer_add_clip ((GESLayer *) layer, clip); - - /* Add to layer */ - if (G_UNLIKELY (!res)) { - priv->adding_object = FALSE; - /* we failed to add the clip, so remove it from our list */ - priv->objects = g_list_remove (priv->objects, clip); - return FALSE; - } - - priv->adding_object = FALSE; - - GST_DEBUG ("Adding clip %p to the list", clip); - - - g_signal_connect (G_OBJECT (clip), "notify::height", G_CALLBACK - (clip_height_changed_cb), layer); - - /* recalculate positions */ - gstl_recalculate (layer); - - return TRUE; -} - -/** - * ges_simple_layer_nth: - * @layer: a #GESSimpleLayer - * @position: The position in position to get, starting from 0. - * - * Gets the clip at the given position. - * - * Returns: (transfer none): The #GESClip at the given position or NULL if - * the position is off the end of the layer. - */ - -GESClip * -ges_simple_layer_nth (GESSimpleLayer * layer, gint position) -{ - GList *list; - GESSimpleLayerPrivate *priv = layer->priv; - - list = g_list_nth (priv->objects, position); - - if (list) - return GES_CLIP (list->data); - - return NULL; -} - -/** - * ges_simple_layer_index: - * @layer: a #GESSimpleLayer - * @clip: a #GESClip in the layer - * - * Gets the position of the given clip within the given layer. - * - * Returns: The position of the clip starting from 0, or -1 if the - * clip was not found. - */ -gint -ges_simple_layer_index (GESSimpleLayer * layer, GESClip * clip) -{ - GESSimpleLayerPrivate *priv = layer->priv; - return g_list_index (priv->objects, clip); -} - -/** - * ges_simple_layer_move_object: - * @layer: a #GESSimpleLayer - * @clip: the #GESClip to move - * @newposition: the new position at which to move the clip - * - * Moves the clip to the given position in the layer. To put the clip before - * all other objects, use position 0. To put the objects after all objects, use - * position -1. - * - * Returns: TRUE if the clip was successfuly moved, else FALSE. - */ -gboolean -ges_simple_layer_move_object (GESSimpleLayer * layer, - GESClip * clip, gint newposition) -{ - gint idx; - GESSimpleLayerPrivate *priv = layer->priv; - GESLayer *clip_layer; - - GST_DEBUG ("layer:%p, clip:%p, newposition:%d", layer, clip, newposition); - - clip_layer = ges_clip_get_layer (clip); - if (G_UNLIKELY (clip_layer != (GESLayer *) layer)) { - GST_WARNING ("Clip doesn't belong to this layer"); - if (clip_layer != NULL) - gst_object_unref (clip_layer); - return FALSE; - } - if (clip_layer != NULL) - gst_object_unref (clip_layer); - - /* Find it's current position */ - idx = g_list_index (priv->objects, clip); - if (G_UNLIKELY (idx == -1)) { - GST_WARNING ("Clip not controlled by this layer"); - return FALSE; - } - - GST_DEBUG ("Object was previously at position %d", idx); - - /* If we don't have to change its position, don't */ - if (idx == newposition) - return TRUE; - - /* pop it off the list */ - priv->objects = g_list_remove (priv->objects, clip); - - /* re-add it at the proper position */ - priv->objects = g_list_insert (priv->objects, clip, newposition); - - /* recalculate positions */ - gstl_recalculate (layer); - - g_signal_emit (layer, gstl_signals[OBJECT_MOVED], 0, clip, idx, newposition); - - return TRUE; -} - -/** - * ges_simple_layer_new: - * - * Creates a new #GESSimpleLayer. - * - * Returns: The new #GESSimpleLayer - */ -GESSimpleLayer * -ges_simple_layer_new (void) -{ - return g_object_new (GES_TYPE_SIMPLE_LAYER, NULL); -} - - -/** - * ges_simple_layer_is_valid: - * @layer: a #GESSimpleLayer - * - * Checks whether the arrangement of objects in the layer would cause errors - * or unexpected output during playback. Do not set the containing pipeline - * state to PLAYING when this property is FALSE. - * - * Returns: #TRUE if current arrangement of the layer is valid else #FALSE. - */ -gboolean -ges_simple_layer_is_valid (GESSimpleLayer * layer) -{ - return layer->priv->valid; -} - -static void -ges_simple_layer_object_removed (GESLayer * layer, GESClip * clip) -{ - GESSimpleLayer *sl = (GESSimpleLayer *) layer; - - /* remove clip from our list */ - sl->priv->objects = g_list_remove (sl->priv->objects, clip); - gstl_recalculate (sl); -} - -static void -ges_simple_layer_object_added (GESLayer * layer, GESClip * clip) -{ - GESSimpleLayer *sl = (GESSimpleLayer *) layer; - - if (sl->priv->adding_object == FALSE) { - /* remove clip from our list */ - sl->priv->objects = g_list_append (sl->priv->objects, clip); - gstl_recalculate (sl); - } - g_signal_connect_swapped (clip, "notify::duration", - G_CALLBACK (gstl_recalculate), layer); -} - -static void -clip_height_changed_cb (GESClip * clip, - GParamSpec * arg G_GNUC_UNUSED, GESSimpleLayer * layer) -{ - GST_LOG ("layer %p: notify height changed %p", layer, clip); - gstl_recalculate (layer); -} - -static GList * -get_objects (GESLayer * l) -{ - GList *ret; - GList *tmp; - GESSimpleLayer *layer = (GESSimpleLayer *) l; - - ret = g_list_copy (layer->priv->objects); - - for (tmp = ret; tmp; tmp = tmp->next) { - gst_object_ref (tmp->data); - } - - return ret; -} diff --git a/ges/ges-simple-layer.h b/ges/ges-simple-layer.h deleted file mode 100644 index 54ffec73..00000000 --- a/ges/ges-simple-layer.h +++ /dev/null @@ -1,101 +0,0 @@ -/* GStreamer Editing Services - * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk> - * 2009 Nokia Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GES_SIMPLE_LAYER -#define _GES_SIMPLE_LAYER - -#include <glib-object.h> -#include <ges/ges-types.h> -#include <ges/ges-layer.h> - -G_BEGIN_DECLS - -#define GES_TYPE_SIMPLE_LAYER ges_simple_layer_get_type() - -#define GES_SIMPLE_LAYER(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_SIMPLE_LAYER, GESSimpleLayer)) - -#define GES_SIMPLE_LAYER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_SIMPLE_LAYER, GESSimpleLayerClass)) - -#define GES_IS_SIMPLE_LAYER(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_SIMPLE_LAYER)) - -#define GES_IS_SIMPLE_LAYER_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_SIMPLE_LAYER)) - -#define GES_SIMPLE_LAYER_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_SIMPLE_LAYER, GESSimpleLayerClass)) - -typedef struct _GESSimpleLayerPrivate GESSimpleLayerPrivate; - -/** - * GESSimpleLayer: - */ - -struct _GESSimpleLayer { - /*< private >*/ - GESLayer parent; - - GESSimpleLayerPrivate *priv; - - /* Padding for API extension */ - gpointer _ges_reserved[GES_PADDING]; -}; - -struct _GESSimpleLayerClass { - /*< private >*/ - GESLayerClass parent_class; - - /*< signals >*/ - void (*object_moved) (GESLayer * layer, GESClip * object, - gint old_position, gint new_position); - - /* Padding for API extension */ - gpointer _ges_reserved[GES_PADDING]; -}; - -GType ges_simple_layer_get_type (void); - -GESSimpleLayer* ges_simple_layer_new (void); - -gboolean -ges_simple_layer_add_object (GESSimpleLayer *layer, - GESClip *object, gint position); - -gboolean -ges_simple_layer_move_object (GESSimpleLayer *layer, - GESClip *clip, gint newposition); - -gboolean -ges_simple_layer_is_valid (GESSimpleLayer *layer); - -GESClip * -ges_simple_layer_nth (GESSimpleLayer *layer, - gint position); - -gint -ges_simple_layer_index (GESSimpleLayer *layer, - GESClip *clip); - -G_END_DECLS - -#endif /* _GES_SIMPLE_LAYER */ - diff --git a/ges/ges-transition-clip.c b/ges/ges-transition-clip.c index 53124217..d6e64d01 100644 --- a/ges/ges-transition-clip.c +++ b/ges/ges-transition-clip.c @@ -32,10 +32,6 @@ * property. The default value is "crossfade". For audio, only "crossfade" is * supported. * - * #GESSimpleLayer will automatically manage the priorities of sources - * and transitions. If you use #GESTransitionClips in another type of - * #GESLayer, you will need to manage priorities yourself. - * * The ID of the ExtractableType is the nickname of the vtype property value. Note * that this value can be changed after creation and the GESExtractable.asset value * will be updated when needed. @@ -28,7 +28,6 @@ #include <ges/ges-timeline.h> #include <ges/ges-layer.h> -#include <ges/ges-simple-layer.h> #include <ges/ges-timeline-element.h> #include <ges/ges-clip.h> #include <ges/ges-pipeline.h> diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index cd0f11ac..dfab0962 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -33,7 +33,6 @@ check_PROGRAMS = \ ges/layer \ ges/effects \ ges/uriclip \ - ges/simplelayer \ ges/clip \ ges/timelineedition \ ges/titles\ diff --git a/tests/check/ges/backgroundsource.c b/tests/check/ges/backgroundsource.c index e55e1e39..00ab43dc 100644 --- a/tests/check/ges/backgroundsource.c +++ b/tests/check/ges/backgroundsource.c @@ -132,7 +132,7 @@ GST_START_TEST (test_test_source_in_layer) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); a = GES_TRACK (ges_audio_track_new ()); v = GES_TRACK (ges_video_track_new ()); @@ -146,7 +146,7 @@ GST_START_TEST (test_test_source_in_layer) g_object_set (source, "duration", (guint64) GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) layer, (GESClip *) source, 0); + ges_layer_add_clip (layer, (GESClip *) source); /* specifically test the vpattern property */ g_object_set (source, "vpattern", (gint) GES_VIDEO_TEST_PATTERN_WHITE, NULL); diff --git a/tests/check/ges/effects.c b/tests/check/ges/effects.c index 3bfbff92..f9570c60 100644 --- a/tests/check/ges/effects.c +++ b/tests/check/ges/effects.c @@ -49,7 +49,7 @@ GST_START_TEST (test_add_effect_to_clip) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); track_audio = GES_TRACK (ges_audio_track_new ()); track_video = GES_TRACK (ges_video_track_new ()); @@ -61,8 +61,7 @@ GST_START_TEST (test_add_effect_to_clip) g_object_set (source, "duration", 10 * GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) (layer), - (GESClip *) source, 0); + ges_layer_add_clip (layer, (GESClip *) source); GST_DEBUG ("Create effect"); @@ -97,7 +96,7 @@ GST_START_TEST (test_get_effects_from_tl) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_layer_new (); + layer = ges_layer_new (); track_video = GES_TRACK (ges_video_track_new ()); ges_timeline_add_track (timeline, track_video); @@ -186,7 +185,7 @@ GST_START_TEST (test_effect_clip) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); track_audio = GES_TRACK (ges_audio_track_new ()); track_video = GES_TRACK (ges_video_track_new ()); @@ -199,8 +198,7 @@ GST_START_TEST (test_effect_clip) g_object_set (effect_clip, "duration", 25 * GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) (layer), - (GESClip *) effect_clip, 0); + ges_layer_add_clip (layer, (GESClip *) effect_clip); effect = ges_effect_new ("agingtv"); fail_unless (ges_container_add (GES_CONTAINER (effect_clip), @@ -366,7 +364,7 @@ GST_START_TEST (test_effect_set_properties) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); track_video = GES_TRACK (ges_video_track_new ()); ges_timeline_add_track (timeline, track_video); @@ -377,8 +375,7 @@ GST_START_TEST (test_effect_set_properties) g_object_set (effect_clip, "duration", 25 * GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) (layer), - (GESClip *) effect_clip, 0); + ges_layer_add_clip (layer, (GESClip *) effect_clip); effect = GES_TRACK_ELEMENT (ges_effect_new ("agingtv")); fail_unless (ges_container_add (GES_CONTAINER (effect_clip), @@ -454,7 +451,7 @@ GST_START_TEST (test_clip_signals) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); track_video = GES_TRACK (ges_video_track_new ()); ges_timeline_add_track (timeline, track_video); @@ -467,8 +464,7 @@ GST_START_TEST (test_clip_signals) g_object_set (effect_clip, "duration", 25 * GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) (layer), - (GESClip *) effect_clip, 0); + ges_layer_add_clip (layer, (GESClip *) effect_clip); effect = ges_effect_new ("agingtv"); fail_unless (ges_container_add (GES_CONTAINER (effect_clip), diff --git a/tests/check/ges/overlays.c b/tests/check/ges/overlays.c index e47d22e7..904ef8bf 100644 --- a/tests/check/ges/overlays.c +++ b/tests/check/ges/overlays.c @@ -121,7 +121,7 @@ GST_START_TEST (test_overlay_in_layer) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = (GESLayer *) ges_layer_new (); a = GES_TRACK (ges_audio_track_new ()); v = GES_TRACK (ges_video_track_new ()); @@ -133,7 +133,7 @@ GST_START_TEST (test_overlay_in_layer) g_object_set (source, "duration", (guint64) GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) layer, (GESClip *) source, 0); + ges_layer_add_clip (layer, (GESClip *) source); /* specifically test the text property */ g_object_set (source, "text", (gchar *) "some text", NULL); diff --git a/tests/check/ges/simplelayer.c b/tests/check/ges/simplelayer.c deleted file mode 100644 index 67b87148..00000000 --- a/tests/check/ges/simplelayer.c +++ /dev/null @@ -1,454 +0,0 @@ -/* GStreamer Editing Services - * Copyright (C) 2009 Edward Hervey <bilboed@bilboed.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "test-utils.h" -#include <ges/ges.h> -#include <gst/check/gstcheck.h> - -GST_START_TEST (test_gsl_add) -{ - GESTimeline *timeline; - GESLayer *layer; - GESTrack *track; - GESTestClip *source; - GESClip *source2; - gint result; - - ges_init (); - /* This is the simplest scenario ever */ - - /* Timeline and 1 Layer */ - timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); - fail_unless (ges_timeline_add_layer (timeline, layer)); - track = GES_TRACK (ges_video_track_new ()); - fail_unless (ges_timeline_add_track (timeline, track)); - - source = ges_test_clip_new (); - fail_unless (source != NULL); - g_object_set (source, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source), GST_SECOND); - fail_unless_equals_uint64 (_START (source), 42); - - fail_unless (ges_simple_layer_add_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source), -1)); - fail_unless (ges_clip_get_layer (GES_CLIP (source)) == layer); - fail_unless_equals_uint64 (_DURATION (source), GST_SECOND); - fail_unless_equals_uint64 (_START (source), 0); - - /* test nth */ - source2 = ges_simple_layer_nth ((GESSimpleLayer *) layer, -1); - fail_if (source2); - source2 = ges_simple_layer_nth ((GESSimpleLayer *) layer, 2); - fail_if (source2); - source2 = ges_simple_layer_nth ((GESSimpleLayer *) layer, 0); - fail_unless ((GESClip *) source == source2); - - /* test position */ - - result = ges_simple_layer_index ((GESSimpleLayer *) layer, source2); - fail_unless_equals_int (result, 0); - result = ges_simple_layer_index ((GESSimpleLayer *) layer, (GESClip *) NULL); - fail_unless_equals_int (result, -1); - - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source))); - fail_unless (ges_timeline_remove_track (timeline, track)); - fail_unless (ges_timeline_remove_layer (timeline, layer)); - gst_object_unref (timeline); -} - -GST_END_TEST; - -typedef struct -{ - gint new; - gint old; -} siginfo; - -static void -object_moved_cb (GESSimpleLayer * layer, - GESClip * clip, gint old, gint new, gpointer user) -{ - siginfo *info; - info = (siginfo *) user; - info->new = new; - info->old = old; -} - -GST_START_TEST (test_gsl_move_simple) -{ - GESTimeline *timeline; - GESLayer *layer; - GESTrack *track; - GESTestClip *source1, *source2; - siginfo info = { 0, 0 }; - - ges_init (); - - /* Timeline and 1 Layer */ - timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); - fail_unless (ges_timeline_add_layer (timeline, layer)); - track = ges_track_new (GES_TRACK_TYPE_CUSTOM, gst_caps_new_any ()); - fail_unless (ges_timeline_add_track (timeline, track)); - g_signal_connect (G_OBJECT (layer), "object-moved", G_CALLBACK - (object_moved_cb), &info); - - /* Create two 1s sources */ - source1 = ges_test_clip_new (); - g_object_set (source1, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - source2 = ges_test_clip_new (); - g_object_set (source2, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - - /* Add source to any position */ - GST_DEBUG ("Adding the source to the timeline layer"); - fail_unless (ges_simple_layer_add_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source1), -1)); - fail_unless_equals_uint64 (_START (source1), 0); - - /* Add source2 to the end */ - GST_DEBUG ("Adding the source to the timeline layer"); - fail_unless (ges_simple_layer_add_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source2), -1)); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_START (source2), GST_SECOND); - - /* Move source2 before source 1 (newpos:0) */ - fail_unless (ges_simple_layer_move_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source2), 0)); - fail_unless_equals_uint64 (_START (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), 0); - fail_unless_equals_int (info.new, 0); - fail_unless_equals_int (info.old, 1); - - /* Move source2 after source 1 (newpos:0) */ - fail_unless (ges_simple_layer_move_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source2), 1)); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_START (source2), GST_SECOND); - fail_unless_equals_int (info.new, 1); - fail_unless_equals_int (info.old, 0); - - /* Move source1 to end (newpos:-1) */ - fail_unless (ges_simple_layer_move_object (GES_SIMPLE_LAYER - (layer), GES_CLIP (source1), -1)); - fail_unless_equals_uint64 (_START (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), 0); - /* position will be decremented, this is expected */ - fail_unless_equals_int (info.new, -1); - fail_unless_equals_int (info.old, 0); - - /* remove source1, source2 should be moved to the beginning */ - gst_object_ref (source1); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source1))); - fail_unless_equals_uint64 (_START (source2), 0); - - g_object_set (source1, "start", (guint64) 42, NULL); - - /* re-add source1... using the normal API, it should be added to the end */ - fail_unless (ges_layer_add_clip (layer, GES_CLIP (source1))); - fail_unless_equals_uint64 (_START (source2), 0); - fail_unless_equals_uint64 (_START (source1), GST_SECOND); - - /* remove source1 ... */ - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source1))); - fail_unless_equals_uint64 (_START (source2), 0); - /* ... and source2 */ - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source2))); - - fail_unless (ges_timeline_remove_track (timeline, track)); - fail_unless (ges_timeline_remove_layer (timeline, layer)); - gst_object_unref (timeline); -} - -GST_END_TEST; - -static void -valid_notify_cb (GObject * obj, GParamSpec * unused G_GNUC_UNUSED, gint * count) -{ - (*count)++; -} - -GST_START_TEST (test_gsl_with_transitions) -{ - GESTimeline *timeline; - GESLayer *layer; - GESTrack *track; - GESTestClip *source1, *source2, *source3, *source4; - GESTransitionClip *tr1, *tr2, *tr3, *tr4, *tr5; - GESSimpleLayer *gstl; - gboolean valid; - gint count = 0; - - ges_init (); - - /* Timeline and 1 Layer */ - timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); - - g_signal_connect (G_OBJECT (layer), "notify::valid", - G_CALLBACK (valid_notify_cb), &count); - - fail_unless (ges_timeline_add_layer (timeline, layer)); - ges_layer_set_priority (layer, 0); - - track = ges_track_new (GES_TRACK_TYPE_VIDEO, gst_caps_new_any ()); - fail_unless (ges_timeline_add_track (timeline, track)); - - track = ges_track_new (GES_TRACK_TYPE_AUDIO, gst_caps_new_any ()); - fail_unless (ges_timeline_add_track (timeline, track)); - - - /* Create four 1s sources */ - source1 = ges_test_clip_new (); - g_object_set (source1, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - - /* make this source taller than the others, so we can check that - * gstlrecalculate handles this properly */ - - source2 = ges_test_clip_new (); - g_object_set (source2, "duration", GST_SECOND, "start", (guint64) 42, NULL); - - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - source3 = ges_test_clip_new (); - g_object_set (source3, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source3), GST_SECOND); - - source4 = ges_test_clip_new (); - g_object_set (source4, "duration", GST_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (source4), GST_SECOND); - - /* create half-second transitions */ - -#define HALF_SECOND ((guint64) (0.5 * GST_SECOND)) -#define SECOND(a) ((guint64) (a * GST_SECOND)) - - tr1 = ges_transition_clip_new (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE); - g_object_set (tr1, "duration", HALF_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - - tr2 = ges_transition_clip_new (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE); - g_object_set (tr2, "duration", HALF_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (tr2), HALF_SECOND); - - tr3 = ges_transition_clip_new (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE); - g_object_set (tr3, "duration", HALF_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (tr3), HALF_SECOND); - - tr4 = ges_transition_clip_new (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE); - g_object_set (tr4, "duration", HALF_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (tr4), HALF_SECOND); - - tr5 = ges_transition_clip_new (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE); - g_object_set (tr5, "duration", HALF_SECOND, "start", (guint64) 42, NULL); - fail_unless_equals_uint64 (_DURATION (tr5), HALF_SECOND); - - /* simple test scenario with several sources in layer */ - /* [0 0.5 1 1.5 2 2.5 3] */ - /* 0 */ - /* 1 [1-tr1--] */ - /* 2 [0--source1----][3-tr2--] */ - /* 3 [2---source2-----] */ - /* 4 [4---source3---] */ - /* 5 [5---source4-----] */ - - - gstl = GES_SIMPLE_LAYER (layer); - - /* add objects in sequence */ - - GST_DEBUG ("Adding source1"); - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (source1), -1)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - - GST_DEBUG ("Adding tr1"); - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (tr1), -1)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr1), 1); - - GST_DEBUG ("Adding source2"); - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (source2), -1)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr1), 1); - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source2), 3); - - /* add the third source before the second transition */ - - GST_DEBUG ("Adding source3"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (source3), -1)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr1), 1); - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source2), 3); - fail_unless_equals_uint64 (_DURATION (source3), GST_SECOND); - fail_unless_equals_uint64 (_START (source3), SECOND (1.5)); - fail_unless_equals_uint64 (_PRIORITY (source3), 4); - - /* now add the second transition */ - - GST_DEBUG ("Adding tr2"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (tr2), 3)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr1), 1); - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source2), 3); - fail_unless_equals_uint64 (_DURATION (tr2), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr2), GST_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr2), 2); - fail_unless_equals_uint64 (_DURATION (source3), GST_SECOND); - fail_unless_equals_uint64 (_START (source3), GST_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source3), 4); - - /* fourth source */ - - GST_DEBUG ("Adding source4"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (source4), -1)); - fail_unless_equals_uint64 (_DURATION (source1), GST_SECOND); - fail_unless_equals_uint64 (_START (source1), 0); - fail_unless_equals_uint64 (_PRIORITY (source1), 2); - fail_unless_equals_uint64 (_DURATION (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr1), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr1), 1); - fail_unless_equals_uint64 (_DURATION (source2), GST_SECOND); - fail_unless_equals_uint64 (_START (source2), HALF_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source2), 3); - fail_unless_equals_uint64 (_DURATION (tr2), HALF_SECOND); - fail_unless_equals_uint64 (_START (tr2), GST_SECOND); - fail_unless_equals_uint64 (_PRIORITY (tr2), 2); - fail_unless_equals_uint64 (_DURATION (source3), GST_SECOND); - fail_unless_equals_uint64 (_START (source3), GST_SECOND); - fail_unless_equals_uint64 (_PRIORITY (source3), 4); - fail_unless_equals_uint64 (_DURATION (source4), GST_SECOND); - fail_unless_equals_uint64 (_START (source4), SECOND (2)); - fail_unless_equals_uint64 (_PRIORITY (source4), 5); - - /* check that any insertion which might result in two adjacent transitions - * will fail */ - - GST_DEBUG ("Checking wrong insertion of tr3"); - - fail_if (ges_simple_layer_add_object (gstl, GES_CLIP (tr3), 1)); - - fail_if (ges_simple_layer_add_object (gstl, GES_CLIP (tr3), 2)); - - fail_if (ges_simple_layer_add_object (gstl, GES_CLIP (tr3), 3)); - - fail_if (ges_simple_layer_add_object (gstl, GES_CLIP (tr3), 4)); - - /* check that insertions which don't cause problems still work */ - - GST_DEBUG ("Checking correct insertion of tr3"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (tr3), 5)); - - /* at this point the layer should still be valid */ - g_object_get (G_OBJECT (layer), "valid", &valid, NULL); - fail_unless (valid); - fail_unless_equals_int (count, 3); - - GST_DEBUG ("Checking correct insertion of tr4"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (tr4), -1)); - - GST_DEBUG ("Checking correct insertion of tr5"); - - fail_unless (ges_simple_layer_add_object (gstl, GES_CLIP (tr5), 0)); - - /* removals which result in two or more adjacent transitions will also - * print a warning on the console. This is expected */ - - GST_DEBUG ("Removing source1"); - - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source1))); - - /* layer should now be invalid */ - - g_object_get (G_OBJECT (layer), "valid", &valid, NULL); - fail_unless (!valid); - fail_unless_equals_int (count, 4); - - GST_DEBUG ("Removing source2/3/4"); - - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source2))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source3))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (source4))); - - g_object_get (G_OBJECT (layer), "valid", &valid, NULL); - fail_unless (!valid); - fail_unless_equals_int (count, 4); - - GST_DEBUG ("Removing transitions"); - - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (tr1))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (tr2))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (tr3))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (tr4))); - fail_unless (ges_layer_remove_clip (layer, GES_CLIP (tr5))); - - GST_DEBUG ("done removing transition"); - - gst_object_unref (timeline); -} - -GST_END_TEST; - -static Suite * -ges_suite (void) -{ - Suite *s = suite_create ("ges-simple-layer"); - TCase *tc_chain = tcase_create ("basic"); - - suite_add_tcase (s, tc_chain); - - tcase_add_test (tc_chain, test_gsl_add); - tcase_add_test (tc_chain, test_gsl_move_simple); - tcase_add_test (tc_chain, test_gsl_with_transitions); - - return s; -} - -GST_CHECK_MAIN (ges); diff --git a/tests/check/ges/text_properties.c b/tests/check/ges/text_properties.c index d35ef5c1..a63715d2 100644 --- a/tests/check/ges/text_properties.c +++ b/tests/check/ges/text_properties.c @@ -34,7 +34,7 @@ GST_START_TEST (test_text_properties_in_layer) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); a = GES_TRACK (ges_audio_track_new ()); v = GES_TRACK (ges_video_track_new ()); @@ -46,7 +46,7 @@ GST_START_TEST (test_text_properties_in_layer) g_object_set (source, "duration", (guint64) GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) layer, (GESClip *) source, 0); + ges_layer_add_clip (layer, (GESClip *) source); track_element = ges_clip_find_track_element (GES_CLIP (source), v, GES_TYPE_TEXT_OVERLAY); diff --git a/tests/check/ges/titles.c b/tests/check/ges/titles.c index f71d87a4..e0db67c0 100644 --- a/tests/check/ges/titles.c +++ b/tests/check/ges/titles.c @@ -121,7 +121,7 @@ GST_START_TEST (test_title_source_in_layer) ges_init (); timeline = create_timeline_sync (FALSE); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); a = GES_TRACK (ges_audio_track_new ()); v = GES_TRACK (ges_video_track_new ()); @@ -133,7 +133,7 @@ GST_START_TEST (test_title_source_in_layer) g_object_set (source, "duration", (guint64) GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) layer, (GESClip *) source, 0); + ges_layer_add_clip (layer, (GESClip *) source); /* specifically test the text property */ g_object_set (source, "text", (gchar *) "some text", NULL); diff --git a/tests/examples/concatenate.c b/tests/examples/concatenate.c index 622f7973..307c2fa7 100644 --- a/tests/examples/concatenate.c +++ b/tests/examples/concatenate.c @@ -86,7 +86,7 @@ main (int argc, char **argv) timeline = ges_timeline_new_audio_video (); - layer = (GESLayer *) ges_simple_layer_new (); + layer = (GESLayer *) ges_layer_new (); if (!ges_timeline_add_layer (timeline, layer)) return -1; diff --git a/tests/examples/ges-ui.c b/tests/examples/ges-ui.c index 8417e22a..c0280dfd 100644 --- a/tests/examples/ges-ui.c +++ b/tests/examples/ges-ui.c @@ -203,11 +203,7 @@ update_move_up_down_sensitivity (App * app) static void update_play_sensitivity (App * app) { - gboolean valid; - - g_object_get (app->layer, "valid", &valid, NULL); - - gtk_action_set_sensitive (app->play, (app->n_objects && valid)); + gtk_action_set_sensitive (app->play, app->n_objects); } /* Backend callbacks ********************************************************/ @@ -744,9 +740,9 @@ get_video_patterns (void) static void layer_added_cb (GESTimeline * timeline, GESLayer * layer, App * app) { - if (!GES_IS_SIMPLE_LAYER (layer)) { + if (!GES_IS_LAYER (layer)) { GST_ERROR ("This timeline contains a layer type other than " - "GESSimpleLayer. Timeline editing disabled"); + "GESLayer. Timeline editing disabled"); return; } @@ -1054,18 +1050,7 @@ app_delete_objects (App * app, GList * objects) static void app_move_selected_up (App * app) { - GList *objects, *tmp; - gint pos; - - objects = ges_layer_get_clips (app->layer); - pos = g_list_index (objects, app->selected_objects->data); - - ges_simple_layer_move_object (GES_SIMPLE_LAYER (app->layer), - GES_CLIP (app->selected_objects->data), pos - 1); - - for (tmp = objects; tmp; tmp = tmp->next) { - gst_object_unref (tmp->data); - } + GST_FIXME ("This function is not implement, please implement it :)"); } static void @@ -1123,18 +1108,7 @@ on_apply_effect_cb (GtkButton * button, App * app) static void app_move_selected_down (App * app) { - GList *objects, *tmp; - gint pos; - - objects = ges_layer_get_clips (app->layer); - pos = g_list_index (objects, app->selected_objects->data); - - ges_simple_layer_move_object (GES_SIMPLE_LAYER (app->layer), - GES_CLIP (app->selected_objects->data), pos - 1); - - for (tmp = objects; tmp; tmp = tmp->next) { - gst_object_unref (tmp->data); - } + GST_FIXME ("This function is not implement, please implement it :)"); } static void @@ -1145,8 +1119,10 @@ app_add_file (App * app, gchar * uri) GST_DEBUG ("adding file %s", uri); clip = GES_CLIP (ges_uri_clip_new (uri)); + ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (clip), + ges_layer_get_duration (app->layer)); - ges_simple_layer_add_object (GES_SIMPLE_LAYER (app->layer), clip, -1); + ges_layer_add_clip (app->layer, clip); } static void @@ -1184,9 +1160,9 @@ app_add_title (App * app) GST_DEBUG ("adding title"); clip = GES_CLIP (ges_title_clip_new ()); - g_object_set (G_OBJECT (clip), "duration", GST_SECOND, NULL); - - ges_simple_layer_add_object (GES_SIMPLE_LAYER (app->layer), clip, -1); + g_object_set (G_OBJECT (clip), "duration", GST_SECOND, + "start", ges_layer_get_duration (app->layer), NULL); + ges_layer_add_clip (app->layer, clip); } static void @@ -1197,23 +1173,16 @@ app_add_test (App * app) GST_DEBUG ("adding test"); clip = GES_CLIP (ges_test_clip_new ()); - g_object_set (G_OBJECT (clip), "duration", GST_SECOND, NULL); + g_object_set (G_OBJECT (clip), "duration", GST_SECOND, + "start", ges_layer_get_duration (app->layer), NULL); - ges_simple_layer_add_object (GES_SIMPLE_LAYER (app->layer), clip, -1); + ges_layer_add_clip (app->layer, clip); } static void app_add_transition (App * app) { - GESClip *clip; - - GST_DEBUG ("adding transition"); - - clip = GES_CLIP (ges_transition_clip_new - (GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE)); - g_object_set (G_OBJECT (clip), "duration", GST_SECOND, NULL); - - ges_simple_layer_add_object (GES_SIMPLE_LAYER (app->layer), clip, -1); + GST_FIXME ("This function is not implement, please implement it :)"); } static void @@ -1334,7 +1303,7 @@ app_new (void) if (!(ges_timeline_add_track (ret->timeline, v))) goto fail; - if (!(ret->layer = (GESLayer *) ges_simple_layer_new ())) + if (!(ret->layer = ges_layer_new ())) goto fail; if (!(ges_timeline_add_layer (ret->timeline, ret->layer))) diff --git a/tests/examples/simple1.c b/tests/examples/simple1.c index 940a8ff1..b1790b0f 100644 --- a/tests/examples/simple1.c +++ b/tests/examples/simple1.c @@ -76,8 +76,8 @@ main (int argc, gchar ** argv) tracka = GES_TRACK (ges_audio_track_new ()); trackv = GES_TRACK (ges_video_track_new ()); - layer1 = (GESLayer *) ges_simple_layer_new (); - layer2 = (GESLayer *) ges_simple_layer_new (); + layer1 = ges_layer_new (); + layer2 = ges_layer_new (); g_object_set (layer2, "priority", 1, NULL); if (!ges_timeline_add_layer (timeline, layer1) || @@ -92,7 +92,7 @@ main (int argc, gchar ** argv) /* Add the main audio/video file */ src = ges_uri_clip_new (uri); g_free (uri); - g_object_set (src, "in-point", inpoint * GST_SECOND, + g_object_set (src, "start", 0, "in-point", inpoint * GST_SECOND, "duration", duration * GST_SECOND, "mute", mute, NULL); ges_layer_add_clip (layer1, GES_CLIP (src)); } diff --git a/tests/examples/test3.c b/tests/examples/test3.c index ab26c89d..fecd27b2 100644 --- a/tests/examples/test3.c +++ b/tests/examples/test3.c @@ -49,7 +49,7 @@ main (int argc, gchar ** argv) tracka = GES_TRACK (ges_audio_track_new ()); /* We are only going to be doing one layer of clips */ - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); /* Add the tracks and the layer to the timeline */ if (!ges_timeline_add_layer (timeline, layer)) @@ -67,9 +67,8 @@ main (int argc, gchar ** argv) g_assert (src); g_free (uri); - g_object_set (src, "duration", GST_SECOND, NULL); - /* Since we're using a GESSimpleLayer, objects will be automatically - * appended to the end of the layer */ + g_object_set (src, "start", ges_layer_get_duration (layer), + "duration", GST_SECOND, NULL); ges_layer_add_clip (layer, (GESClip *) src); } diff --git a/tests/examples/test4.c b/tests/examples/test4.c index 72de0c7e..595545df 100644 --- a/tests/examples/test4.c +++ b/tests/examples/test4.c @@ -104,7 +104,7 @@ main (int argc, gchar ** argv) tracka = GES_TRACK (ges_audio_track_new ()); /* We are only going to be doing one layer of clips */ - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); /* Add the tracks and the layer to the timeline */ if (!ges_timeline_add_layer (timeline, layer)) @@ -122,7 +122,8 @@ main (int argc, gchar ** argv) g_assert (src); g_free (uri); - g_object_set (src, "duration", GST_SECOND, NULL); + g_object_set (src, "start", ges_layer_get_duration (layer), + "duration", GST_SECOND, NULL); /* Since we're using a GESSimpleLayer, objects will be automatically * appended to the end of the layer */ ges_layer_add_clip (layer, (GESClip *) src); diff --git a/tests/examples/thumbnails.c b/tests/examples/thumbnails.c index 7ea8f744..ba454fb4 100644 --- a/tests/examples/thumbnails.c +++ b/tests/examples/thumbnails.c @@ -83,7 +83,7 @@ create_timeline (void) tracka = GES_TRACK (ges_audio_track_new ()); trackv = GES_TRACK (ges_video_track_new ()); - layer = (GESLayer *) ges_simple_layer_new (); + layer = ges_layer_new (); /* Add the tracks and the layer to the timeline */ if (!ges_timeline_add_layer (timeline, layer) || @@ -95,9 +95,9 @@ create_timeline (void) src = GES_CLIP (ges_test_clip_new ()); g_object_set (src, "vpattern", GES_VIDEO_TEST_PATTERN_SNOW, - "duration", 10 * GST_SECOND, NULL); + "start", 0, "duration", 10 * GST_SECOND, NULL); - ges_simple_layer_add_object ((GESSimpleLayer *) layer, GES_CLIP (src), 0); + ges_layer_add_clip (layer, GES_CLIP (src)); pipeline = ges_pipeline_new (); diff --git a/tools/ges-launch.c b/tools/ges-launch.c index b857d025..9810a978 100644 --- a/tools/ges-launch.c +++ b/tools/ges-launch.c @@ -178,7 +178,7 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri) return timeline; /* We are only going to be doing one layer of clips */ - layer = (GESLayer *) ges_simple_layer_new (); + layer = (GESLayer *) ges_layer_new (); /* Add the tracks and the layer to the timeline */ if (!ges_timeline_add_layer (timeline, layer)) @@ -287,8 +287,8 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri) g_free (uri); } - /* Since we're using a GESSimpleLayer, objects will be automatically - * appended to the end of the layer */ + g_object_set (G_OBJECT (clip), "start", ges_layer_get_duration (layer), + NULL); ges_layer_add_clip (layer, clip); } |