我计划开发一个工具,用于实时视频操纵使用C++、脱和照片.视频的复盖不是一个选项,因为着色器应当用于框架处理。在那一刻,我想象一个以下列步骤:

  1. 解码视频(CPU)
  2. 预处理它(《任择,CPU)
  3. Transer到视频存储器(GPU使用DMA)
  4. 进一步的进程,它使用的顶点,并着色片段(GPU)
  5. 渲染(GPU)

我在找一些一般性的建议explaning什么样的扩展或工艺可以在这里使用。是有一个很好的理由去使用Direct3D,而不是?

有帮助吗?

解决方案

第一件事情,在PC机上有没有明确的方式来使用DMA。驾驶员 可能会 使用它,或者可能使用别的东西。

在任何情况下,第3步将是"变化的纹理的数据在图卡"。在照片那是的(素的缓冲的对象)的扩展或好老glTexSubImage*功能。在D3D9它LockRect上的纹理或其他方式(例如LockRect上的划痕纹,然后位图传送到一个GPU纹理)。任何那些可能会使用DMA,但是你不能肯定。

然后将数据是在一个纹理。你可以呈现到屏幕一些着色器(例如做YCbCr转换),或提到其他的纹理(s)要做更复杂的处理影响(例如模糊/光芒/...).

使用Direct3D更容易在某种意义上,有明确定义的"受的方式"这样做的东西。在载有大量更多的选择,要做到任何东西,你必须以某种方式找出哪些是快速(有时候,快速路径不同,在不同的平台或硬件)。

其他提示

如果你是linux、更近期的驱动程序在180。xx系列有增加支持,用于解码视频通过VDPAU api(解码视频和介绍的东西).许多大的项目有综合与api包括下,多,。,该.我不知道所有的细节,但他们提供api许多解码器,包括共同的子操作和流操作。

我想看看这里前会觉CUDA(我假设VDPAU可以使用的)

对于转移的框架的数据cpu gpu,你可能想看到 s.检查 还。

此外,如果您使用的着色器,无论如何,你可以轻松的cpu负担,通过执色彩空间变化的片段着色器(YCbCr到RGB)。

"进一步的处理"和"呈现的"步骤通常是很多同样的事情,做很酷的东西在着色和混合它帧缓冲区.如果你想要混合和匹配的视频和不同的影响, 固定运营基地s是有用的。

作为替代可以看看一些不同的语言,用于执行一般目的GPU编程(器),如CUDA从独或流SDK从阿提。这取决于你的选择,可以限制自己的一个品牌的Gpu,虽然。因为使用这些语言是工作一级的抽象而是更接近于正常的高级程序,而不是工作的着色器。

我没有经验什么你想要做,所以我不能说,如果着色器实际上更适合的工作,但是有些东西你可以考虑。它必须是说,算法的设计还是有点不同于普通码的,它需要一些努力获取的(我只有曾与CUDA但他们似乎都使用类似的抽象).

我想看过那部如果你有一个体面的经验有着色的工作,它不可能是值得的,麻烦你了解一个新的平台。

下面的步骤应该这样做:

  1. 解码视频,以YUV

    这通常是什么样的解码器库做。

  2. 载入照片作为一个纹理

  3. 转换阶段和第二阶段的编码处

    因为你不想要使用复盖,你必须转换到手动。 在这里, 是一个例子使用的着色器。

  4. 把转换的纹理在上一个四和呈现到屏幕上

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top