gst/gstelement.*: add gst_element_no_more_pads and the "no-more-pads" signal
authorBenjamin Otte <otte@gnome.org>
Mon, 10 May 2004 16:48:44 +0000 (16:48 +0000)
committerBenjamin Otte <otte@gnome.org>
Mon, 10 May 2004 16:48:44 +0000 (16:48 +0000)
Original commit message from CVS:
* gst/gstelement.c: (gst_element_class_init),
(gst_element_no_more_pads):
* gst/gstelement.h:
add gst_element_no_more_pads and the "no-more-pads" signal

ChangeLog
gst/gstelement.c
gst/gstelement.h

index 2a1be82..c56473a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2004-05-10  Benjamin Otte  <in7y118@public.uni-hamburg.de>
 
+       * gst/gstelement.c: (gst_element_class_init),
+       (gst_element_no_more_pads):
+       * gst/gstelement.h:
+         add gst_element_no_more_pads and the "no-more-pads" signal
+
+2004-05-10  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
        * gst/gstregistry.c: (gst_registry_add_plugin):
          refuse to add plugins when a plugin with same name is already
          registered. Fixes a bunch of "How to remove plugins?" issues.
index ba131c9..b7dd1fd 100644 (file)
@@ -44,6 +44,7 @@ enum
   ERROR,
   EOS,
   FOUND_TAG,
+  NO_MORE_PADS,
   /* add more above */
   LAST_SIGNAL
 };
@@ -147,6 +148,10 @@ gst_element_class_init (GstElementClass * klass)
       G_STRUCT_OFFSET (GstElementClass, found_tag), NULL, NULL,
       gst_marshal_VOID__OBJECT_BOXED, G_TYPE_NONE, 2, GST_TYPE_ELEMENT,
       GST_TYPE_TAG_LIST);
+  gst_element_signals[FOUND_TAG] =
+      g_signal_new ("no-more-pads", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstElementClass, no_more_pads), NULL,
+      NULL, gst_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
   gobject_class->set_property =
       GST_DEBUG_FUNCPTR (gst_element_real_set_property);
@@ -1220,6 +1225,23 @@ gst_element_remove_ghost_pad (GstElement * element, GstPad * pad)
   gst_element_remove_pad (element, pad);
 }
 
+/**
+ * gst_element_no_more_pads:
+ * @element: a #GstElement
+ *
+ * Use this function to signal that the element does not expect any more pads
+ * to show up in the current pipeline. This function should be called whenever
+ * pads have been added by the element itself. Elements with GST_PAD_SOMETIMES 
+ * pad templates use this in combination with autopluggers to figure out that 
+ * the element is done initializing its pads.
+ */
+void
+gst_element_no_more_pads (GstElement * element)
+{
+  g_return_if_fail (GST_IS_ELEMENT (element));
+
+  g_signal_emit (element, gst_element_signals[NO_MORE_PADS], 0);
+}
 
 /**
  * gst_element_get_pad:
index 4c6bff8..ab59008 100644 (file)
@@ -245,7 +245,11 @@ struct _GstElementClass {
   void                 (*set_index)            (GstElement *element, GstIndex *index);
 
   GstElementStateReturn        (*set_state)            (GstElement *element, GstElementState state);
-  gpointer _gst_reserved[GST_PADDING];
+
+  /* FIXME 0.9: move up to signals */
+  void                 (*no_more_pads)         (GstElement *element);
+  
+  gpointer _gst_reserved[GST_PADDING - 1];
 };
 
 void                   gst_element_class_add_pad_template      (GstElementClass *klass, GstPadTemplate *templ);
@@ -313,7 +317,10 @@ GstScheduler*              gst_element_get_scheduler       (GstElement *element);
 void                   gst_element_add_pad             (GstElement *element, GstPad *pad);
 void                   gst_element_remove_pad          (GstElement *element, GstPad *pad);
 GstPad *               gst_element_add_ghost_pad       (GstElement *element, GstPad *pad, const gchar *name);
+#ifndef GST_DISABLE_DEPRECATED
 void                   gst_element_remove_ghost_pad    (GstElement *element, GstPad *pad);
+#endif
+void                   gst_element_no_more_pads        (GstElement *element);
 
 GstPad*                        gst_element_get_pad             (GstElement *element, const gchar *name);
 GstPad*                        gst_element_get_static_pad      (GstElement *element, const gchar *name);