add two apis: gst_element_connect_elements_many (elem1, elem2, ...)
authorAndy Wingo <wingo@pobox.com>
Thu, 21 Feb 2002 14:44:27 +0000 (14:44 +0000)
committerAndy Wingo <wingo@pobox.com>
Thu, 21 Feb 2002 14:44:27 +0000 (14:44 +0000)
Original commit message from CVS:
* add two apis:
* gst_element_connect_elements_many (elem1, elem2, ...)
- calls gst_element_connect_elements() in order
- should be called gst_element_connect_many, but we need to rename gst_element_connect_elements first
- simplifies common-case code
* gst_bin_add_many (bin, elem1, ...)
- calls gst_bin_add on all of the elems
- again, simplifying common code

examples/helloworld/helloworld.c
gst/gstbin.c
gst/gstbin.h
gst/gstelement.c
gst/gstelement.h
tests/old/examples/helloworld/helloworld.c

index 3802bcd77444012f910e26b7f07e8d45eb458091..7d062b3089c0998086b53733777d461d40451511 100644 (file)
@@ -1,52 +1,47 @@
 #include <stdlib.h>
 #include <gst/gst.h>
 
-int main(int argc,char *argv[]) 
+int main (int argc, char *argv[]) 
 {
   GstElement *bin, *filesrc, *decoder, *osssink;
 
-  gst_init(&argc,&argv);
+  gst_init (&argc, &argv);
 
   if (argc != 2) {
-    g_print("usage: %s <mp3 file>\n", argv[0]);
-    exit(-1);
+    g_print ("usage: %s <mp3 file>\n", argv[0]);
+    exit (-1);
   }
 
   /* create a new bin to hold the elements */
-  bin = gst_pipeline_new("pipeline");
+  bin = gst_pipeline_new ("pipeline");
 
   /* create a disk reader */
-  filesrc = gst_elementfactory_make("filesrc", "disk_source");
-  g_object_set(G_OBJECT(filesrc),"location", argv[1],NULL);
+  filesrc = gst_elementfactory_make ("filesrc", "disk_source");
+  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
 
   /* now it's time to get the decoder */
-  decoder = gst_elementfactory_make("mad","parse");
+  decoder = gst_elementfactory_make ("mad", "parse");
   if (!decoder) {
     g_print ("could not find plugin \"mad\"");
     return -1;
   }
   /* and an audio sink */
-  osssink = gst_elementfactory_make("osssink", "play_audio");
+  osssink = gst_elementfactory_make ("osssink", "play_audio");
 
   /* add objects to the main pipeline */
-  gst_bin_add(GST_BIN(bin), filesrc);
-  gst_bin_add(GST_BIN(bin), decoder);
-  gst_bin_add(GST_BIN(bin), osssink);
-
-  /* connect src to sink */
-  gst_pad_connect(gst_element_get_pad(filesrc,"src"),
-                  gst_element_get_pad(decoder,"sink"));
-  gst_pad_connect(gst_element_get_pad(decoder,"src"),
-                  gst_element_get_pad(osssink,"sink"));
+  gst_bin_add_many (GST_BIN (bin), filesrc, decoder, osssink, NULL);
 
+  /* connect the elements */
+  gst_element_connect_elements_many (filesrc, decoder, osssink, NULL);
+  
   /* start playing */
-  gst_element_set_state(bin, GST_STATE_PLAYING);
+  gst_element_set_state (bin, GST_STATE_PLAYING);
 
-  while (gst_bin_iterate(GST_BIN(bin)));
+  while (gst_bin_iterate (GST_BIN (bin)));
 
   /* stop the bin */
-  gst_element_set_state(bin, GST_STATE_NULL);
+  gst_element_set_state (bin, GST_STATE_NULL);
 
-  exit(0);
+  exit (0);
 }
 
index bc358e786aa51698b3be6c0c167a8a10e807d379..dbd31598009dcb6e672503627079104bbb11ce7c 100644 (file)
@@ -333,6 +333,36 @@ gst_bin_unset_element_sched (GstElement * element)
 }
 
 
+/**
+ * gst_element_connect_elements_many:
+ * @element_1: the first element to add to the bin
+ * @...: NULL-terminated list of elements to add to the bin
+ * 
+ * Add a list of elements to a bin. Uses #gst_bin_add.
+ **/
+/* API FIXME: this should be called gst_element_connect_many, and connect_elements
+ * should just be connect */
+void
+gst_bin_add_many (GstBin *bin, GstElement *element_1, ...)
+{
+  va_list args;
+
+  g_return_if_fail (bin != NULL);
+  g_return_if_fail (element_1 != NULL);
+  g_return_if_fail (GST_IS_BIN (bin));
+  g_return_if_fail (GST_IS_ELEMENT (element_1));
+
+  va_start (args, element_1);
+
+  while (element_1) {
+    gst_bin_add (bin, element_1);
+    
+    element_1 = va_arg (args, GstElement*);
+  }
+
+  va_end (args);
+}
+
 /**
  * gst_bin_add:
  * @bin: #GstBin to add element to
index 0df8ae18863cf05911cd49d1affde96534d37c68..e922403495747e25684792a2b59cb284a8d935d5 100644 (file)
@@ -105,6 +105,7 @@ GstElement* gst_bin_new                     (const gchar *name);
 
 /* add and remove elements from the bin */
 void           gst_bin_add                     (GstBin *bin, GstElement *element);
+void           gst_bin_add_many                (GstBin *bin, GstElement *element_1, ...);
 void           gst_bin_remove                  (GstBin *bin, GstElement *element);
 
 /* retrieve a single element or the list of children */
