Qt 性能优化:绘制视频方案选择

我们只需要把少部分的区域绘制出来,不用绘制整个图标的数据,所以需要定义一个 viewport。如果嵌入式板子有 GPU,则使用 EGLFS 平台插件,最推荐使用 Qt 官方自带的 QOpenGLWidget 来绘图;如果没有 GPU,一般只能使用 LinuxFB 平台插件,推荐使用 SDL、OpenCV 等第三方库;如果不想使用第三方库的话,那只能使用 QPainter 实现绘图了,就要注意优化了,否则 CPU 占用率很容易偏高。
摘要由CSDN通过智能技术生成

一、不太推荐使用 QPainter 绘制视频

在 Qidget 上显示视频,一般是通过 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() 这个函数的返回值)或者窗口位置,配合其他工具(opengl、directx 等,在 linux 中我推荐试试 SDL,接口比较友好)自行绘制。如果是嵌入式板子,需要交叉编译 SDL 等库。

本文福利,莬

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值