直接在GPU上将FBO纹理编码为H.264视频

Mic*_* IV 5 opengl cuda gpgpu opencl video-encoding

我打算编写一个应用程序,其中我需要能够对来自FBO附加纹理的给定图像序列的视频进行编码.我想利用GPU并行性的强度并且最大限度地做到"服务器端".所以我发现NVidia有一个使用CUDA对视频进行编码的SDK,但在阅读了SDK 白皮书之后,我仍然不清楚是否可以在不离开GPU的情况下将FBO纹理作为NVCUVENC(编码器)的图像帧源发送.我相信从CPU上传图像会给编码过程带来巨大的开销,因为如果我不能直接在GPU端获取FBO纹理,这意味着我必须将其像素读取到CPU然后再将它们发送到GPU进行编码.所以我基本上有两个问题:

  1. 难道NVIDIA CODEC图书馆允许做我想要什么?

  2. 如果没有,可以使用其他GPGPU SDK,如OpenCL甚至OpenGL 4.3计算着色器吗?

有关DirectX或相关的东西其他窗口任何不能被考虑,因为我需要它Linux.Also我只用NVIDIA的显卡.

dat*_*olf 4

是的,您绝对可以将 OpenGL 生成的图像传输到 CUDA 编解​​码器库中。查看 CUDA API 参考。您最感兴趣的是纹理参考管理图形互操作性。基本思想是,CUDA 允许您获取纹理对象的设备端内存映射,您可以将其作为图像源传递给编码器。