Используя pygi, как я могу переопределить виртуальный метод из класса GObject, который имеет то же имя, что и виртуальный метод в его базовом классе?

Используя GObject Introspection в Python, я пытаюсь создать собственный элемент 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 в PushSrc имеет только один аргумент против трех в BaseSrc, недостаточен для того, чтобы интроспекция различала эти виртуальные методы. Итак, что я могу сделать, чтобы переопределить этот метод?


person Danilo Mendes    schedule 04.08.2017    source источник


Ответы (1)


Я думаю, что это ошибка в привязках GStreamer Python, которую в настоящее время нельзя обойти. См. отчет об ошибке. Там могут появиться решения, если кто-то будет работать над проблемой.

person Philip Withnall    schedule 04.08.2017