index 168783391ae65bd967db34141d599fea4381dcad..5885155480e847be4868255cb212a9858f72ab47 100644 (file)
@@ -824,12 +824,12 @@ gst_element_get_compatible_pad_filtered (GstElement *element, GstPad *pad, GstCa
  *
  * Returns: the pad to which a connection can be made
  */
-
 GstPad*                        
 gst_element_get_compatible_pad (GstElement *element, GstPad *pad)
 {
   return gst_element_get_compatible_pad_filtered (element, pad, NULL);
 }
+
 /**
  * gst_element_connect_elements:
  * @src: the element containing source pad
@@ -927,6 +927,41 @@ gst_element_connect_elements_filtered (GstElement *src, GstElement *dest,
   return FALSE;  
 }
 
+/**
+ * gst_element_connect_elements_many:
+ * @element_1: the first element in the connection chain
+ * @element_2: the second element in the connection chain
+ * @...: NULL-terminated list of elements to connect in order
+ * 
+ * Chain together a series of elements. Uses #gst_element_connect_elements.
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ **/
+/* API FIXME: this should be called gst_element_connect_many, and connect_elements
+ * should just be connect */
+gboolean
+gst_element_connect_elements_many (GstElement *element_1, GstElement *element_2, ...)
+{
+  va_list args;
+
+  g_return_val_if_fail (element_1 != NULL && element_2 != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_ELEMENT (element_1) && GST_IS_ELEMENT (element_2), FALSE);
+
+  va_start (args, element_2);
+
+  while (element_2) {
+    if (!gst_element_connect_elements (element_1, element_2))
+      return FALSE;
+    
+    element_1 = element_2;
+    element_2 = va_arg (args, GstElement*);
+  }
+
+  va_end (args);
+  
+  return TRUE;
+}
+
 /**
  * gst_element_connect_elements:
  * @src: element containing source pad
@@ -946,6 +981,7 @@ gst_element_connect_elements (GstElement *src, GstElement *dest)
 {
   return gst_element_connect_elements_filtered (src, dest, NULL);
 }
+
 /**
  * gst_element_connect_filtered:
  * @src: element containing source pad
index 2725950437b4d31e0e7d3763cabd48ed7f4dcb39..4a25e13527091f6726a02f7b3e943d1bf67e028e 100644 (file)
@@ -224,6 +224,7 @@ gboolean            gst_element_connect_filtered    (GstElement *src, const gchar *srcpadname
 void                   gst_element_disconnect          (GstElement *src, const gchar *srcpadname,
                                                         GstElement *dest, const gchar *destpadname);
 void                   gst_element_disconnect_elements (GstElement *src, GstElement *dest);
+gboolean               gst_element_connect_elements_many (GstElement *element_1, GstElement *element_2, ...);
 
 void                   gst_element_set_eos             (GstElement *element);
 
index 3802bcd77444012f910e26b7f07e8d45eb458091..7d062b3089c0998086b53733777d461d40451511 100644 (file)
@@ -1,52 +1,47 @@
 #include <stdlib.h>
 #include <gst/gst.h>
 
-int main(int argc,char *argv[]) 
+int main (int argc, char *argv[]) 
 {
   GstElement *bin, *filesrc, *decoder, *osssink;
 
-  gst_init(&argc,&argv);
+  gst_init (&argc, &argv);
 
   if (argc != 2) {
-    g_print("usage: %s <mp3 file>\n", argv[0]);
-    exit(-1);
+    g_print ("usage: %s <mp3 file>\n", argv[0]);
+    exit (-1);
   }
 
   /* create a new bin to hold the elements */
-  bin = gst_pipeline_new("pipeline");
+  bin = gst_pipeline_new ("pipeline");
 
   /* create a disk reader */
-  filesrc = gst_elementfactory_make("filesrc", "disk_source");
-  g_object_set(G_OBJECT(filesrc),"location", argv[1],NULL);
+  filesrc = gst_elementfactory_make ("filesrc", "disk_source");
+  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
 
   /* now it's time to get the decoder */
-  decoder = gst_elementfactory_make("mad","parse");
+  decoder = gst_elementfactory_make ("mad", "parse");
   if (!decoder) {
     g_print ("could not find plugin \"mad\"");
     return -1;
   }
   /* and an audio sink */
-  osssink = gst_elementfactory_make("osssink", "play_audio");
+  osssink = gst_elementfactory_make ("osssink", "play_audio");
 
   /* add objects to the main pipeline */
-  gst_bin_add(GST_BIN(bin), filesrc);
-  gst_bin_add(GST_BIN(bin), decoder);
-  gst_bin_add(GST_BIN(bin), osssink);
-
-  /* connect src to sink */
-  gst_pad_connect(gst_element_get_pad(filesrc,"src"),
-                  gst_element_get_pad(decoder,"sink"));
-  gst_pad_connect(gst_element_get_pad(decoder,"src"),
-                  gst_element_get_pad(osssink,"sink"));
+  gst_bin_add_many (GST_BIN (bin), filesrc, decoder, osssink, NULL);
 
+  /* connect the elements */
+  gst_element_connect_elements_many (filesrc, decoder, osssink, NULL);
+  
   /* start playing */
-  gst_element_set_state(bin, GST_STATE_PLAYING);
+  gst_element_set_state (bin, GST_STATE_PLAYING);
 
-  while (gst_bin_iterate(GST_BIN(bin)));
+  while (gst_bin_iterate (GST_BIN (bin)));
 
   /* stop the bin */
-  gst_element_set_state(bin, GST_STATE_NULL);
+  gst_element_set_state (bin, GST_STATE_NULL);
 
-  exit(0);
+  exit (0);
 }