def print(self, indent): _gdb_write(indent, "GstBuffer: (0x%x)" % self.val) indent += 1 self.print_optional(indent, "pool", 0) self.print_optional(indent, "pts", GST_CLOCK_TIME_NONE, format_time) self.print_optional(indent, "dts", GST_CLOCK_TIME_NONE, format_time) self.print_optional(indent, "duration", GST_CLOCK_TIME_NONE, format_time) self.print_optional(indent, "offset", GST_CLOCK_TIME_NONE) self.print_optional(indent, "offset_end", GST_CLOCK_TIME_NONE) impl = self.val.cast(gdb.lookup_type("GstBufferImpl").pointer()) meta_item = impl['item'] if meta_item: _gdb_write(indent, "Metas:") indent += 1 while meta_item: meta = meta_item['meta'] meta_type_name = g_type_to_name(meta['info']['type']) _gdb_write(indent, "%s:" % meta_type_name) indent += 1 meta_info = str(meta.cast(gdb.lookup_type(meta_type_name))) for l in meta_info.split('\n'): _gdb_write(indent, l) indent -= 1 meta_item = meta_item['next'] else: _gdb_write(indent, "(No meta)")
def to_string(self): try: inst = self.val.cast(gdb.lookup_type("GstMiniObject").pointer()) gtype = inst["type"] name = g_type_to_name(gtype) return "0x%x [%s]" % (long(self.val), name) except RuntimeError: return "0x%x" % long(self.val)
def __str__(self): try: value = self.value() tname = self.fundamental_typename() gvalue_type = gdb.lookup_type("GValue") if tname is None: v = "<None>" elif tname == "GstFraction": v = "%d/%d" % (value[0], value[1]) elif tname == "GstBitmask": v = "0x%016x" % long(value) elif tname == "gboolean": v = "false" if int(value) == 0 else "true" elif tname == "GstFlagSet": v = "%x:%x" % (value[0], value[1]) elif tname == "GstIntRange": rmin = int(value[0]["v_uint64"]) >> 32 rmax = int(value[0]["v_uint64"]) & 0xffffffff step = int(value[1]["v_int"]) if step == 1: v = "[ %d, %d ]" % (rmin, rmax) else: v = "[ %d, %d, %d ]" % (rmin * step, rmax * step, step) elif tname == "GstFractionRange": v = "[ %s, %s ]" % (GdbGValue(value[0]), GdbGValue(value[1])) elif tname in ("GstValueList", "GstValueArray"): if gvalue_type.fields()[1].type == value.type: gdb_type = gdb.lookup_type("GArray").pointer() value = value[0]["v_pointer"].cast(gdb_type) v = "<" for l in _g_array_iter(value, gvalue_type): v += " " if v == "<" else ", " v += str(GdbGValue(l)) v += " >" elif tname == "GEnum": v = "%s(%s)" % (g_type_to_name( g_type_to_typenode(self.val["g_type"])), value["v_int"]) else: try: v = value.string() except RuntimeError: # it is not a string-like type if gvalue_type.fields()[1].type == value.type: # don't print the raw GValue union v = "<unknown type: %s>" % tname else: v = str(value) except gdb.MemoryError: v = "<inaccessible memory at 0x%x>" % int(self.val) return v
def g_inherits_type(val, typename): if is_gst_type(val, "GstObject"): gtype = _g_type_from_instance(val) if gtype is None: return False typenode = g_type_to_typenode(gtype) elif is_gst_type(val, "GstMiniObject"): mini = val.cast(gdb.lookup_type("GstMiniObject").pointer()) try: typenode = mini["type"].cast(gdb.lookup_type("TypeNode").pointer()) except gdb.MemoryError: return False else: return False for i in range(typenode["n_supers"]): if g_type_to_name(typenode["supers"][i]) == typename: return True return False
def _g_value_get_value(val): typenode = g_type_to_typenode(val["g_type"]) if not typenode: return None tname = g_quark_to_string(typenode["qname"]) fname = g_type_to_name(typenode["supers"][int(typenode["n_supers"])]) if fname in ("gchar", "guchar", "gboolean", "gint", "guint", "glong", "gulong", "gint64", "guint64", "gfloat", "gdouble", "gpointer", "GFlags"): try: t = gdb.lookup_type(tname).pointer() except RuntimeError: t = gdb.lookup_type(fname).pointer() elif fname == "gchararray": t = gdb.lookup_type("char").pointer().pointer() elif fname == "GstBitmask": t = gdb.lookup_type("guint64").pointer() elif fname == "GstFlagSet": t = gdb.lookup_type("guint").pointer().pointer() return val["data"].cast(t) elif fname == "GstFraction": t = gdb.lookup_type("gint").pointer().pointer() return val["data"].cast(t) elif fname == "GstFractionRange": t = gdb.lookup_type("GValue").pointer().pointer() elif fname == "GstValueList": t = gdb.lookup_type("GArray").pointer().pointer() elif fname in ("GBoxed", "GObject"): try: t = gdb.lookup_type(tname).pointer().pointer() except RuntimeError: t = gdb.lookup_type(tname).pointer().pointer() else: return val["data"] return val["data"].cast(t).dereference()
def fundamental_typename(self): typenode = g_type_to_typenode(self.val["g_type"]) if not typenode: return None return g_type_to_name(typenode["supers"][int(typenode["n_supers"])])