コード例 #1
0
ファイル: gst_gdb.py プロジェクト: pexip/gstreamer
    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)")
コード例 #2
0
ファイル: gst_gdb.py プロジェクト: zhangYiIntel/gstreamer
 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)
コード例 #3
0
ファイル: gst_gdb.py プロジェクト: pexip/gstreamer
 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
コード例 #4
0
ファイル: gst_gdb.py プロジェクト: zhangYiIntel/gstreamer
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
コード例 #5
0
ファイル: gst_gdb.py プロジェクト: zhangYiIntel/gstreamer
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()
コード例 #6
0
ファイル: gst_gdb.py プロジェクト: zhangYiIntel/gstreamer
 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"])])