GESTrackObjectClass *class;
gboolean res;
- if (object->gnlobject)
+ if (object->gnlobject && object->valid)
return TRUE;
+ /* 1. Create the GnlObject */
+ GST_DEBUG ("Creating GnlObject");
+
class = GES_TRACK_OBJECT_GET_CLASS (object);
if (G_UNLIKELY (class->create_gnl_object == NULL)) {
return FALSE;
}
+ /* 2. Fill in the GnlObject */
if (res) {
GST_DEBUG ("Got a valid GnlObject, now filling it in");
object->gnlobject);
}
+ object->valid = res;
+
GST_DEBUG ("Returning res:%d", res);
return res;
}
-void
+gboolean
ges_track_object_set_track (GESTrackObject * object, GESTrack * track)
{
GST_DEBUG ("object:%p, track:%p", object, track);
object->track = track;
- ensure_gnl_object (object);
+ if (object->track)
+ return ensure_gnl_object (object);
+
+ return TRUE;
}
void
GESTimelineObject *timelineobj; /* The associated timeline object */
GESTrack *track; /* The associated Track */
+ gboolean valid; /* TRUE if the contents of gnlobject are valid/usable */
+
/* Cached values of the gnlobject properties */
guint64 start; /* position (in time) of the object in the layer */
guint64 inpoint; /* in-point */
GESTrackObject* ges_track_object_new (GESTimelineObject *timelineobj, GESTrack *track);
-/* gboolean ges_track_object_create_gnl_object (GESTrackObject * object); */
-
-void ges_track_object_set_track (GESTrackObject * object, GESTrack * track);
+gboolean ges_track_object_set_track (GESTrackObject * object, GESTrack * track);
void ges_track_object_set_timeline_object (GESTrackObject * object, GESTimelineObject * tlobject);
/* Private methods for GESTimelineObject's usage only */