【问题标题】:Encoding FBO textures to H.264 video directly on GPU直接在 GPU 上将 FBO 纹理编码为 H.264 视频
【发布时间】:2012-12-01 04:45:48
【问题描述】:

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

  1. NVIDIA CODEC Libraries 允许做我想做的事吗?

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

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

【问题讨论】:

    标签: opengl cuda opencl gpgpu video-encoding


    【解决方案1】:

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

    【讨论】:

    • 是否有任何替代方案,特别是留在 OpenGL 上,使用计算着色器基本上可以做 cuda 可以做的任何事情(除了库)?
    • @Paul:不是这样。 NVidia GPU 的 h264 编码器是 GPU 上芯片的专用部分,而不是运行的着色器程序。所以你总是需要为此使用一些供应商特定的 API。通过(假设的)OpenGL 扩展或通过像 CUDA 这样的 Sidekick API。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2022-03-24
    • 2011-10-30
    • 2013-06-06
    • 2019-11-21
    相关资源
    最近更新 更多