代码之家  ›  专栏  ›  技术社区  ›  Danilo Mendes

使用pygi,我如何重写与基类中的虚拟方法同名的GObject类中的虚拟方法?

  •  0
  • Danilo Mendes  · 技术社区  · 7 年前

    PushSrc 需要重写的元素 create fill 虚拟方法,但没有成功。

    问题似乎是两者 PushSrc公司 BaseSrc ,具有这些虚拟方法。

    换句话说,该代码:

    import gi
    gi.require_version('Gst', '1.0')
    gi.require_version('GstBase', '1.0')
    from gi.repository import GstBase, Gst, GObject
    Gst.init(None)
    
    
    class MyPushSrc(GstBase.PushSrc):
        def __init__(self):
            self.add_pad_template(Gst.PadTemplate.new("src",
                                                      Gst.PadDirection.SRC,
                                                      Gst.PadPresence.ALWAYS,
                                                      Gst.Caps.new_any()))
            GstBase.PushSrc.__init__(self)
    
        def do_fill(self, buf):
            return Gst.FlowReturn.OK
    
    
    GObject.type_register(MyPushSrc)
    

    此输出中的结果:

    Traceback (most recent call last):
      File "mypushsrc.py", line 8, in <module>
        class MyPushSrc(GstBase.PushSrc):
      File "/usr/lib/python3/dist-packages/gi/types.py", line 223, in __init__
        cls._setup_vfuncs()
      File "/usr/lib/python3/dist-packages/gi/types.py", line 120, in _setup_vfuncs
        ambiguous_base.__info__.get_name()
    TypeError: Method do_fill() on class GstBase.PushSrc is ambiguous with methods in base classes GstBase.PushSrc and GstBase.BaseSrc
    

    不幸的是 do_fill 在里面 只有一个论点反对三个论点 对这些虚拟方法的反思是不够的。那么,我可以做些什么来覆盖这个方法呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Philip Withnall    7 年前

    我认为这是GStreamer-Python绑定中的一个bug,目前无法解决。请参阅 upstream bug report