From b923b7f901448aa2d19d3da73c7144bd674d995b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 28 Feb 2011 14:56:23 +0000 Subject: [PATCH] tools: print "pad-added", "pad-removed" and "no-more-pads" signals for elements with sometimes pads It's often not obvious to people that elements like e.g. uridecodebin (or demuxers) automatically support the standard signals of the GstElement class, so let's print the useful pad-related ones for elements with sometimes pads. --- tools/gst-inspect.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c index a43e8ac..c86285e 100644 --- a/tools/gst-inspect.c +++ b/tools/gst-inspect.c @@ -880,13 +880,19 @@ print_pad_info (GstElement * element) } } -#if 0 -static gint -compare_signal_names (GSignalQuery * a, GSignalQuery * b) +static gboolean +has_sometimes_template (GstElement * element) { - return strcmp (a->signal_name, b->signal_name); + GstElementClass *klass = GST_ELEMENT_GET_CLASS (element); + GList *l; + + for (l = klass->padtemplates; l != NULL; l = l->next) { + if (GST_PAD_TEMPLATE (l->data)->presence == GST_PAD_SOMETIMES) + return TRUE; + } + + return FALSE; } -#endif static void print_signal_info (GstElement * element) @@ -901,6 +907,22 @@ print_signal_info (GstElement * element) for (k = 0; k < 2; k++) { found_signals = NULL; + + /* For elements that have sometimes pads, also list a few useful GstElement + * signals. Put these first, so element-specific ones come later. */ + if (k == 0 && has_sometimes_template (element)) { + query = g_new0 (GSignalQuery, 1); + g_signal_query (g_signal_lookup ("pad-added", GST_TYPE_ELEMENT), query); + found_signals = g_slist_append (found_signals, query); + query = g_new0 (GSignalQuery, 1); + g_signal_query (g_signal_lookup ("pad-removed", GST_TYPE_ELEMENT), query); + found_signals = g_slist_append (found_signals, query); + query = g_new0 (GSignalQuery, 1); + g_signal_query (g_signal_lookup ("no-more-pads", GST_TYPE_ELEMENT), + query); + found_signals = g_slist_append (found_signals, query); + } + for (type = G_OBJECT_TYPE (element); type; type = g_type_parent (type)) { if (type == GST_TYPE_ELEMENT || type == GST_TYPE_OBJECT) break; -- 2.7.4