ges-track-object: Make possible to add a track already containing a gnlobject to...
authorThibault Saunier <thibault.saunier@collabora.com>
Tue, 17 Apr 2012 22:42:41 +0000 (18:42 -0400)
committerThibault Saunier <thibault.saunier@collabora.com>
Tue, 24 Apr 2012 00:25:07 +0000 (20:25 -0400)
ges/ges-track-object.c
ges/ges-track.c

index 3fb0cc9881fa70c76486555cebdfb47f590b8359..7318f96d4dac96acfec1cdd4c034dd6c8e849b5f 100644 (file)
@@ -766,20 +766,21 @@ ensure_gnl_object (GESTrackObject * object)
 
   GST_DEBUG ("Calling virtual method");
 
-  /* call the create_gnl_object virtual method */
-  gnlobject = class->create_gnl_object (object);
+  /* 2. Fill in the GnlObject */
+  if (object->priv->gnlobject == NULL) {
 
-  if (G_UNLIKELY (gnlobject == NULL)) {
-    GST_ERROR
-        ("'create_gnl_object' implementation returned TRUE but no GnlObject is available");
-    goto done;
-  }
+    /* call the create_gnl_object virtual method */
+    gnlobject = class->create_gnl_object (object);
 
-  object->priv->gnlobject = gnlobject;
+    if (G_UNLIKELY (gnlobject == NULL)) {
+      GST_ERROR
+          ("'create_gnl_object' implementation returned TRUE but no GnlObject is available");
+      goto done;
+    }
 
-  /* 2. Fill in the GnlObject */
-  if (gnlobject) {
-    GST_DEBUG ("Got a valid GnlObject, now filling it in");
+    GST_DEBUG_OBJECT (object, "Got a valid GnlObject, now filling it in");
+
+    object->priv->gnlobject = gnlobject;
 
     if (object->priv->timelineobj)
       res = ges_timeline_object_fill_track_object (object->priv->timelineobj,
@@ -803,7 +804,6 @@ ensure_gnl_object (GESTrackObject * object)
 
       /* Set some properties on the GnlObject */
       g_object_set (object->priv->gnlobject,
-          "caps", ges_track_get_caps (object->priv->track),
           "duration", object->priv->pending_duration,
           "media-duration", object->priv->pending_duration,
           "start", object->priv->pending_start,
@@ -811,6 +811,10 @@ ensure_gnl_object (GESTrackObject * object)
           "priority", object->priv->pending_priority,
           "active", object->priv->pending_active, NULL);
 
+      if (object->priv->track != NULL)
+        g_object_set (object->priv->gnlobject,
+            "caps", ges_track_get_caps (object->priv->track), NULL);
+
       /*  We feed up the props_hashtable if possible */
       if (class->get_props_hastable) {
         props_hash = class->get_props_hastable (object);
@@ -842,8 +846,16 @@ ges_track_object_set_track (GESTrackObject * object, GESTrack * track)
 
   object->priv->track = track;
 
-  if (object->priv->track)
-    return ensure_gnl_object (object);
+  if (object->priv->track) {
+    /* If we already have a gnlobject, we just set its caps properly */
+    if (object->priv->gnlobject) {
+      g_object_set (object->priv->gnlobject,
+          "caps", ges_track_get_caps (object->priv->track), NULL);
+      return TRUE;
+    } else {
+      return ensure_gnl_object (object);
+    }
+  }
 
   return TRUE;
 }
index bff638ab985cc79e68496148261a2b05dfa4b227..30eb881eb92bdb419cb3b5422ba582c5fac4d198 100644 (file)
@@ -456,14 +456,6 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object)
     return FALSE;
   }
 
-  /* At this point, the track object shouldn't have any gnlobject since
-   * it hasn't been added to a track yet.
-   * FIXME : This check seems a bit obsolete */
-  if (G_UNLIKELY (ges_track_object_get_gnlobject (object) != NULL)) {
-    GST_ERROR ("TrackObject already controls a gnlobject !");
-    return FALSE;
-  }
-
   if (G_UNLIKELY (!ges_track_object_set_track (object, track))) {
     GST_ERROR ("Couldn't properly add the object to the Track");
     return FALSE;