Track: Handle pads
authorEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 7 Aug 2009 18:32:47 +0000 (20:32 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 7 Aug 2009 18:36:46 +0000 (20:36 +0200)
ges/ges-track.c
ges/ges-track.h

index 2032465e15a1127cab9eb5efd2b0934a660d9da2..27aba3a0e3a6a886098b62262a3cc07f809d3fa6 100644 (file)
@@ -37,6 +37,11 @@ enum
   ARG_CAPS
 };
 
+static void pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track);
+
+static void
+pad_removed_cb (GstElement * element, GstPad * pad, GESTrack * track);
+
 static void
 ges_track_get_property (GObject * object, guint property_id,
     GValue * value, GParamSpec * pspec)
@@ -109,6 +114,11 @@ ges_track_init (GESTrack * self)
 {
   self->composition = gst_element_factory_make ("gnlcomposition", NULL);
 
+  g_signal_connect (self->composition, "pad-added", (GCallback) pad_added_cb,
+      self);
+  g_signal_connect (self->composition, "pad-removed",
+      (GCallback) pad_removed_cb, self);
+
   if (!gst_bin_add (GST_BIN (self), self->composition))
     GST_ERROR ("Couldn't add composition to bin !");
 }
@@ -219,3 +229,32 @@ ges_track_remove_object (GESTrack * track, GESTrackObject * object)
 
   return TRUE;
 }
+
+static void
+pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track)
+{
+  GST_DEBUG ("track:%p, pad %s:%s", track, GST_DEBUG_PAD_NAME (pad));
+
+  /* ghost the pad */
+  track->srcpad = gst_ghost_pad_new ("src", pad);
+
+  gst_pad_set_active (track->srcpad, TRUE);
+
+  gst_element_add_pad (GST_ELEMENT (track), track->srcpad);
+
+  GST_DEBUG ("done");
+}
+
+static void
+pad_removed_cb (GstElement * element, GstPad * pad, GESTrack * track)
+{
+  GST_DEBUG ("track:%p, pad %s:%s", track, GST_DEBUG_PAD_NAME (pad));
+
+  if (G_LIKELY (track->srcpad)) {
+    gst_pad_set_active (track->srcpad, FALSE);
+    gst_element_remove_pad (GST_ELEMENT (track), track->srcpad);
+    track->srcpad = NULL;
+  }
+
+  GST_DEBUG ("done");
+}
index df21328a2479f4db5a59e2571a952f465db5cacd..ccf808bc07fefb1b5db738e848d6986107c86038 100644 (file)
@@ -51,6 +51,7 @@ struct _GESTrack {
   GstCaps * caps;
 
   GstElement * composition;    /* The composition associated with this track */
+  GstPad * srcpad;             /* The source GhostPad */
 };
 
 struct _GESTrackClass {