2012-10-18 65 views
7

我们有一个读取GigE YUV视频流并将其显示在屏幕上的应用程序。通过分析,我们已经了解到,从功能YUV(UYVY)到RGB24将每帧至少服用的数量更多的时间和CPU的时间比其他任何一件我们的镜头到屏幕的管道。YUV - > RGB转换可以硬件加速吗?

我们正在使用的转换功能通过千兆以太网软件供应商(Pleora)提供的,比我们自己的“天真”(非优化的)执行速度稍快。我们正在为我们的其余管道使用DirectShow。 “任务管理标杆”显示了我们的1080P 30帧流,当我们跳过转换(并获得当然乱码图像)4-5%的一个CPU使用率,以及15-19%的CPU使用率,当我们调用转换功能。

的问题,我们已经是:

  1. 有一个DirectShow Filter,会为我们做这种转换,希望能在一个更高性能的方式,而不是依赖于第三方SDK或我们自己的(CPU-基于串行)的转换功能?
  2. 必须在这个转换在CPU上进行,或者是它在某种程度上可以被卸载到GPU的并行处理?

谢谢!埃里克。

+0

的成本来自读取和图像写入每个字节从而饱和的内存带宽。 GPU处理仅对于低带宽比率的高计算开销是有利的。这是采用YUV叠加的视频卡的好处之一。 –

回答

3

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

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

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

这三种方法都或多或少容易可插入DirectShow的管道。此外,高分辨率图像也是并行软件处理的理想选择。

+0

谢谢!优秀和明确的答复。 最终输出将是一个WPF D3DImage,其据我所知它必须是一个Direct3D RGB32表面,因此,要求将视频卡以将其显示为YUV不会是一种选择。我会看看你推荐的三个库,并将其作为最好的解决方案。 – user1757226