Updated -inspect to list elements and plugin info too
authorErik Walthinsen <omega@temple-baptist.org>
Thu, 4 Jan 2001 10:47:39 +0000 (10:47 +0000)
committerErik Walthinsen <omega@temple-baptist.org>
Thu, 4 Jan 2001 10:47:39 +0000 (10:47 +0000)
Original commit message from CVS:
Updated -inspect to list elements and plugin info too

tools/gstreamer-inspect.c
tools/gstreamer-launch.c

index e8b6ee5..8d67773 100644 (file)
@@ -1,4 +1,5 @@
 #include <gst/gst.h>
+#include <string.h>
 
 // this must be built within the gstreamer dir, else this will fail
 #include <gst/gstpropsprivate.h>
@@ -81,8 +82,7 @@ struct _GstPropsEntry {
 };
 */
 
-int main(int argc,char *argv[]) {
-  GstElementFactory *factory;
+gint print_element_info(GstElementFactory *factory) {
   GstElement *element;
   GstElementClass *gstelement_class;
   GList *pads, *caps;
@@ -93,15 +93,11 @@ int main(int argc,char *argv[]) {
   guint32 *flags;
   gint num_args,i;
 
-  gst_init(&argc,&argv);
-
-  factory = gst_elementfactory_find(argv[1]);
-  if (!factory) {
-    g_print ("no elementfactory for element '%s' exists\n", argv[1]);
+  element = gst_elementfactory_create(factory,"element");
+  if (!element) {
+    g_print ("couldn't construct element for some reason\n");
     return -1;
   }
-         
-  element = gst_elementfactory_create(factory,argv[1]);
   gstelement_class = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
 
   printf("Factory Details:\n");
@@ -271,3 +267,103 @@ int main(int argc,char *argv[]) {
 
   return 0;
 }
+
+void print_element_list() {
+  GList *plugins, *factories;
+  GstPlugin *plugin;
+  GstElementFactory *factory;
+
+  plugins = gst_plugin_get_list();
+  while (plugins) {
+    plugin = (GstPlugin*)(plugins->data);
+    plugins = g_list_next (plugins);
+
+//    printf("%s:\n",plugin->name);
+
+    factories = gst_plugin_get_factory_list(plugin);
+    while (factories) {
+      factory = (GstElementFactory*)(factories->data);
+      factories = g_list_next (factories);
+
+      printf("%s: %s: %s\n",plugin->name,factory->name,factory->details->longname);
+    }
+
+//    printf("\n");
+  }
+}
+
+
+void print_plugin_info(GstPlugin *plugin) {
+  GList *factories;
+  GstElementFactory *factory;
+
+  printf("Plugin Details:\n");
+  printf("  Name:\t\t%s\n",plugin->name);
+  printf("  Long Name:\t%s\n",plugin->longname);
+  printf("  Filename:\t%s\n",plugin->filename);
+  printf("\n");
+
+  if (plugin->numelements) {
+    printf("Element Factories:\n");
+
+    factories = gst_plugin_get_factory_list(plugin);
+    while (factories) {
+      factory = (GstElementFactory*)(factories->data);
+      factories = g_list_next(factories);
+
+      printf("  %s: %s\n",factory->name,factory->details->longname);
+    }
+  }
+  printf("\n");
+}
+
+
+int main(int argc,char *argv[]) {
+  GstElementFactory *factory;
+  GstPlugin *plugin;
+  gchar *so;
+
+  gst_init(&argc,&argv);
+
+  // if no arguments, print out list of elements
+  if (argc == 1) {
+    print_element_list(); 
+
+  // else we try to get a factory
+  } else {
+    // first check for help
+    if (strstr(argv[1],"-help")) {
+      printf("Usage: %s\t\t\tList all registered elements\n",argv[0]);
+      printf("       %s element-name\tShow element details\n",argv[0]);
+      printf("       %s plugin-name[.so]\tShow information about plugin\n",argv[0]);
+      return 0;
+    }
+
+    // only search for a factory if there's not a '.so'
+    if (! strstr(argv[1],".so")) {
+      factory = gst_elementfactory_find (argv[1]);
+
+      // if there's a factory, print out the info
+      if (factory)
+        return print_element_info(factory);
+    } else {
+      // strip the .so
+      so = strstr(argv[1],".so");
+      so[0] = '\0';
+    }
+
+    // otherwise assume it's a plugin
+    plugin = gst_plugin_find (argv[1]);
+
+    // if there is such a plugin, print out info
+    if (plugin) {
+      print_plugin_info(plugin);
+
+    } else {
+      printf("no such element or plugin '%s'\n",argv[1]);
+      return -1;
+    }
+  }
+
+  return 0;
+}
index f6cb167..dd72053 100644 (file)
@@ -144,6 +144,18 @@ gint parse_cmdline(int argc,char *argv[],GstBin *parent) {
         else DEBUG("have src pad %s:%s\n",GST_DEBUG_PAD_NAME(srcpad));
       }
 
+    // argument with = in it
+    } else if (strstr(arg, "=")) {
+      gchar * argname;
+      gchar * argval;
+      gchar * pos = strstr(arg, "=");
+      // we have an argument
+      argname = g_strndup(arg, pos - arg);
+      argval = pos+1;
+      DEBUG("attempting to set argument '%s'\n", arg);
+      gtk_object_set(GTK_OBJECT(previous),argname,argval,NULL);
+      g_free(argname);
+
     // element or argument, or beginning of bin or thread
     } else {
       DEBUG("have element or bin/thread\n");
@@ -161,18 +173,6 @@ gint parse_cmdline(int argc,char *argv[],GstBin *parent) {
 
         i += parse_cmdline(argc - i, argv + i + 1, GST_BIN (element));
 
-      } else if (strstr(arg, "=")) {
-       gchar * argname;
-       gchar * argval;
-       gchar * pos = strstr(arg, "=");
-        // we have an argument
-       argname = g_strndup(arg, pos - arg);
-       argval = pos+1;
-       DEBUG("attempting to set argument '%s'\n", arg);
-       gtk_object_set(GTK_OBJECT(previous),argname,argval,NULL);
-       g_free(argname);
-       i++;
-       continue;
       } else {
        // we have an element
         DEBUG("attempting to create element '%s'\n",arg);
@@ -351,7 +351,8 @@ int main(int argc,char *argv[]) {
 
   VERBOSE("RUNNING pipeline\n");
   gst_element_set_state(pipeline,GST_STATE_PLAYING);
-  for (i=0; i < 1000; i++)
+
+  while(1)
     gst_bin_iterate (GST_BIN (pipeline));
 
   fprintf(stderr,"\n");