]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/commitdiff
Improve bin graph dumping, by using the envvar to specify a path.
authorStefan Kost <ensonic@users.sourceforge.net>
Mon, 29 Oct 2007 13:46:25 +0000 (13:46 +0000)
committerStefan Kost <ensonic@users.sourceforge.net>
Mon, 29 Oct 2007 13:46:25 +0000 (13:46 +0000)
Original commit message from CVS:
* docs/gst/running.xml:
* gst/gst.c:
* gst/gstdebugutils.c:
* gst/gstdebugutils.h:
* tools/gst-launch.c:
Improve bin graph dumping, by using the envvar to specify a path.
Rename the envvar to GST_DEBUG_DUMP_DOT_DIR.

ChangeLog
docs/gst/running.xml
gst/gst.c
gst/gstdebugutils.c
gst/gstdebugutils.h
tools/gst-launch.c

index 2d3c2713e59b313e52d31d52b45aafa1a6055313..fa19c958d82ee13df6028c11a09f17746313f201 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-10-29  Stefan Kost  <ensonic@users.sf.net>
+
+       * docs/gst/running.xml:
+       * gst/gst.c:
+       * gst/gstdebugutils.c:
+       * gst/gstdebugutils.h:
+       * tools/gst-launch.c:
+         Improve bin graph dumping, by using the envvar to specify a path.
+         Rename the envvar to GST_DEBUG_DUMP_DOT_DIR.
+
 2007-10-29  Tim-Philipp Müller  <tim at centricular dot net>
 
        * plugins/elements/gsttypefindelement.c:
index fd282b30212ac033493356e2f2084d0ce139bc9c..742279f29e703bed639c6a1152994ec5a866fcce 100644 (file)
@@ -180,12 +180,13 @@ for the output to be compressed much better than with colours turned on.
 
 </formalpara>
 
-<formalpara id="GST_DEBUG_DUMP_DOT_FILES">
-  <title><envar>GST_DEBUG_DUMP_DOT_FILES</envar></title>
+<formalpara id="GST_DEBUG_DUMP_DOT_DIR">
+  <title><envar>GST_DEBUG_DUMP_DOT_DIR</envar></title>
 
   <para>
-Set this environment variable to any value ("1" typically) to turn on all
-#GST_DEBUG_BIN_TO_DOT_FILE or #GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS calls.
+Set this environment variable to a path to turn on all
+#GST_DEBUG_BIN_TO_DOT_FILE or #GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS calls
+and have the dot files in that location.
   </para>
 
 </formalpara>
index 12b99c6fc84a040184900004af10f1a9720b97dc..9573af10b89e99a6f25ef568ecaa9aa082b7abc7 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -134,7 +134,7 @@ static GList *plugin_paths = NULL;      /* for delayed processing in post_init *
 #endif
 
 extern gint _gst_trace_on;
-extern gboolean _gst_debug_dump_dot_files_on;
+extern const gchar *_gst_debug_dump_dot_dir;
 
 /* defaults */
 #ifdef HAVE_FORK
@@ -587,8 +587,7 @@ init_pre (GOptionContext * context, GOptionGroup * group, gpointer data,
       parse_debug_list (debug_list);
     }
 
-    if (g_getenv ("GST_DEBUG_DUMP_DOT_FILES") != NULL)
-      _gst_debug_dump_dot_files_on = TRUE;
+    _gst_debug_dump_dot_dir = g_getenv ("GST_DEBUG_DUMP_DOT_DIR");
   }
 #endif
   /* This is the earliest we can make stuff show up in the logs.
index 617f460e0e3829a434e8048a2be59cd05721cf6b..25b8025c4d5f04c3632a84d02107ca358a71ca86 100644 (file)
@@ -37,7 +37,7 @@
 
 /*** PIPELINE GRAPHS **********************************************************/
 
-gboolean _gst_debug_dump_dot_files_on = FALSE;
+const gchar *_gst_debug_dump_dot_dir = NULL;
 extern GstClockTime _gst_info_start_time;
 
 static gchar *
