如何快速重绘QQuickItem?

How to repaint QQuickItem quickly?

我有一个 YUY2 格式的图像流。我想在 QQuickItem 上绘制这些图像 - 这样我就可以将它与 Qt Quick 2 一起使用。

我遇到了性能问题,所以我的问题是重绘用 C++ 编写的 QML 对象的最快方法是什么?是否有某种专门用于渲染视频的对象?


我尝试创建一个继承 QQuickPaintedItem 的 class。我已经将 YUY2 图像转换为 RGBA8888 格式,然后使用 QImage 加载它,然后使用 QPainter 绘制它。如果 QQuickPaintedItem 很大 - 例如大于 1000x1000,则证明效率不高。更快的方法是将 QImage 转换为 QPixmap,然后使用 QPainter 进行绘制。现在效果不错,但也许有更快的方法?例如图像的转换过程似乎太慢了。

我已经通过使用 QQuickItem with defined updatePaintNode function (the first idea from Kuba Ober's 评论让这个工作了。

This example对我帮助很大。其中 NoisyNode class 渲染背景(静态图像)并且 Graph 正在使用它。我已将这两个 class 应用到我的项目中,并根据我的需要对其进行了调整。我在显示 1080x1920 像素、30fps 时没有问题。据我了解,要显示视频,您最终需要将 YUV 转换为 RGB,因此我立即执行了此操作并使用了 RGBA 像素数组。