#include #include #include #include #include #include static int launch_argc; static char **launch_argv; #ifndef USE_GLIB2 GtkWidget *window; GtkWidget *gtk_socket; #endif typedef void (*found_handler) (GstElement *element, gint xid, void *priv); void arg_search (GstBin *bin, gchar *argname, found_handler handler, void *priv) { GList *children; gchar *ccargname; ccargname = g_strdup_printf("::%s",argname); children = gst_bin_get_list(bin); #ifndef USE_GLIB2 while (children) { GstElement *child; child = GST_ELEMENT (children->data); children = g_list_next (children); if (GST_IS_BIN (child)) arg_search (GST_BIN (child), argname, handler, priv); else { GtkType type; type = GTK_OBJECT_TYPE (child); while (type != GTK_TYPE_INVALID) { GtkArg *args; guint32 *flags; guint num_args,i; args = gtk_object_query_args(type,&flags,&num_args); for (i=0;ipropid)); switch (entry->propstype) { case GST_PROPS_INT_ID: g_print ("%d\n", entry->data.int_data); break; case GST_PROPS_STRING_ID: g_print ("%s\n", entry->data.string_data.string); break; case GST_PROPS_FLOAT_ID: g_print ("%f\n", entry->data.float_data); break; default: g_print ("unknown\n"); } } static void event_func (GstElement *element, GstEvent *event) { GstProps *props; if (event == NULL) return; if (GST_EVENT_TYPE (event) == GST_EVENT_INFO) { props = GST_EVENT_INFO_PROPS (event); g_list_foreach (props->properties, print_props, GST_EVENT_SRC (event)); } } int main(int argc, char *argv[]) { GstElement *pipeline; char **argvn; gchar *cmdline; int i; gboolean save_pipeline = FALSE; gboolean run_pipeline = TRUE; gchar *savefile = ""; free (malloc (8)); /* -lefence */ gst_init (&argc, &argv); if (argc >= 3 && !strcmp(argv[1], "-o")) { save_pipeline = TRUE; run_pipeline = FALSE; savefile = argv[2]; argv[2] = argv[0]; argv+=2; argc-=2; } launch_argc = argc; launch_argv = argv; pipeline = gst_pipeline_new ("launch"); g_signal_connect (G_OBJECT (pipeline), "event", G_CALLBACK (event_func), NULL); /* make a null-terminated version of argv */ argvn = g_new0 (char *,argc); memcpy (argvn, argv+1, sizeof (char*) * (argc-1)); /* escape spaces */ for (i=0; i