YUV - > RGB转换可以硬件加速吗?

use*_*226 7 c++ rgb directshow gpu yuv

我们有一个应用程序可以读取GigE YUV视频流并将其显示在屏幕上.通过分析,我们了解到,将每个帧从YUV(UYVY)转换为RGB24的功能至少比我们的相机到屏幕管道的任何其他部分都要多一个数量级的时间和CPU.

我们使用的转换功能由GigE软件供应商(Pleora)提供,并且比我们自己的' 天真 '(非优化)实现略快.我们在其余的管道中使用DirectShow."任务管理器基准测试"显示我们的1080p 30fps流,当我们跳过转换时(当然会出现乱码图像)的CPU使用率为4-5%,当我们调用转换功能时,CPU使用率为15-19%.

我们的问题是:

  1. 是否有DirectShow过滤器可以为我们进行此转换,希望以更高效的方式,而不是依赖第三方SDK或我们自己的(基于CPU,串行)转换功能?
  2. 这个转换必须在CPU上完成,还是能以某种方式卸载到GPU进行并行处理?

谢谢!埃里克.

Rom*_* R. 4

该转换可能是 GPU 处理的良好候选者,但是您打算如何处理转换后的数据?如果您需要它在软件中进行进一步处理,那么从视频适配器读回可能会破坏您通过将处理卸载到 GPU 可能获得的所有增益。如果您仅需要它用于演示目的,那么您不需要转换,您可以将 YUV 图像直接传送到视频适配器并让它以这种方式呈现(这是管道的理想配置,因为您没有任何转换)。

谈到软件转换,我不确定您现在使用的转换质量,但是有高度优化(支持 SIMD)的转换可用:

  1. 标准 Windows Vista+ DMO
  2. FFmpeg 的 libswscale
  3. 英特尔 IPP 基元

所有这三个都或多或少可以轻松插入 DirectShow 管道。此外,高分辨率图像也是并行软件处理的良好候选者。