TrackObject: Add 'valid' property, Make _set_track() return a bool
authorEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 7 Aug 2009 14:43:01 +0000 (16:43 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 7 Aug 2009 14:43:01 +0000 (16:43 +0200)
ges/ges-track-object.c
ges/ges-track-object.h

index ad3b4caa3569c3fab3e46a0b3620d961e32b2442..fffefbcf09b79248c06de0f327294d9c3a38b231 100644 (file)
@@ -229,9 +229,12 @@ ensure_gnl_object (GESTrackObject * object)
   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)) {
@@ -250,6 +253,7 @@ ensure_gnl_object (GESTrackObject * object)
     return FALSE;
   }
 
+  /* 2. Fill in the GnlObject */
   if (res) {
     GST_DEBUG ("Got a valid GnlObject, now filling it in");
 
@@ -258,19 +262,24 @@ ensure_gnl_object (GESTrackObject * object)
         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
index 547f32200715a7f557079e1d17e52f1053b03d7e..38d13732c447f1af65e553352bf3099d4b826626 100644 (file)
@@ -49,6 +49,8 @@ struct _GESTrackObject {
   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 */
@@ -72,9 +74,7 @@ GType ges_track_object_get_type (void);
 
 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 */