0

PythonでGObjectイントロスペクションを使用すると、createまたはfill仮想メソッドをオーバーライドする必要があるカスタムPushSrc要素を作成しようとしていますが、成功することはありません。pygiを使って、基本クラスの仮想メソッドと同じ名前のGObjectクラスから仮想メソッドをどのように上書きできますか?

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 

残念ながら、PushSrcdo_fillは引数を1つだけ持っているという事実は、BaseSrc中3はに十分ではありませんagainsイントロスペクションはこれらの仮想メソッドと異なります。では、このメソッドをオーバーライドするにはどうすればよいですか?

答えて

0

これは現在処理できないGStreamer Pythonバインディングのバグだと思います。 upstream bug reportを参照してください。誰かが問題に取り組んでいれば、ソリューションがそこで利用可能になるかもしれません。

関連する問題