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



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

  1. NVIDIA CODEC库是否允许执行我想要的操作?

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

任何与DirectX或其他与windows相关的东西都不能考虑在内,因为我需要Linux。而且我只使用NVidia硬件。

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

最新更新