QOpenGLWidget视频渲染性能在多个过程中

时间:2018-11-23 17:44:06

标签: c++ qt opengl ffmpeg

没有代码,我的问题似乎很模糊,但实际上不是。

因此,我有一个几乎正常工作的小部件,用于渲染视频帧。

Qt 5.10和QOpenGLWidget子类工作良好,我没有进行任何复杂的优化-有两个纹理和几个着色器,将YUV像素格式转换为RGB-glTexImage2D() +着色器,没有缓冲区。

视频帧是从FFMPEG获得的,由于硬件加速,因此显示了出色的性能……当只有一个视频窗口时。

该软件是一个“视频墙”-同一屏幕上有多个独立的视频窗口。当然,多线程将是首选的解决方案,但是遗留问题暂时存在,我无法更改。

因此,无论窗口大小如何,带有1个全高清视频的窗口都消耗约2%的CPU和8-10%的GPU。但是,从同一可执行文件同时启动的7-10个相似的窗口几乎消耗了所有CPU 。我的数学说2 x 8!= 100 ...

我最好的猜测是:

  • 这是ffmpeg解码器问题,硬件加速仍然不是魔术,某些硬件管道停滞了
  • 7-8-9个独立的OpenGL上下文所花费的成本远远超过1个成本x N
  • 我没有使用PUBO或其他一些复杂的技术来改善OpenGL渲染。它仍然无法解释任何东西,但至少是一个猜测

Ubuntu上的行为相同,其中解码使用不同的编解码器(我的意思是使用GPU加速或CPU加速的编解码器没有区别!),因此,很有可能我缺少有关OpenGL的东西...是否启动,因为启动6-7个带有动态纹理的Qt示例可以正常显示CPU使用率的增长-这大约是窗口数量的总和。

无论如何,对我进行案例分析变得非常棘手,所以我希望有人以前可以解决过类似的问题,并可以与我分享他的经验。如果您有任何想法,如何处理所描述的谜语,我将不胜感激。

如果有帮助,我可以添加任何代码。

0 个答案:

没有答案