move create_element virtual method up to TimelineSource class
authorBrandon Lewis <brandon@collabora.co.uk>
Wed, 30 Jun 2010 13:40:31 +0000 (15:40 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 9 Jul 2010 11:21:13 +0000 (13:21 +0200)
ges/ges-track-source.c
ges/ges-track-source.h

index dcc50f8..7418c75 100644 (file)
@@ -64,7 +64,29 @@ ges_track_source_finalize (GObject * object)
 static gboolean
 ges_track_source_create_gnl_object (GESTrackObject * object)
 {
-  object->gnlobject = gst_element_factory_make ("gnlsource", NULL);
+  GESTrackSourceClass *klass = NULL;
+  GESTrackSource *self = NULL;
+  GstElement *child = NULL;
+  GstElement *gnlobject;
+
+  self = GES_TRACK_SOURCE (object);
+  klass = GES_TRACK_SOURCE_GET_CLASS (self);
+
+  gnlobject = gst_element_factory_make ("gnlsource", NULL);
+
+  if (klass->create_element) {
+    child = klass->create_element (self);
+
+    if (G_UNLIKELY (!child)) {
+      GST_ERROR ("create_element returned NULL");
+      return TRUE;
+    }
+
+    gst_bin_add (GST_BIN (gnlobject), child);
+    self->element = child;
+  }
+
+  object->gnlobject = gnlobject;
 
   return TRUE;
 }
@@ -81,6 +103,7 @@ ges_track_source_class_init (GESTrackSourceClass * klass)
   object_class->finalize = ges_track_source_finalize;
 
   track_class->create_gnl_object = ges_track_source_create_gnl_object;
+  klass->create_element = NULL;
 }
 
 static void
index 89b164e..b02802c 100644 (file)
@@ -22,6 +22,7 @@
 #define _GES_TRACK_SOURCE
 
 #include <glib-object.h>
+#include <gst/gst.h>
 #include <ges/ges-types.h>
 #include <ges/ges-track-object.h>
 
@@ -53,8 +54,9 @@ G_BEGIN_DECLS
  */
 
 struct _GESTrackSource {
-  /* <public> */
   GESTrackObject parent;
+  GstElement *element;
+  /* <public> */
 };
 
 /**
@@ -67,6 +69,7 @@ struct _GESTrackSource {
 
 struct _GESTrackSourceClass {
   GESTrackObjectClass parent_class;
+  GstElement *(*create_element) (GESTrackSource *);
 };
 
 GType ges_track_source_get_type (void);