mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 15:18:21 +00:00
Add a notion of 'name' in GESTimelineElement
https://bugzilla.gnome.org/show_bug.cgi?id=729382
This commit is contained in:
parent
3197a02487
commit
1adb9a0030
13 changed files with 356 additions and 109 deletions
|
@ -369,6 +369,7 @@ ges_timeline_get_auto_transition
|
||||||
ges_timeline_set_auto_transition
|
ges_timeline_set_auto_transition
|
||||||
ges_timeline_get_snapping_distance
|
ges_timeline_get_snapping_distance
|
||||||
ges_timeline_set_snapping_distance
|
ges_timeline_set_snapping_distance
|
||||||
|
ges_timeline_get_element
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GESTimelinePrivate
|
GESTimelinePrivate
|
||||||
GESTimelineClass
|
GESTimelineClass
|
||||||
|
@ -441,6 +442,8 @@ ges_timeline_element_roll_end
|
||||||
ges_timeline_element_trim
|
ges_timeline_element_trim
|
||||||
ges_timeline_element_get_toplevel_parent
|
ges_timeline_element_get_toplevel_parent
|
||||||
ges_timeline_element_copy
|
ges_timeline_element_copy
|
||||||
|
ges_timeline_element_get_name
|
||||||
|
ges_timeline_element_set_name
|
||||||
GES_TIMELINE_ELEMENT_PARENT
|
GES_TIMELINE_ELEMENT_PARENT
|
||||||
GES_TIMELINE_ELEMENT_TIMELINE
|
GES_TIMELINE_ELEMENT_TIMELINE
|
||||||
GES_TIMELINE_ELEMENT_START
|
GES_TIMELINE_ELEMENT_START
|
||||||
|
@ -449,6 +452,7 @@ GES_TIMELINE_ELEMENT_INPOINT
|
||||||
GES_TIMELINE_ELEMENT_DURATION
|
GES_TIMELINE_ELEMENT_DURATION
|
||||||
GES_TIMELINE_ELEMENT_MAX_DURATION
|
GES_TIMELINE_ELEMENT_MAX_DURATION
|
||||||
GES_TIMELINE_ELEMENT_PRIORITY
|
GES_TIMELINE_ELEMENT_PRIORITY
|
||||||
|
GES_TIMELINE_ELEMENT_NAME
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GESTimelineElementPrivate
|
GESTimelineElementPrivate
|
||||||
ges_timeline_element_get_type
|
ges_timeline_element_get_type
|
||||||
|
|
|
@ -91,6 +91,15 @@ void
|
||||||
timeline_remove_group (GESTimeline *timeline,
|
timeline_remove_group (GESTimeline *timeline,
|
||||||
GESGroup *group);
|
GESGroup *group);
|
||||||
|
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
gboolean
|
||||||
|
timeline_add_element (GESTimeline *timeline,
|
||||||
|
GESTimelineElement *element);
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
gboolean
|
||||||
|
timeline_remove_element (GESTimeline *timeline,
|
||||||
|
GESTimelineElement *element);
|
||||||
|
|
||||||
G_GNUC_INTERNAL void
|
G_GNUC_INTERNAL void
|
||||||
ges_asset_cache_init (void);
|
ges_asset_cache_init (void);
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
#include "ges-extractable.h"
|
#include "ges-extractable.h"
|
||||||
#include "ges-meta-container.h"
|
#include "ges-meta-container.h"
|
||||||
#include "ges-internal.h"
|
#include "ges-internal.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* maps type name quark => count */
|
||||||
|
static GData *object_name_counts = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
extractable_set_asset (GESExtractable * extractable, GESAsset * asset)
|
extractable_set_asset (GESExtractable * extractable, GESAsset * asset)
|
||||||
|
@ -58,6 +62,7 @@ enum
|
||||||
PROP_DURATION,
|
PROP_DURATION,
|
||||||
PROP_MAX_DURATION,
|
PROP_MAX_DURATION,
|
||||||
PROP_PRIORITY,
|
PROP_PRIORITY,
|
||||||
|
PROP_NAME,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -96,6 +101,9 @@ _get_property (GObject * object, guint property_id,
|
||||||
case PROP_PRIORITY:
|
case PROP_PRIORITY:
|
||||||
g_value_set_uint (value, self->priority);
|
g_value_set_uint (value, self->priority);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NAME:
|
||||||
|
g_value_take_string (value, ges_timeline_element_get_name (self));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -129,23 +137,25 @@ _set_property (GObject * object, guint property_id,
|
||||||
case PROP_MAX_DURATION:
|
case PROP_MAX_DURATION:
|
||||||
ges_timeline_element_set_max_duration (self, g_value_get_uint64 (value));
|
ges_timeline_element_set_max_duration (self, g_value_get_uint64 (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_NAME:
|
||||||
|
ges_timeline_element_set_name (self, g_value_get_string (value));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, property_id, pspec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
ges_timeline_element_init (GESTimelineElement * ges_timeline_element)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ges_timeline_element_finalize (GObject * self)
|
ges_timeline_element_finalize (GObject * self)
|
||||||
{
|
{
|
||||||
G_OBJECT_CLASS (ges_timeline_element_parent_class)->finalize (self);
|
G_OBJECT_CLASS (ges_timeline_element_parent_class)->finalize (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ges_timeline_element_init (GESTimelineElement * ges_timeline_element)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ges_timeline_element_class_init (GESTimelineElementClass * klass)
|
ges_timeline_element_class_init (GESTimelineElementClass * klass)
|
||||||
{
|
{
|
||||||
|
@ -216,11 +226,20 @@ ges_timeline_element_class_init (GESTimelineElementClass * klass)
|
||||||
/**
|
/**
|
||||||
* GESTimelineElement:priority:
|
* GESTimelineElement:priority:
|
||||||
*
|
*
|
||||||
* The layer priority of the object.
|
* The priority of the object.
|
||||||
*/
|
*/
|
||||||
properties[PROP_PRIORITY] = g_param_spec_uint ("priority", "Priority",
|
properties[PROP_PRIORITY] = g_param_spec_uint ("priority", "Priority",
|
||||||
"The priority of the object", 0, G_MAXUINT, 0, G_PARAM_READWRITE);
|
"The priority of the object", 0, G_MAXUINT, 0, G_PARAM_READWRITE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GESTimelineElement:name:
|
||||||
|
*
|
||||||
|
* The name of the object
|
||||||
|
*/
|
||||||
|
properties[PROP_NAME] =
|
||||||
|
g_param_spec_string ("name", "Name", "The name of the timeline object",
|
||||||
|
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST, properties);
|
g_object_class_install_properties (object_class, PROP_LAST, properties);
|
||||||
|
|
||||||
object_class->finalize = ges_timeline_element_finalize;
|
object_class->finalize = ges_timeline_element_finalize;
|
||||||
|
@ -239,6 +258,55 @@ ges_timeline_element_class_init (GESTimelineElementClass * klass)
|
||||||
klass->trim = NULL;
|
klass->trim = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_name_default (GESTimelineElement * self)
|
||||||
|
{
|
||||||
|
const gchar *type_name;
|
||||||
|
gint count;
|
||||||
|
gchar *name;
|
||||||
|
GQuark q;
|
||||||
|
guint i, l;
|
||||||
|
|
||||||
|
if (!object_name_counts) {
|
||||||
|
g_datalist_init (&object_name_counts);
|
||||||
|
}
|
||||||
|
|
||||||
|
q = g_type_qname (G_OBJECT_TYPE (self));
|
||||||
|
count = GPOINTER_TO_INT (g_datalist_id_get_data (&object_name_counts, q));
|
||||||
|
g_datalist_id_set_data (&object_name_counts, q, GINT_TO_POINTER (count + 1));
|
||||||
|
|
||||||
|
/* GstFooSink -> foosink<N> */
|
||||||
|
type_name = g_quark_to_string (q);
|
||||||
|
if (strncmp (type_name, "GES", 3) == 0)
|
||||||
|
type_name += 3;
|
||||||
|
/* give the 20th "uriclip" element and the first "uriclip2" (if needed in the future)
|
||||||
|
* different names */
|
||||||
|
l = strlen (type_name);
|
||||||
|
if (l > 0 && g_ascii_isdigit (type_name[l - 1])) {
|
||||||
|
name = g_strdup_printf ("%s-%d", type_name, count);
|
||||||
|
} else {
|
||||||
|
name = g_strdup_printf ("%s%d", type_name, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = strlen (name);
|
||||||
|
for (i = 0; i < l; i++)
|
||||||
|
name[i] = g_ascii_tolower (name[i]);
|
||||||
|
|
||||||
|
g_free (self->name);
|
||||||
|
if (G_UNLIKELY (self->parent != NULL))
|
||||||
|
goto had_parent;
|
||||||
|
|
||||||
|
self->name = name;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
had_parent:
|
||||||
|
{
|
||||||
|
GST_WARNING ("parented objects can't be renamed");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* API implementation *
|
* API implementation *
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
@ -338,6 +406,16 @@ ges_timeline_element_set_timeline (GESTimelineElement * self,
|
||||||
if (timeline != NULL && G_UNLIKELY (self->timeline != NULL))
|
if (timeline != NULL && G_UNLIKELY (self->timeline != NULL))
|
||||||
goto had_timeline;
|
goto had_timeline;
|
||||||
|
|
||||||
|
if (timeline == NULL) {
|
||||||
|
if (self->timeline) {
|
||||||
|
if (!timeline_remove_element (self->timeline, self))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!timeline_add_element (timeline, self))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
self->timeline = timeline;
|
self->timeline = timeline;
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TIMELINE]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TIMELINE]);
|
||||||
|
@ -830,7 +908,10 @@ ges_timeline_element_copy (GESTimelineElement * self, gboolean deep)
|
||||||
n_params = 0;
|
n_params = 0;
|
||||||
|
|
||||||
for (n = 0; n < n_specs; ++n) {
|
for (n = 0; n < n_specs; ++n) {
|
||||||
|
/* We do not want the timeline or the name to be copied */
|
||||||
if (g_strcmp0 (specs[n]->name, "parent") &&
|
if (g_strcmp0 (specs[n]->name, "parent") &&
|
||||||
|
g_strcmp0 (specs[n]->name, "timeline") &&
|
||||||
|
g_strcmp0 (specs[n]->name, "name") &&
|
||||||
(specs[n]->flags & G_PARAM_READWRITE) == G_PARAM_READWRITE) {
|
(specs[n]->flags & G_PARAM_READWRITE) == G_PARAM_READWRITE) {
|
||||||
params[n_params].name = g_intern_string (specs[n]->name);
|
params[n_params].name = g_intern_string (specs[n]->name);
|
||||||
g_value_init (¶ms[n_params].value, specs[n]->value_type);
|
g_value_init (¶ms[n_params].value, specs[n]->value_type);
|
||||||
|
@ -880,3 +961,71 @@ ges_timeline_element_get_toplevel_parent (GESTimelineElement * self)
|
||||||
|
|
||||||
return gst_object_ref (toplevel);
|
return gst_object_ref (toplevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ges_timeline_element_get_name:
|
||||||
|
* @self: a #GESTimelineElement
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Returns a copy of the name of @self.
|
||||||
|
* Caller should g_free() the return value after usage.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): The name of @self
|
||||||
|
*/
|
||||||
|
gchar *
|
||||||
|
ges_timeline_element_get_name (GESTimelineElement * self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), NULL);
|
||||||
|
|
||||||
|
return g_strdup (self->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ges_timeline_element_set_name:
|
||||||
|
* @self: a #GESTimelineElement
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Sets the name of object, or gives @self a guaranteed unique name (if name is NULL).
|
||||||
|
* This function makes a copy of the provided name, so the caller retains ownership
|
||||||
|
* of the name it sent.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
ges_timeline_element_set_name (GESTimelineElement * self, const gchar * name)
|
||||||
|
{
|
||||||
|
gboolean result, readd_to_timeline = FALSE;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), FALSE);
|
||||||
|
|
||||||
|
/* parented objects cannot be renamed */
|
||||||
|
if (self->timeline != NULL) {
|
||||||
|
GESTimelineElement *tmp = ges_timeline_get_element (self->timeline, name);
|
||||||
|
|
||||||
|
if (tmp) {
|
||||||
|
gst_object_unref (tmp);
|
||||||
|
goto had_timeline;
|
||||||
|
}
|
||||||
|
|
||||||
|
timeline_remove_element (self->timeline, self);
|
||||||
|
readd_to_timeline = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name != NULL) {
|
||||||
|
g_free (self->name);
|
||||||
|
self->name = g_strdup (name);
|
||||||
|
result = TRUE;
|
||||||
|
} else {
|
||||||
|
result = _set_name_default (self);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (readd_to_timeline)
|
||||||
|
timeline_add_element (self->timeline, self);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
/* error */
|
||||||
|
had_timeline:
|
||||||
|
{
|
||||||
|
GST_WARNING ("Objects already in a timeline can't be renamed");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -100,6 +100,14 @@ typedef struct _GESTimelineElementPrivate GESTimelineElementPrivate;
|
||||||
*/
|
*/
|
||||||
#define GES_TIMELINE_ELEMENT_TIMELINE(obj) (((GESTimelineElement*)obj)->timeline)
|
#define GES_TIMELINE_ELEMENT_TIMELINE(obj) (((GESTimelineElement*)obj)->timeline)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GES_TIMELINE_ELEMENT_NAME:
|
||||||
|
* @obj: a #GESTimelineElement
|
||||||
|
*
|
||||||
|
* The name of the object.
|
||||||
|
*/
|
||||||
|
#define GES_TIMELINE_ELEMENT_NAME(obj) (((GESTimelineElement*)obj)->name)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GESTimelineElement:
|
* GESTimelineElement:
|
||||||
* @parent: The #GESTimelineElement that controls the object
|
* @parent: The #GESTimelineElement that controls the object
|
||||||
|
@ -128,6 +136,7 @@ struct _GESTimelineElement
|
||||||
GstClockTime maxduration;
|
GstClockTime maxduration;
|
||||||
guint32 priority;
|
guint32 priority;
|
||||||
GESTimeline *timeline;
|
GESTimeline *timeline;
|
||||||
|
gchar *name;
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GESTimelineElementPrivate *priv;
|
GESTimelineElementPrivate *priv;
|
||||||
|
@ -209,6 +218,8 @@ gboolean ges_timeline_element_roll_start (GESTimelineElement *self,
|
||||||
gboolean ges_timeline_element_roll_end (GESTimelineElement *self, GstClockTime end);
|
gboolean ges_timeline_element_roll_end (GESTimelineElement *self, GstClockTime end);
|
||||||
gboolean ges_timeline_element_trim (GESTimelineElement *self, GstClockTime start);
|
gboolean ges_timeline_element_trim (GESTimelineElement *self, GstClockTime start);
|
||||||
GESTimelineElement * ges_timeline_element_copy (GESTimelineElement *self, gboolean deep);
|
GESTimelineElement * ges_timeline_element_copy (GESTimelineElement *self, gboolean deep);
|
||||||
|
gchar * ges_timeline_element_get_name (GESTimelineElement *self);
|
||||||
|
gboolean ges_timeline_element_set_name (GESTimelineElement *self, const gchar *name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -187,6 +187,8 @@ struct _GESTimelinePrivate
|
||||||
GList *groups;
|
GList *groups;
|
||||||
|
|
||||||
guint group_id;
|
guint group_id;
|
||||||
|
|
||||||
|
GHashTable *all_elements;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* private structure to contain our track-related information */
|
/* private structure to contain our track-related information */
|
||||||
|
@ -557,6 +559,9 @@ ges_timeline_init (GESTimeline * self)
|
||||||
g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gst_object_unref);
|
g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gst_object_unref);
|
||||||
priv->needs_transitions_update = TRUE;
|
priv->needs_transitions_update = TRUE;
|
||||||
|
|
||||||
|
priv->all_elements =
|
||||||
|
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gst_object_unref);
|
||||||
|
|
||||||
priv->group_id = -1;
|
priv->group_id = -1;
|
||||||
|
|
||||||
g_signal_connect_after (self, "select-tracks-for-object",
|
g_signal_connect_after (self, "select-tracks-for-object",
|
||||||
|
@ -2387,6 +2392,27 @@ pad_removed_cb (GESTrack * track, GstPad * pad, TrackPrivate * tr_priv)
|
||||||
tr_priv->pad = NULL;
|
tr_priv->pad = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
timeline_add_element (GESTimeline * timeline, GESTimelineElement * element)
|
||||||
|
{
|
||||||
|
GST_DEBUG_OBJECT (timeline, "Adding element: %s", element->name);
|
||||||
|
if (g_hash_table_contains (timeline->priv->all_elements, element->name)) {
|
||||||
|
GST_WARNING_OBJECT (timeline, "Already in %s the timeline", element->name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_insert (timeline->priv->all_elements,
|
||||||
|
ges_timeline_element_get_name (element), gst_object_ref (element));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
timeline_remove_element (GESTimeline * timeline, GESTimelineElement * element)
|
||||||
|
{
|
||||||
|
return g_hash_table_remove (timeline->priv->all_elements, element->name);
|
||||||
|
}
|
||||||
|
|
||||||
/**** API *****/
|
/**** API *****/
|
||||||
/**
|
/**
|
||||||
* ges_timeline_new:
|
* ges_timeline_new:
|
||||||
|
@ -3027,3 +3053,27 @@ ges_timeline_set_snapping_distance (GESTimeline * timeline,
|
||||||
|
|
||||||
timeline->priv->snapping_distance = snapping_distance;
|
timeline->priv->snapping_distance = snapping_distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ges_timeline_get_element:
|
||||||
|
* @timeline: a #GESTimeline
|
||||||
|
*
|
||||||
|
* Gets a #GESTimelineElement contained in the timeline
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): The #GESTimelineElement or %NULL if
|
||||||
|
* not found.
|
||||||
|
*/
|
||||||
|
GESTimelineElement *
|
||||||
|
ges_timeline_get_element (GESTimeline * timeline, const gchar * name)
|
||||||
|
{
|
||||||
|
GESTimelineElement *ret;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GES_IS_TIMELINE (timeline), NULL);
|
||||||
|
|
||||||
|
ret = g_hash_table_lookup (timeline->priv->all_elements, name);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return gst_object_ref (ret);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ gboolean ges_timeline_get_auto_transition (GESTimeline * timeline);
|
||||||
void ges_timeline_set_auto_transition (GESTimeline * timeline, gboolean auto_transition);
|
void ges_timeline_set_auto_transition (GESTimeline * timeline, gboolean auto_transition);
|
||||||
GstClockTime ges_timeline_get_snapping_distance (GESTimeline * timeline);
|
GstClockTime ges_timeline_get_snapping_distance (GESTimeline * timeline);
|
||||||
void ges_timeline_set_snapping_distance (GESTimeline * timeline, GstClockTime snapping_distance);
|
void ges_timeline_set_snapping_distance (GESTimeline * timeline, GstClockTime snapping_distance);
|
||||||
|
GESTimelineElement * ges_timeline_get_element (GESTimeline * timeline, const gchar *name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -702,7 +702,8 @@ _can_serialize_spec (GParamSpec * spec)
|
||||||
{
|
{
|
||||||
if (spec->flags & G_PARAM_WRITABLE && !(spec->flags & G_PARAM_CONSTRUCT_ONLY)
|
if (spec->flags & G_PARAM_WRITABLE && !(spec->flags & G_PARAM_CONSTRUCT_ONLY)
|
||||||
&& !g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (spec), G_TYPE_OBJECT)
|
&& !g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (spec), G_TYPE_OBJECT)
|
||||||
&& g_strcmp0 (spec->name, "name")
|
&& (!(g_type_is_a (spec->owner_type, GST_TYPE_OBJECT) &&
|
||||||
|
!g_strcmp0 (spec->name, "name")))
|
||||||
&& G_PARAM_SPEC_VALUE_TYPE (spec) != G_TYPE_GTYPE)
|
&& G_PARAM_SPEC_VALUE_TYPE (spec) != G_TYPE_GTYPE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ GST_START_TEST (test_ges_scenario)
|
||||||
tmp_layer = ges_clip_get_layer (GES_CLIP (source));
|
tmp_layer = ges_clip_get_layer (GES_CLIP (source));
|
||||||
fail_unless (tmp_layer == layer);
|
fail_unless (tmp_layer == layer);
|
||||||
/* The timeline stole our reference */
|
/* The timeline stole our reference */
|
||||||
ASSERT_OBJECT_REFCOUNT (source, "source", 1);
|
ASSERT_OBJECT_REFCOUNT (source, "source + 1 timeline", 2);
|
||||||
gst_object_unref (tmp_layer);
|
gst_object_unref (tmp_layer);
|
||||||
ASSERT_OBJECT_REFCOUNT (layer, "layer", 1);
|
ASSERT_OBJECT_REFCOUNT (layer, "layer", 1);
|
||||||
|
|
||||||
|
@ -101,13 +101,13 @@ GST_START_TEST (test_ges_scenario)
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 4);
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the timeline
|
* 2 by the timeline
|
||||||
* 1 by the track */
|
* 1 by the track */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 4);
|
||||||
|
|
||||||
GST_DEBUG ("Remove the Clip from the layer");
|
GST_DEBUG ("Remove the Clip from the layer");
|
||||||
|
|
||||||
|
@ -232,13 +232,13 @@ GST_START_TEST (test_ges_timeline_add_layer)
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the trackelement
|
* 1 by the trackelement
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 4);
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the timeline
|
* 1 by the timeline
|
||||||
* 1 by the trackelement */
|
* 2 by the trackelement */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 4);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s2);
|
trackelements = GES_CONTAINER_CHILDREN (s2);
|
||||||
trackelement = GES_TRACK_ELEMENT (trackelements->data);
|
trackelement = GES_TRACK_ELEMENT (trackelements->data);
|
||||||
|
@ -247,8 +247,8 @@ GST_START_TEST (test_ges_timeline_add_layer)
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the timeline
|
* 1 by the timeline
|
||||||
* 1 by the trackelement */
|
* 2 by the trackelement */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (trackelement), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (trackelement), "trackelement", 4);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s3);
|
trackelements = GES_CONTAINER_CHILDREN (s3);
|
||||||
trackelement = GES_TRACK_ELEMENT (trackelements->data);
|
trackelement = GES_TRACK_ELEMENT (trackelements->data);
|
||||||
|
@ -257,8 +257,8 @@ GST_START_TEST (test_ges_timeline_add_layer)
|
||||||
/* There are 3 references:
|
/* There are 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the timeline
|
* 1 by the timeline
|
||||||
* 1 by the trackelement */
|
* 2 by the trackelement */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "trackelement", 4);
|
||||||
|
|
||||||
/* theoretically this is all we need to do to ensure cleanup */
|
/* theoretically this is all we need to do to ensure cleanup */
|
||||||
gst_object_unref (timeline);
|
gst_object_unref (timeline);
|
||||||
|
@ -339,8 +339,8 @@ GST_START_TEST (test_ges_timeline_add_layer_first)
|
||||||
/* Each object has 3 references:
|
/* Each object has 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s2);
|
trackelements = GES_CONTAINER_CHILDREN (s2);
|
||||||
|
@ -349,8 +349,8 @@ GST_START_TEST (test_ges_timeline_add_layer_first)
|
||||||
/* Each object has 3 references:
|
/* Each object has 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s3);
|
trackelements = GES_CONTAINER_CHILDREN (s3);
|
||||||
|
@ -359,8 +359,8 @@ GST_START_TEST (test_ges_timeline_add_layer_first)
|
||||||
/* Each object has 3 references:
|
/* Each object has 3 references:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* theoretically this is all we need to do to ensure cleanup */
|
/* theoretically this is all we need to do to ensure cleanup */
|
||||||
|
@ -447,14 +447,14 @@ GST_START_TEST (test_ges_timeline_remove_track)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (t1, "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (t1, "trackelement", 4);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s2);
|
trackelements = GES_CONTAINER_CHILDREN (s2);
|
||||||
fail_unless (trackelements != NULL);
|
fail_unless (trackelements != NULL);
|
||||||
|
@ -463,14 +463,14 @@ GST_START_TEST (test_ges_timeline_remove_track)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (t2, "t2", 3);
|
ASSERT_OBJECT_REFCOUNT (t2, "t2", 4);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s3);
|
trackelements = GES_CONTAINER_CHILDREN (s3);
|
||||||
fail_unless (trackelements != NULL);
|
fail_unless (trackelements != NULL);
|
||||||
|
@ -479,14 +479,14 @@ GST_START_TEST (test_ges_timeline_remove_track)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
}
|
}
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (t3, "t3", 3);
|
ASSERT_OBJECT_REFCOUNT (t3, "t3", 4);
|
||||||
|
|
||||||
/* remove the track and check that the track elements have been released */
|
/* remove the track and check that the track elements have been released */
|
||||||
fail_unless (ges_timeline_remove_track (timeline, track));
|
fail_unless (ges_timeline_remove_track (timeline, track));
|
||||||
|
@ -613,17 +613,17 @@ GST_START_TEST (test_ges_timeline_multiple_tracks)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
fail_unless (ges_track_element_get_track (tmp->data) == track1);
|
fail_unless (ges_track_element_get_track (tmp->data) == track1);
|
||||||
}
|
}
|
||||||
gst_object_ref (t1);
|
gst_object_ref (t1);
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline
|
* 2 by the timeline
|
||||||
* 1 added by ourselves above (gst_object_ref (t1)) */
|
* 1 added by ourselves above (gst_object_ref (t1)) */
|
||||||
ASSERT_OBJECT_REFCOUNT (t1, "trackelement", 4);
|
ASSERT_OBJECT_REFCOUNT (t1, "trackelement", 5);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s2);
|
trackelements = GES_CONTAINER_CHILDREN (s2);
|
||||||
fail_unless (trackelements != NULL);
|
fail_unless (trackelements != NULL);
|
||||||
|
@ -632,17 +632,17 @@ GST_START_TEST (test_ges_timeline_multiple_tracks)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
fail_unless (ges_track_element_get_track (tmp->data) == track2);
|
fail_unless (ges_track_element_get_track (tmp->data) == track2);
|
||||||
}
|
}
|
||||||
gst_object_ref (t2);
|
gst_object_ref (t2);
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline
|
* 2 by the timeline
|
||||||
* 1 added by ourselves above (gst_object_ref (t2)) */
|
* 1 added by ourselves above (gst_object_ref (t2)) */
|
||||||
ASSERT_OBJECT_REFCOUNT (t2, "t2", 4);
|
ASSERT_OBJECT_REFCOUNT (t2, "t2", 5);
|
||||||
|
|
||||||
trackelements = GES_CONTAINER_CHILDREN (s3);
|
trackelements = GES_CONTAINER_CHILDREN (s3);
|
||||||
fail_unless (trackelements != NULL);
|
fail_unless (trackelements != NULL);
|
||||||
|
@ -651,17 +651,17 @@ GST_START_TEST (test_ges_timeline_multiple_tracks)
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the clip
|
* 1 by the clip
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline */
|
* 2 by the timeline */
|
||||||
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (GES_TRACK_ELEMENT (tmp->data), "trackelement", 4);
|
||||||
fail_unless (ges_track_element_get_track (tmp->data) == track1);
|
fail_unless (ges_track_element_get_track (tmp->data) == track1);
|
||||||
}
|
}
|
||||||
gst_object_ref (t3);
|
gst_object_ref (t3);
|
||||||
/* There are 3 references held:
|
/* There are 3 references held:
|
||||||
* 1 by the container
|
* 1 by the container
|
||||||
* 1 by the track
|
* 1 by the track
|
||||||
* 1 by the timeline
|
* 2 by the timeline
|
||||||
* 1 added by ourselves above (gst_object_ref (t3)) */
|
* 1 added by ourselves above (gst_object_ref (t3)) */
|
||||||
ASSERT_OBJECT_REFCOUNT (t3, "t3", 4);
|
ASSERT_OBJECT_REFCOUNT (t3, "t3", 5);
|
||||||
|
|
||||||
gst_object_unref (t1);
|
gst_object_unref (t1);
|
||||||
gst_object_unref (t2);
|
gst_object_unref (t2);
|
||||||
|
@ -706,6 +706,28 @@ GST_START_TEST (test_ges_pipeline_change_state)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_ges_timeline_element_name)
|
||||||
|
{
|
||||||
|
GESClip *clip;
|
||||||
|
GESAsset *asset;
|
||||||
|
GESTimeline *timeline;
|
||||||
|
GESLayer *layer;
|
||||||
|
|
||||||
|
ges_init ();
|
||||||
|
|
||||||
|
timeline = ges_timeline_new_audio_video ();
|
||||||
|
layer = ges_layer_new ();
|
||||||
|
fail_unless (ges_timeline_add_layer (timeline, layer));
|
||||||
|
|
||||||
|
asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
|
||||||
|
clip = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
|
||||||
|
gst_object_unref (asset);
|
||||||
|
|
||||||
|
fail_unless_equals_string (GES_TIMELINE_ELEMENT_NAME (clip), "testclip0");
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
ges_suite (void)
|
ges_suite (void)
|
||||||
{
|
{
|
||||||
|
@ -721,6 +743,7 @@ ges_suite (void)
|
||||||
tcase_add_test (tc_chain, test_ges_timeline_remove_track);
|
tcase_add_test (tc_chain, test_ges_timeline_remove_track);
|
||||||
tcase_add_test (tc_chain, test_ges_timeline_multiple_tracks);
|
tcase_add_test (tc_chain, test_ges_timeline_multiple_tracks);
|
||||||
tcase_add_test (tc_chain, test_ges_pipeline_change_state);
|
tcase_add_test (tc_chain, test_ges_pipeline_change_state);
|
||||||
|
tcase_add_test (tc_chain, test_ges_timeline_element_name);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,9 +181,11 @@ GST_START_TEST (test_split_object)
|
||||||
fail_unless (splitclip != clip);
|
fail_unless (splitclip != clip);
|
||||||
|
|
||||||
/* We own the only ref */
|
/* We own the only ref */
|
||||||
ASSERT_OBJECT_REFCOUNT (splitclip, "splitclip", 1);
|
ASSERT_OBJECT_REFCOUNT (splitclip, "1 ref for us + 1 for the timeline", 2);
|
||||||
/* 1 ref for the Clip, 1 ref for the Track and 1 ref for the timeline */
|
/* 1 ref for the Clip, 1 ref for the Track and 2 ref for the timeline
|
||||||
ASSERT_OBJECT_REFCOUNT (splittrackelement, "splittrackelement", 3);
|
* (1 for the "all_element" hashtable, another for the sequence of TrackElement*/
|
||||||
|
ASSERT_OBJECT_REFCOUNT (splittrackelement,
|
||||||
|
"1 ref for the Clip, 1 ref for the Track and 2 ref for the timeline", 4);
|
||||||
|
|
||||||
check_destroyed (G_OBJECT (timeline), G_OBJECT (splitclip), clip,
|
check_destroyed (G_OBJECT (timeline), G_OBJECT (splitclip), clip,
|
||||||
splittrackelement, NULL);
|
splittrackelement, NULL);
|
||||||
|
@ -216,7 +218,7 @@ GST_START_TEST (test_clip_group_ungroup)
|
||||||
assert_is_type (asset, GES_TYPE_ASSET);
|
assert_is_type (asset, GES_TYPE_ASSET);
|
||||||
|
|
||||||
clip = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
|
clip = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip, "1 layer", 1);
|
ASSERT_OBJECT_REFCOUNT (clip, "1 layer + 1 timeline.all_elements", 2);
|
||||||
assert_equals_uint64 (_START (clip), 0);
|
assert_equals_uint64 (_START (clip), 0);
|
||||||
assert_equals_uint64 (_INPOINT (clip), 0);
|
assert_equals_uint64 (_INPOINT (clip), 0);
|
||||||
assert_equals_uint64 (_DURATION (clip), 10);
|
assert_equals_uint64 (_DURATION (clip), 10);
|
||||||
|
@ -229,20 +231,23 @@ GST_START_TEST (test_clip_group_ungroup)
|
||||||
assert_equals_uint64 (_START (clip), 0);
|
assert_equals_uint64 (_START (clip), 0);
|
||||||
assert_equals_uint64 (_INPOINT (clip), 0);
|
assert_equals_uint64 (_INPOINT (clip), 0);
|
||||||
assert_equals_uint64 (_DURATION (clip), 10);
|
assert_equals_uint64 (_DURATION (clip), 10);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip, "1 for the layer + 1 in containers list", 2);
|
ASSERT_OBJECT_REFCOUNT (clip, "1 for the layer + 1 for the timeline + "
|
||||||
|
"1 in containers list", 3);
|
||||||
|
|
||||||
clip2 = containers->next->data;
|
clip2 = containers->next->data;
|
||||||
fail_if (clip2 == clip);
|
fail_if (clip2 == clip);
|
||||||
|
fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (clip2) != NULL);
|
||||||
assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip2)), 1);
|
assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip2)), 1);
|
||||||
assert_equals_uint64 (_START (clip2), 0);
|
assert_equals_uint64 (_START (clip2), 0);
|
||||||
assert_equals_uint64 (_INPOINT (clip2), 0);
|
assert_equals_uint64 (_INPOINT (clip2), 0);
|
||||||
assert_equals_uint64 (_DURATION (clip2), 10);
|
assert_equals_uint64 (_DURATION (clip2), 10);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip2, "1 for the layer + 1 in containers list", 2);
|
ASSERT_OBJECT_REFCOUNT (clip2, "1 for the layer + 1 for the timeline +"
|
||||||
|
" 1 in containers list", 3);
|
||||||
|
|
||||||
tmp = ges_track_get_elements (audio_track);
|
tmp = ges_track_get_elements (audio_track);
|
||||||
assert_equals_int (g_list_length (tmp), 1);
|
assert_equals_int (g_list_length (tmp), 1);
|
||||||
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
||||||
"+ 1 for the timeline + 1 in tmp list", 4);
|
"+ 2 for the timeline + 1 in tmp list", 5);
|
||||||
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
||||||
GES_TRACK_TYPE_AUDIO);
|
GES_TRACK_TYPE_AUDIO);
|
||||||
assert_equals_int (ges_clip_get_supported_formats (GES_CLIP
|
assert_equals_int (ges_clip_get_supported_formats (GES_CLIP
|
||||||
|
@ -251,7 +256,7 @@ GST_START_TEST (test_clip_group_ungroup)
|
||||||
tmp = ges_track_get_elements (video_track);
|
tmp = ges_track_get_elements (video_track);
|
||||||
assert_equals_int (g_list_length (tmp), 1);
|
assert_equals_int (g_list_length (tmp), 1);
|
||||||
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
||||||
"+ 1 for the timeline + 1 in tmp list", 4);
|
"+ 2 for the timeline + 1 in tmp list", 5);
|
||||||
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
||||||
GES_TRACK_TYPE_VIDEO);
|
GES_TRACK_TYPE_VIDEO);
|
||||||
assert_equals_int (ges_clip_get_supported_formats (GES_CLIP
|
assert_equals_int (ges_clip_get_supported_formats (GES_CLIP
|
||||||
|
@ -302,7 +307,7 @@ GST_START_TEST (test_clip_group_ungroup)
|
||||||
tmp = ges_track_get_elements (video_track);
|
tmp = ges_track_get_elements (video_track);
|
||||||
assert_equals_int (g_list_length (tmp), 1);
|
assert_equals_int (g_list_length (tmp), 1);
|
||||||
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
ASSERT_OBJECT_REFCOUNT (tmp->data, "1 for the track + 1 for the container "
|
||||||
"+ 1 for the timeline + 1 in tmp list", 4);
|
"+ 2 for the timeline + 1 in tmp list", 5);
|
||||||
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
assert_equals_int (ges_track_element_get_track_type (tmp->data),
|
||||||
GES_TRACK_TYPE_VIDEO);
|
GES_TRACK_TYPE_VIDEO);
|
||||||
fail_unless (GES_CONTAINER (ges_timeline_element_get_parent (tmp->data)) ==
|
fail_unless (GES_CONTAINER (ges_timeline_element_get_parent (tmp->data)) ==
|
||||||
|
|
|
@ -66,7 +66,7 @@ GST_START_TEST (test_move_group)
|
||||||
g_list_free (clips);
|
g_list_free (clips);
|
||||||
|
|
||||||
fail_unless (GES_IS_GROUP (group));
|
fail_unless (GES_IS_GROUP (group));
|
||||||
ASSERT_OBJECT_REFCOUNT (group, "1 ref for the timeline", 1);
|
ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
|
||||||
fail_unless (g_list_length (GES_CONTAINER_CHILDREN (group)) == 3);
|
fail_unless (g_list_length (GES_CONTAINER_CHILDREN (group)) == 3);
|
||||||
assert_equals_int (GES_CONTAINER_HEIGHT (group), 2);
|
assert_equals_int (GES_CONTAINER_HEIGHT (group), 2);
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ GST_START_TEST (test_move_group)
|
||||||
CHECK_OBJECT_PROPS (clip2, 55, 0, 65);
|
CHECK_OBJECT_PROPS (clip2, 55, 0, 65);
|
||||||
CHECK_OBJECT_PROPS (group, 10, 0, 110);
|
CHECK_OBJECT_PROPS (group, 10, 0, 110);
|
||||||
|
|
||||||
ASSERT_OBJECT_REFCOUNT (group, "1 ref for the timeline", 1);
|
ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
|
||||||
check_destroyed (G_OBJECT (timeline), G_OBJECT (group), NULL);
|
check_destroyed (G_OBJECT (timeline), G_OBJECT (group), NULL);
|
||||||
gst_object_unref (asset);
|
gst_object_unref (asset);
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,7 +394,7 @@ GST_START_TEST (test_single_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Moving first source to 250");
|
GST_DEBUG ("Moving first source to 250");
|
||||||
ges_timeline_element_set_start (src, 250);
|
ges_timeline_element_set_start (src, 250);
|
||||||
|
@ -579,14 +579,14 @@ GST_START_TEST (test_single_layer_automatic_transition)
|
||||||
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
||||||
assert_equals_uint64 (_START (transition), 600);
|
assert_equals_uint64 (_START (transition), 600);
|
||||||
assert_equals_uint64 (_DURATION (transition), 1250 - 600);
|
assert_equals_uint64 (_DURATION (transition), 1250 - 600);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "The layer and ourself own a ref", 2);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline + ourself", 3);
|
||||||
|
|
||||||
current = current->next;
|
current = current->next;
|
||||||
transition = current->data;
|
transition = current->data;
|
||||||
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
||||||
assert_equals_uint64 (_START (transition), 600);
|
assert_equals_uint64 (_START (transition), 600);
|
||||||
assert_equals_uint64 (_DURATION (transition), 1250 - 600);
|
assert_equals_uint64 (_DURATION (transition), 1250 - 600);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "The layer and ourself own a ref", 2);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline + ourself", 3);
|
||||||
|
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src);
|
fail_unless (current->data == src);
|
||||||
|
@ -596,14 +596,14 @@ GST_START_TEST (test_single_layer_automatic_transition)
|
||||||
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
||||||
assert_equals_uint64 (_START (transition), 1250);
|
assert_equals_uint64 (_START (transition), 1250);
|
||||||
assert_equals_uint64 (_DURATION (transition), 1400 - 1250);
|
assert_equals_uint64 (_DURATION (transition), 1400 - 1250);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "The layer and ourself own a ref", 2);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline + ourself", 3);
|
||||||
|
|
||||||
current = current->next;
|
current = current->next;
|
||||||
transition = current->data;
|
transition = current->data;
|
||||||
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
assert_is_type (transition, GES_TYPE_TRANSITION_CLIP);
|
||||||
assert_equals_uint64 (_START (transition), 1250);
|
assert_equals_uint64 (_START (transition), 1250);
|
||||||
assert_equals_uint64 (_DURATION (transition), 1400 - 1250);
|
assert_equals_uint64 (_DURATION (transition), 1400 - 1250);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "The layer and ourself own a ref", 2);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline + ourself", 3);
|
||||||
|
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src2);
|
fail_unless (current->data == src2);
|
||||||
|
@ -806,7 +806,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Adding clip 2 from 500 -- 1000 to second layer");
|
GST_DEBUG ("Adding clip 2 from 500 -- 1000 to second layer");
|
||||||
src2 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer1, asset, 0,
|
src2 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer1, asset, 0,
|
||||||
|
@ -850,7 +850,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking transitions on second layer");
|
GST_DEBUG ("Checking transitions on second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
|
@ -898,7 +898,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking transitions has been added on second layer");
|
GST_DEBUG ("Checking transitions has been added on second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
|
@ -917,7 +917,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Moving src3 to 1000. should remove transition");
|
GST_DEBUG ("Moving src3 to 1000. should remove transition");
|
||||||
ges_timeline_element_set_start (src3, 1000);
|
ges_timeline_element_set_start (src3, 1000);
|
||||||
|
@ -956,7 +956,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_equals_uint64 (_START (transition), 500);
|
assert_equals_uint64 (_START (transition), 500);
|
||||||
assert_equals_uint64 (_DURATION (transition), 500);
|
assert_equals_uint64 (_DURATION (transition), 500);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking transitions has been removed on second layer");
|
GST_DEBUG ("Checking transitions has been removed on second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
|
@ -964,7 +964,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
fail_unless (current->data == src2);
|
fail_unless (current->data == src2);
|
||||||
fail_unless (current->next->data == src3);
|
fail_unless (current->next->data == src3);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Moving src3 to first layer, should add a transition");
|
GST_DEBUG ("Moving src3 to first layer, should add a transition");
|
||||||
ges_clip_move_to_layer (GES_CLIP (src3), layer);
|
ges_clip_move_to_layer (GES_CLIP (src3), layer);
|
||||||
|
@ -1023,14 +1023,14 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
fail_unless (current->data == src3);
|
fail_unless (current->data == src3);
|
||||||
|
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking second layer");
|
GST_DEBUG ("Checking second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
assert_equals_int (g_list_length (objects), 1);
|
assert_equals_int (g_list_length (objects), 1);
|
||||||
fail_unless (current->data == src2);
|
fail_unless (current->data == src2);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG
|
GST_DEBUG
|
||||||
("Moving src to second layer, should remove first transition on first layer");
|
("Moving src to second layer, should remove first transition on first layer");
|
||||||
|
@ -1073,7 +1073,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src3);
|
fail_unless (current->data == src3);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking second layer");
|
GST_DEBUG ("Checking second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
|
@ -1081,7 +1081,7 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
||||||
assert_is_type (current->next->data, GES_TYPE_TEST_CLIP);
|
assert_is_type (current->next->data, GES_TYPE_TEST_CLIP);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Edit src to first layer start=1500");
|
GST_DEBUG ("Edit src to first layer start=1500");
|
||||||
ges_container_edit (GES_CONTAINER (src), NULL, 0,
|
ges_container_edit (GES_CONTAINER (src), NULL, 0,
|
||||||
|
@ -1139,14 +1139,14 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src);
|
fail_unless (current->data == src);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking second layer");
|
GST_DEBUG ("Checking second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
assert_equals_int (g_list_length (objects), 1);
|
assert_equals_int (g_list_length (objects), 1);
|
||||||
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Ripple src1 to 700");
|
GST_DEBUG ("Ripple src1 to 700");
|
||||||
ges_container_edit (GES_CONTAINER (src1), NULL, 0,
|
ges_container_edit (GES_CONTAINER (src1), NULL, 0,
|
||||||
|
@ -1204,14 +1204,14 @@ GST_START_TEST (test_multi_layer_automatic_transition)
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src);
|
fail_unless (current->data == src);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Checking second layer");
|
GST_DEBUG ("Checking second layer");
|
||||||
current = objects = ges_layer_get_clips (layer1);
|
current = objects = ges_layer_get_clips (layer1);
|
||||||
assert_equals_int (g_list_length (objects), 1);
|
assert_equals_int (g_list_length (objects), 1);
|
||||||
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
assert_is_type (current->data, GES_TYPE_TEST_CLIP);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
gst_object_unref (timeline);
|
gst_object_unref (timeline);
|
||||||
}
|
}
|
||||||
|
@ -1368,7 +1368,7 @@ GST_START_TEST (test_layer_activate_automatic_transition)
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src3);
|
fail_unless (current->data == src3);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
GST_DEBUG ("Moving src2 to 1200, check everything updates properly");
|
GST_DEBUG ("Moving src2 to 1200, check everything updates properly");
|
||||||
ges_timeline_element_set_start (src2, 1200);
|
ges_timeline_element_set_start (src2, 1200);
|
||||||
|
@ -1441,7 +1441,7 @@ GST_START_TEST (test_layer_activate_automatic_transition)
|
||||||
current = current->next;
|
current = current->next;
|
||||||
fail_unless (current->data == src3);
|
fail_unless (current->data == src3);
|
||||||
g_list_free_full (objects, gst_object_unref);
|
g_list_free_full (objects, gst_object_unref);
|
||||||
ASSERT_OBJECT_REFCOUNT (transition, "Only the layer owns a ref", 1);
|
ASSERT_OBJECT_REFCOUNT (transition, "layer + timeline", 2);
|
||||||
|
|
||||||
|
|
||||||
gst_object_unref (timeline);
|
gst_object_unref (timeline);
|
||||||
|
|
|
@ -290,12 +290,8 @@ GST_START_TEST (test_snapping)
|
||||||
fail_unless (ges_track_element_get_track (trackelement) == track);
|
fail_unless (ges_track_element_get_track (trackelement) == track);
|
||||||
assert_equals_uint64 (_DURATION (trackelement), 37);
|
assert_equals_uint64 (_DURATION (trackelement), 37);
|
||||||
|
|
||||||
/* We have 3 references to trackelement from:
|
ASSERT_OBJECT_REFCOUNT (trackelement, "track + timeline + clip", 4);
|
||||||
* track + timeline + clip */
|
ASSERT_OBJECT_REFCOUNT (clip, "layer + timeline", 2);
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "First trackelement", 3);
|
|
||||||
/* We have 1 ref to clip1:
|
|
||||||
* + layer */
|
|
||||||
ASSERT_OBJECT_REFCOUNT (clip, "First clip", 1);
|
|
||||||
|
|
||||||
fail_unless (ges_layer_add_clip (layer, GES_CLIP (clip1)));
|
fail_unless (ges_layer_add_clip (layer, GES_CLIP (clip1)));
|
||||||
fail_unless ((trackelements = GES_CONTAINER_CHILDREN (clip1)) != NULL);
|
fail_unless ((trackelements = GES_CONTAINER_CHILDREN (clip1)) != NULL);
|
||||||
|
@ -305,8 +301,8 @@ GST_START_TEST (test_snapping)
|
||||||
assert_equals_uint64 (_DURATION (trackelement1), 15);
|
assert_equals_uint64 (_DURATION (trackelement1), 15);
|
||||||
|
|
||||||
/* Same ref logic */
|
/* Same ref logic */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement1, "First trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement1, "First trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip1, "First clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip1, "First clip", 2);
|
||||||
|
|
||||||
fail_unless (ges_layer_add_clip (layer, GES_CLIP (clip2)));
|
fail_unless (ges_layer_add_clip (layer, GES_CLIP (clip2)));
|
||||||
fail_unless ((trackelements = GES_CONTAINER_CHILDREN (clip2)) != NULL);
|
fail_unless ((trackelements = GES_CONTAINER_CHILDREN (clip2)) != NULL);
|
||||||
|
@ -316,8 +312,8 @@ GST_START_TEST (test_snapping)
|
||||||
assert_equals_uint64 (_DURATION (trackelement2), 60);
|
assert_equals_uint64 (_DURATION (trackelement2), 60);
|
||||||
|
|
||||||
/* Same ref logic */
|
/* Same ref logic */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement2, "First trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement2, "First trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip2, "First clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip2, "First clip", 2);
|
||||||
|
|
||||||
/* Snaping to edge, so no move */
|
/* Snaping to edge, so no move */
|
||||||
g_object_set (timeline, "snapping-distance", (guint64) 3, NULL);
|
g_object_set (timeline, "snapping-distance", (guint64) 3, NULL);
|
||||||
|
@ -461,12 +457,12 @@ GST_START_TEST (test_snapping)
|
||||||
CHECK_OBJECT_PROPS (trackelement2, 110, 0, 60);
|
CHECK_OBJECT_PROPS (trackelement2, 110, 0, 60);
|
||||||
|
|
||||||
/* Check we didn't lose/screwed any references */
|
/* Check we didn't lose/screwed any references */
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "First trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "First trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement1, "Second trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement1, "Second trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement2, "Third trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement2, "Third trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip, "First clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip, "First clip", 2);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip1, "Second clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip1, "Second clip", 2);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip2, "Third clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip2, "Third clip", 2);
|
||||||
|
|
||||||
check_destroyed (G_OBJECT (timeline), G_OBJECT (trackelement),
|
check_destroyed (G_OBJECT (timeline), G_OBJECT (trackelement),
|
||||||
trackelement1, trackelement2, clip, clip1, clip2, layer, NULL);
|
trackelement1, trackelement2, clip, clip1, clip2, layer, NULL);
|
||||||
|
@ -817,14 +813,12 @@ GST_START_TEST (test_timeline_edition_mode)
|
||||||
/* We have 3 references:
|
/* We have 3 references:
|
||||||
* track + timeline + clip
|
* track + timeline + clip
|
||||||
*/
|
*/
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement, "First trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement, "First trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement1, "Second trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement1, "Second trackelement", 4);
|
||||||
ASSERT_OBJECT_REFCOUNT (trackelement2, "Third trackelement", 3);
|
ASSERT_OBJECT_REFCOUNT (trackelement2, "Third trackelement", 4);
|
||||||
/* We have 1 ref:
|
ASSERT_OBJECT_REFCOUNT (clip, "First clip", 2);
|
||||||
* + layer */
|
ASSERT_OBJECT_REFCOUNT (clip1, "Second clip", 2);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip, "First clip", 1);
|
ASSERT_OBJECT_REFCOUNT (clip2, "Third clip", 2);
|
||||||
ASSERT_OBJECT_REFCOUNT (clip1, "Second clip", 1);
|
|
||||||
ASSERT_OBJECT_REFCOUNT (clip2, "Third clip", 1);
|
|
||||||
|
|
||||||
/* Ripple clip end to 52
|
/* Ripple clip end to 52
|
||||||
* New timeline:
|
* New timeline:
|
||||||
|
|
|
@ -257,8 +257,8 @@ GST_START_TEST (test_filesource_images)
|
||||||
fail_unless (ges_track_element_get_track (track_element) == v);
|
fail_unless (ges_track_element_get_track (track_element) == v);
|
||||||
fail_unless (GES_IS_IMAGE_SOURCE (track_element));
|
fail_unless (GES_IS_IMAGE_SOURCE (track_element));
|
||||||
|
|
||||||
ASSERT_OBJECT_REFCOUNT (track_element, "1 in track, 1 in clip 1 in timeline",
|
ASSERT_OBJECT_REFCOUNT (track_element, "1 in track, 1 in clip 2 in timeline",
|
||||||
3);
|
4);
|
||||||
|
|
||||||
gst_object_unref (timeline);
|
gst_object_unref (timeline);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue