QVideoFilterRunnable导致PySide2出现分段错误

时间:2018-08-21 11:34:35

标签: python qml pyside2 qvideofilterrunnable

我正在尝试使用OpenCV处理图像时显示视频供稿。我已经有一个脚本使用OpenCV和Python进行图像处理,但是尝试将任何过滤器添加到VideoOutput会导致分割错误。 documentation仅具有C ++的示例,但我试图完全在Python中复制它。

这是我的Python文件(example.py):

from PySide2.QtWidgets import QApplication
from PySide2.QtQml import qmlRegisterType
from PySide2.QtQuick import QQuickView
from PySide2.QtMultimedia import QAbstractVideoFilter, QVideoFilterRunnable
from PySide2.QtCore import QUrl

class ExampleFilterRunnable(QVideoFilterRunnable):
    def run(self, frame, surfaceFormat, flags):
        return frame

class ExampleFilter(QAbstractVideoFilter):
    def createFilterRunnable(self):
        return ExampleFilterRunnable()


app = QApplication([])
qmlRegisterType(ExampleFilter, "ExampleFilter", 1, 0, "ExampleFilter")
view = QQuickView()
url = QUrl("example.qml")

view.setSource(url)
view.setResizeMode(view.SizeRootObjectToView)
view.show()
app.exec_()

和QML(example.qml):

import QtQuick 2.0
import QtQuick.Controls 2.3
import QtMultimedia 5.8
import ExampleFilter 1.0

Rectangle {
    id: rectangle
    width: 800
    height: 600
    color: "black"

    ExampleFilter {
        id: filter
    }

    MediaPlayer {
        id: player
        source: "https://archive.org/download/Mario1_500/Mario1_500_LQ.avi"
        autoPlay: true
    }

    VideoOutput {
        id: videoOutput
        source: player
        filters: [filter]
        anchors.fill: parent
    }
}

我添加了调试输出以尝试了解正在发生的情况,因为在“分段错误(核心已转储)”旁边未打印任何错误。在ExampleFilterRunnable中实例化createFilterRunnable之后且调用ExampleFilterRunnable::run之前的某个时间段发生了分段错误。

我已经在具有不同视频卡,不同类型的视频和照相机源的不同计算机上运行了它,结果是相同的。如果我将filters: [filter]中的VideoOutput行注释掉,则视频会播放。

1 个答案:

答案 0 :(得分:0)

看来这实际上可能是PySide2中的错误:https://bugreports.qt.io/browse/PYSIDE-785