0

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?

Répondre

0

Je pense qu'il s'agit d'un bogue dans les liaisons GStreamer Python qui ne peuvent actuellement pas être traitées. Voir le upstream bug report. Des solutions pourraient y être disponibles si quelqu'un travaille sur le problème.