8

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

我们使用的转换函数由 GigE 软件供应商 ( Pleora ) 提供,比我们自己的“ naive ”(未优化)实现稍快。我们在管道的其余部分使用 DirectShow。“任务管理器基准测试”显示我们的 1080p 30fps 流,当我们跳过转换时 CPU 使用率为 4-5%(当然会得到乱码图像),当我们调用转换函数时 CPU 使用率为 15-19%。

我们的问题是:

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

谢谢!埃里克。

4

1 回答 1

4

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

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

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

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

于 2012-10-18T18:37:29.760 回答