gdb: handle ghost and proxy pads while looking for the top-level element
authorMichael Olbrich <m.olbrich@pengutronix.de>
Sat, 11 May 2019 18:55:36 +0000 (20:55 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 24 May 2019 10:37:50 +0000 (10:37 +0000)
The parent object for pads is not always a GstElement. Handle GstProxyPad
parents as well.

libs/gst/helpers/gst_gdb.py

index 443c3cb..4e483ed 100644 (file)
@@ -269,9 +269,15 @@ def gst_object_pipeline(obj):
             if g_inherits_type(obj, "GstElement") and \
                GdbGstElement(obj) not in GdbGstElement(tmp).children():
                 break
-            if g_inherits_type(obj, "GstPad") and \
-               GdbGstPad(obj) not in GdbGstElement(tmp).pads():
-                break
+            if g_inherits_type(obj, "GstPad"):
+                pad = GdbGstPad(obj)
+                if g_inherits_type(tmp, "GstElement"):
+                    if pad not in GdbGstElement(tmp).pads():
+                        break
+                elif g_inherits_type(tmp, "GstProxyPad"):
+                    t = gdb.lookup_type("GstProxyPad").pointer()
+                    if pad != GdbGstPad(tmp.cast(t)["priv"]["internal"]):
+                        break
             obj = tmp
     except gdb.MemoryError:
         pass