summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorErik Walthinsen <omega@temple-baptist.org>2001-01-04 10:47:39 +0000
committerErik Walthinsen <omega@temple-baptist.org>2001-01-04 10:47:39 +0000
commite318439f64a262013874b1477978fa7d7c90ff16 (patch)
tree401c33eb1b2fe06389b3392bb83a5f1700a2e04a /tools
parent9e0b75c9371927c0d9677e09f59fa8b4d799a266 (diff)
Updated -inspect to list elements and plugin info too
Original commit message from CVS: Updated -inspect to list elements and plugin info too
Diffstat (limited to 'tools')
-rw-r--r--tools/gstreamer-inspect.c114
-rw-r--r--tools/gstreamer-launch.c27
2 files changed, 119 insertions, 22 deletions
diff --git a/tools/gstreamer-inspect.c b/tools/gstreamer-inspect.c
index e8b6ee5d35..8d67773534 100644
--- a/tools/gstreamer-inspect.c
+++ b/tools/gstreamer-inspect.c
@@ -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;
+}
diff --git a/tools/gstreamer-launch.c b/tools/gstreamer-launch.c
index f6cb1678bb..dd72053cb5 100644
--- a/tools/gstreamer-launch.c
+++ b/tools/gstreamer-launch.c
@@ -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");