ges: Expand track background duration equal to timeline duration
authorThibault Saunier <thibault.saunier@collabora.com>
Fri, 16 Dec 2011 08:52:35 +0000 (09:52 +0100)
committerThibault Saunier <thibault.saunier@collabora.com>
Wed, 11 Jan 2012 14:56:16 +0000 (11:56 -0300)
ges/ges-track.c

index dccadb8..db7ac2c 100644 (file)
@@ -75,6 +75,9 @@ static void
 sort_track_objects_cb (GESTrackObject * child,
     GParamSpec * arg G_GNUC_UNUSED, GESTrack * track);
 
+static void timeline_duration_cb (GESTimeline * timeline,
+    GParamSpec * arg G_GNUC_UNUSED, GESTrack * track);
+
 static void
 ges_track_get_property (GObject * object, guint property_id,
     GValue * value, GParamSpec * pspec)
@@ -149,8 +152,7 @@ ges_track_constructed (GObject * object)
   GESTrackPrivate *priv = self->priv;
 
   if ((priv->background = gst_element_factory_make ("gnlsource", "background"))) {
-    g_object_set (G_OBJECT (self->priv->background), "expandable", TRUE,
-        "priority", G_MAXINT, NULL);
+    g_object_set (priv->background, "priority", G_MAXUINT, NULL);
 
     switch (self->type) {
       case GES_TRACK_TYPE_VIDEO:
@@ -367,6 +369,14 @@ ges_track_set_timeline (GESTrack * track, GESTimeline * timeline)
 {
   GST_DEBUG ("track:%p, timeline:%p", track, timeline);
 
+  if (track->priv->timeline)
+    g_signal_handlers_disconnect_by_func (track,
+        timeline_duration_cb, track->priv->timeline);
+
+  if (timeline)
+    g_signal_connect (G_OBJECT (timeline), "notify::duration",
+        G_CALLBACK (timeline_duration_cb), track);
+
   track->priv->timeline = timeline;
 }
 
@@ -627,6 +637,20 @@ sort_track_objects_cb (GESTrackObject * child,
       (GCompareFunc) objects_start_compare);
 }
 
+static void
+timeline_duration_cb (GESTimeline * timeline,
+    GParamSpec * arg G_GNUC_UNUSED, GESTrack * track)
+{
+  guint64 duration;
+
+  g_object_get (timeline, "duration", &duration, NULL);
+  g_object_set (GES_TRACK (track)->priv->background, "duration", duration,
+      NULL);
+
+  GST_DEBUG_OBJECT (track, "Updating background duration to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (duration));
+}
+
 /**
  * ges_track_get_caps:
  * @track: a #GESTrack