En utilisant GObject Introspection en Python, j'essaie de créer un élément personnalisé PushSrc
, qui nécessite le remplacement des méthodes virtuelles create
ou fill
, sans succès.En utilisant pygi, comment remplacer une méthode virtuelle d'une classe GObject qui a le même nom qu'une méthode virtuelle dans sa classe de base?
Le problème semble être que les deux PushSrc
et sa classe de base, BaseSrc
, a ces méthodes virtuelles.
En d'autres termes, ce code:
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)
résultats dans cette sortie:
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
Malheureusement, le fait que do_fill
dans PushSrc
a un seul argument agains trois BaseSrc
ne suffit pas à l'introspection diffèrent de ces méthodes virtuelles. Alors, que puis-je faire pour remplacer cette méthode?