tracer: latency: Fix bug when storing latency probe event
authorJulian Bouzas <julian.bouzas@collabora.com>
Wed, 10 Apr 2019 13:13:53 +0000 (09:13 -0400)
committerJulian Bouzas <julian.bouzas@collabora.com>
Wed, 10 Apr 2019 13:16:03 +0000 (09:16 -0400)
The pad name sotred in the latency event has no longer the name of the element,
so we have to get the element Id, element name and pad name values from the data
structure and compare all 3 values.

plugins/tracers/gstlatency.c

index c39caca927cb0263a2328d9b91fc74aae3574c5e..b5c944d62514b773ceef538e1db82cec4148e6f6 100644 (file)
@@ -405,19 +405,32 @@ do_push_event_pre (GstTracer * self, guint64 ts, GstPad * pad, GstEvent * ev)
 
     if (gst_structure_get_name_id (data) == sub_latency_probe_id) {
       const GValue *value;
-      gchar *pad_name = g_strdup_printf ("%s_%s",
-          GST_DEBUG_PAD_NAME (peer_pad));
-
+      gchar *element_id = g_strdup_printf ("%p", peer_parent);
+      gchar *element_name = gst_element_get_name (peer_parent);
+      gchar *pad_name = gst_pad_get_name (peer_pad);
+      const gchar *value_element_id, *value_element_name, *value_pad_name;
+
+      /* Get the element id, element name and pad name from data */
+      value = gst_structure_id_get_value (data, latency_probe_element_id);
+      value_element_id = g_value_get_string (value);
+      value = gst_structure_id_get_value (data, latency_probe_element);
+      value_element_name = g_value_get_string (value);
       value = gst_structure_id_get_value (data, latency_probe_pad);
+      value_pad_name = g_value_get_string (value);
+
+      if (!g_str_equal (value_element_id, element_id) ||
+          !g_str_equal (value_element_name, element_name) ||
+          !g_str_equal (value_pad_name, pad_name)) {
+        GST_DEBUG ("%s_%s: Storing latency event", GST_DEBUG_PAD_NAME (pad));
 
-      if (!g_str_equal (g_value_get_string (value), pad_name)) {
-        GST_DEBUG ("%s: Storing sub-latency event", pad_name);
         if (!g_object_get_qdata ((GObject *) pad, sub_latency_probe_id))
           g_object_set_qdata ((GObject *) pad, sub_latency_probe_id,
               gst_event_ref (ev));
       }
 
       g_free (pad_name);
+      g_free (element_name);
+      g_free (element_id);
     }
   }
 }