tracer: add an internal ptr format for tracer serialisation
authorStefan Sauer <ensonic@users.sf.net>
Mon, 18 Jan 2016 20:12:53 +0000 (21:12 +0100)
committerStefan Sauer <ensonic@users.sf.net>
Wed, 20 Jan 2016 08:14:12 +0000 (09:14 +0100)
We need to apply the string wrapping that value serialisation does also in the
tracer logging, otherwise we can't parse nested structures.

gst/gst_private.h
gst/gstinfo.c
gst/gststructure.c
gst/gstvalue.c

index ac0b1b5..ba24b6a 100644 (file)
@@ -163,6 +163,13 @@ gboolean priv_gst_structure_parse_name (gchar * str, gchar **start, gchar ** end
 G_GNUC_INTERNAL
 gboolean priv_gst_structure_parse_fields (gchar *str, gchar ** end, GstStructure *structure);
 
+/* used in gstvalue.c and gststructure.c */
+
+#define GST_WRAPPED_PTR_FORMAT     "p\aa"
+
+G_GNUC_INTERNAL
+gchar *priv_gst_string_take_and_wrap (gchar * s);
+
 /* registry cache backends */
 G_GNUC_INTERNAL
 gboolean               priv_gst_registry_binary_read_cache     (GstRegistry * registry, const char *location);
index e891eb4..203277e 100644 (file)
@@ -819,6 +819,9 @@ gst_info_printf_pointer_extension_func (const char *format, void *ptr)
       case 'B':                /* GST_SEGMENT_FORMAT */
         s = gst_debug_print_segment (ptr);
         break;
+      case 'a':                /* GST_WRAPPED_PTR_FORMAT */
+        s = priv_gst_string_take_and_wrap (gst_debug_print_object (ptr));
+        break;
       default:
         /* must have been compiled against a newer version with an extension
          * we don't known about yet - just ignore and fallback to %p below */
index 08a82fc..659660c 100644 (file)
@@ -1974,12 +1974,13 @@ priv__gst_structure_append_template_to_gstring (GQuark field_id,
   } else if (type == G_TYPE_UINT64) {
     g_string_append (s, "%" G_GUINT64_FORMAT);
   } else if (type == GST_TYPE_STRUCTURE) {
-    g_string_append (s, "%" GST_PTR_FORMAT);
-  } else if (g_type_is_a (type, G_TYPE_ENUM)) {
+    g_string_append (s, "%" GST_WRAPPED_PTR_FORMAT);
+  } else if (g_type_is_a (type, G_TYPE_ENUM)
+      || g_type_is_a (type, G_TYPE_FLAGS)) {
     g_string_append (s, "%i");
   } else {
     GST_WARNING ("unhandled type: %s", g_type_name (type));
-    g_string_append (s, "%" GST_PTR_FORMAT);
+    g_string_append (s, "%" GST_WRAPPED_PTR_FORMAT);
   }
 
   return TRUE;
index f3ada1e..3381be2 100644 (file)
@@ -148,7 +148,6 @@ static gint gst_value_compare_with_func (const GValue * value1,
     const GValue * value2, GstValueCompareFunc compare);
 
 static gchar *gst_string_wrap (const gchar * s);
-static gchar *gst_string_take_and_wrap (gchar * s);
 static gchar *gst_string_unwrap (const gchar * s);
 
 static void gst_value_move (GValue * dest, GValue * src);
@@ -1925,7 +1924,7 @@ static gchar *
 gst_value_serialize_caps (const GValue * value)
 {
   GstCaps *caps = g_value_get_boxed (value);
-  return gst_string_take_and_wrap (gst_caps_to_string (caps));
+  return priv_gst_string_take_and_wrap (gst_caps_to_string (caps));
 }
 
 static gboolean
@@ -2067,7 +2066,7 @@ gst_value_serialize_structure (const GValue * value)
 {
   GstStructure *structure = g_value_get_boxed (value);
 
-  return gst_string_take_and_wrap (gst_structure_to_string (structure));
+  return priv_gst_string_take_and_wrap (gst_structure_to_string (structure));
 }
 
 static gboolean
@@ -2149,7 +2148,7 @@ gst_value_serialize_caps_features (const GValue * value)
 {
   GstCapsFeatures *features = g_value_get_boxed (value);
 
-  return gst_string_take_and_wrap (gst_caps_features_to_string (features));
+  return priv_gst_string_take_and_wrap (gst_caps_features_to_string (features));
 }
 
 static gboolean
@@ -2219,7 +2218,7 @@ gst_value_serialize_tag_list (const GValue * value)
 {
   GstTagList *taglist = g_value_get_boxed (value);
 
-  return gst_string_take_and_wrap (gst_tag_list_to_string (taglist));
+  return priv_gst_string_take_and_wrap (gst_tag_list_to_string (taglist));
 }
 
 
@@ -2916,8 +2915,8 @@ gst_string_wrap (const gchar * s)
 }
 
 /* Same as above, but take ownership of the string */
-static gchar *
-gst_string_take_and_wrap (gchar * s)
+gchar *
+priv_gst_string_take_and_wrap (gchar * s)
 {
   gchar *out;
   gint len = gst_string_measure_wrapping (s);