@@ -402,7 +402,7 @@ debug_dump_element (GstBin * bin, GstDebugGraphDetails details, FILE * out,
 /*
  * _gst_debug_bin_to_dot_file:
  * @bin: the top-level pipeline that should be analyzed
- * @file_name: output filename (e.g. "/tmp/metadata.dot")
+ * @file_name: output base filename (e.g. "myplayer")
  *
  * To aid debugging applications one can use this method to write out the whole
  * network of gstreamer elements that form the pipeline into an dot file.
@@ -415,15 +415,24 @@ void
 _gst_debug_bin_to_dot_file (GstBin * bin, GstDebugGraphDetails details,
     const gchar * file_name)
 {
+  gchar *full_file_name = NULL;
   FILE *out;
 
   g_return_if_fail (GST_IS_BIN (bin));
-  g_return_if_fail (file_name != NULL);
 
-  if (!_gst_debug_dump_dot_files_on)
+  if (!_gst_debug_dump_dot_dir)
     return;
 
-  if ((out = fopen (file_name, "wb"))) {
+  if (!file_name) {
+    file_name = g_get_application_name ();
+    if (!file_name)
+      file_name = "unnamed";
+  }
+
+  full_file_name = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s.dot",
+      _gst_debug_dump_dot_dir, file_name);
+
+  if ((out = fopen (full_file_name, "wb"))) {
     gchar *state_name = NULL;
     gchar *param_name = NULL;
 
@@ -459,59 +468,43 @@ _gst_debug_bin_to_dot_file (GstBin * bin, GstDebugGraphDetails details,
     fprintf (out, "}\n");
     fclose (out);
   }
-  GST_INFO ("wrote bin graph to : '%s'", file_name);
+  GST_INFO ("wrote bin graph to : '%s'", full_file_name);
+  g_free (full_file_name);
 }
 
 /*
  * _gst_debug_bin_to_dot_file_with_ts:
  * @bin: the top-level pipeline that should be analyzed
- * @file_tmpl: output filename template
- *             (e.g. "/tmp/metadata.%" GST_TIME_FORMAT ".dot")
+ * @file_name: output base filename (e.g. "myplayer")
  *
- * This works like _gst_debug_bin_to_dot_file(), but fills the filename template
- * with the timestamp, so that it can be used to take multiple snapshots.
+ * This works like _gst_debug_bin_to_dot_file(), but adds the current timestamp
+ * to the filename, so that it can be used to take multiple snapshots.
  */
 void
 _gst_debug_bin_to_dot_file_with_ts (GstBin * bin, GstDebugGraphDetails details,
-    const gchar * file_tmpl)
+    const gchar * file_name)
 {
-  gchar *file_name = NULL;
-  const gchar *pos;
+  gchar *ts_file_name = NULL;
   GTimeVal now;
   GstClockTime elapsed;
-  guint fmt_ct = 0;
 
   g_return_if_fail (GST_IS_BIN (bin));
-  g_return_if_fail (file_tmpl != NULL);
-
-  /* check file-name template */
-  pos = strchr (file_tmpl, '%');
-  if (pos) {
-    do {
-      pos++;
-      if (*pos != '\0') {
-        if (*pos != '%')
-          fmt_ct++;
-        pos++;
-      }
-      pos = strchr (pos, '%');
-    } while (pos);
-  }
-  if (fmt_ct == 0) {
-    GST_WARNING ("file template has no valid placeholder");
-    return;
-  } else if (fmt_ct != 4) {
-    GST_WARNING ("file template must have 4 placeholders, but has %d", fmt_ct);
-    return;
+
+  if (!file_name) {
+    file_name = g_get_application_name ();
+    if (!file_name)
+      file_name = "unnamed";
   }
 
   /* add timestamp */
   g_get_current_time (&now);
   elapsed = GST_TIMEVAL_TO_TIME (now) - _gst_info_start_time;
-  file_name = g_strdup_printf (file_tmpl, GST_TIME_ARGS (elapsed));
+  ts_file_name =
+      g_strdup_printf ("%" GST_TIME_FORMAT "-%s", GST_TIME_ARGS (elapsed),
+      file_name);
 
-  _gst_debug_bin_to_dot_file (bin, details, file_name);
-  g_free (file_name);
+  _gst_debug_bin_to_dot_file (bin, details, ts_file_name);
+  g_free (ts_file_name);
 }
 
 #endif /* GST_DISABLE_GST_DEBUG */
index 3613d826c9b303ebe42d221b2d42a6ed55b46400..d343de3d7eaed7b52604694e5fcbccd64db1a7c2 100644 (file)
@@ -60,7 +60,7 @@ void _gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails detai
  * GST_DEBUG_BIN_TO_DOT_FILE:
  * @bin: the top-level pipeline that should be analyzed
  * @details: graph-details to show
- * @file_name: output filename (e.g. "/tmp/metadata.dot")
+ * @file_name: output base filename (e.g. "myplayer")
  *
  * To aid debugging applications one can use this method to write out the whole
  * network of gstreamer elements that form the pipeline into an dot file.
@@ -71,7 +71,7 @@ void _gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails detai
  *
  * The macro is only active if gstreamer is configured with
  * &quot;--gst-enable-gst-debug&quot; and the environment variable
- * GST_DEBUG_DUMP_DOT_FILES is set (e.g. to 1).
+ * GST_DEBUG_DUMP_DOT_DIR is set to a basepath (e.g. /tmp).
  */
 #define GST_DEBUG_BIN_TO_DOT_FILE(bin, details, file_name) _gst_debug_bin_to_dot_file (bin, details, file_name)
 
@@ -79,11 +79,10 @@ void _gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails detai
  * GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS:
  * @bin: the top-level pipeline that should be analyzed
  * @details: graph-details to show
- * @file_tmpl: output filename template
- *             (e.g. "/tmp/metadata.%" GST_TIME_FORMAT ".dot")
+ * @file_name: output base filename (e.g. "myplayer")
  *
- * This works like _gst_debug_bin_to_dot_file(), but fills the filename template
- * with the timestamp, so that it can be used to take multiple snapshots.
+ * This works like _gst_debug_bin_to_dot_file(), but adds the current timestamp
+ * to the filename, so that it can be used to take multiple snapshots.
  */
 #define GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(bin, details, file_tmpl) _gst_debug_bin_to_dot_file_with_ts (bin, details, file_tmpl)
 
index b0b5187a253840b30cd5d2d49b73eb3a2598d3bc..cedc6244adad060340a883ebf0010db0358d458e 100644 (file)
@@ -452,8 +452,7 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
 
         /* dump graph on warning */
         GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline),
