使用 pygi,如何重写 GObject class 中的虚方法,该方法与基类 class 中的虚方法同名?
Using pygi, how can I override a virtual method from a GObject class that has the same name as a virtual method in its base class?
在 Python 中使用 GObject Introspection,我正在尝试创建自定义 PushSrc
元素,这需要覆盖 create
或 fill
虚拟方法,但没有成功。
问题似乎是 PushSrc
及其基础 class、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
不幸的是,PushSrc
中的 do_fill
只有一个参数,而 BaseSrc
中只有三个参数,这一事实不足以反省这些虚拟方法的不同之处。那么,我该怎么做才能覆盖此方法?
我认为这是 GStreamer Python 绑定中的错误,目前无法解决。见upstream bug report。如果有人解决这个问题,那里可能会提供解决方案。
在 Python 中使用 GObject Introspection,我正在尝试创建自定义 PushSrc
元素,这需要覆盖 create
或 fill
虚拟方法,但没有成功。
问题似乎是 PushSrc
及其基础 class、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
不幸的是,PushSrc
中的 do_fill
只有一个参数,而 BaseSrc
中只有三个参数,这一事实不足以反省这些虚拟方法的不同之处。那么,我该怎么做才能覆盖此方法?
我认为这是 GStreamer Python 绑定中的错误,目前无法解决。见upstream bug report。如果有人解决这个问题,那里可能会提供解决方案。