一.不推荐使用 QPainter 绘制视频
在 QWidget 上显示视频,一般是通过 paintEvent,由于 QPainter 不是用来渲染视频的,是用来自绘 GUI 的,用的是 CPU 渲染,而不是 GPU,缺乏显卡加速,性能达不到绘制视频的要求。另外,视频绘制也不应该使用事件驱动,使用事件驱动会让绘制操作运行在主线程里,这有可能阻塞 UI 事件响应,显然是不合理的。另外还有以下缺陷:
☆YUV 转 RGB 转换需要消耗大量 CPU;
☆QPainter 大面积绘制效率不高,测试过,如果只是些小预览窗口绘图还行,如果是大的窗口,越大越消耗 CPU,至于全屏则是会卡到爆。
二.推荐使用 QOpenGLWidget 绘制视频
现在一般性能好点的嵌入式板子都有 GPU,支持 OpenGL的话,最推荐使用 Qt 官方自带的 QOpenGLWidget 来绘图。
具体就是显示视频的那个类, 让它继承 QOpenGLWidget,这样使用的是 GPU 渲染,然后重新使用 paintEvent 函数,就不怎么消耗 CPU 了。
三.CPU 绘图推荐使用 SDL、OpenCV 等第三方库
拿到 widget 的窗口句柄( winid