-            GST_DEBUG_GRAPH_SHOW_ALL,
-            "/tmp/gst-launch.warning.%" GST_TIME_FORMAT ".dot");
+            GST_DEBUG_GRAPH_SHOW_ALL, "gst-launch.warning");
 
         gst_message_parse_warning (message, &gerror, &debug);
         g_print (_("WARNING: from element %s: %s\n"), name, gerror->message);
@@ -471,8 +470,7 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
 
         /* dump graph on error */
         GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline),
-            GST_DEBUG_GRAPH_SHOW_ALL,
-            "/tmp/gst-launch.error.%" GST_TIME_FORMAT ".dot");
+            GST_DEBUG_GRAPH_SHOW_ALL, "gst-launch.error");
 
         gst_message_parse_error (message, &gerror, &debug);
         gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
@@ -488,7 +486,7 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
         gst_message_parse_state_changed (message, &old, &new, &pending);
 
         /* debug each state change
-           GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(pipeline),GST_DEBUG_GRAPH_SHOW_ALL,"/tmp/gst-launch.%" GST_TIME_FORMAT ".dot");
+           GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "gst-launch");
          */
 
         /* we only care about pipeline state change messages */
@@ -496,8 +494,13 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
           break;
 
         /* debug only overall state changes
-           FIXME: add statename to name template: gst_element_state_get_name(new);
-           GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(pipeline),GST_DEBUG_GRAPH_SHOW_ALL,"/tmp/gst-launch.%" GST_TIME_FORMAT ".dot");
+           {
+           gchar *dump_name;
+
+           dump_name = g_strdup_printf ("gst-launch.%s",gst_element_state_get_name (new);
+           GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline), GST_DEBUG_GRAPH_SHOW_ALL, dump_name);
+           g_free (dump_name);
+           }
          */
 
         /* ignore when we are buffering since then we mess with the states