gpt4 book ai didi

opengl - 使用 FFMPEG 通过 CUDA 解码的视频帧作为来自 OpenGL 的纹理或图像

转载 作者:行者123 更新时间:2023-12-04 22:56:49 25 4
gpt4 key购买 nike

使用提供的示例 here ,我能够让 FFMPEG 通过 CUDA 解码 HEVC 编码的视频(任务管理器证明了我的测试程序正在使用 75% 的 GPU)。
我想更进一步,直接从 GPU 显示这些帧 - 很遗憾不得不将它们下载到 CPU(如上面的示例代码那样)只是为了将它们作为 OpenGL 纹理重新上传到 GPU,特别是因为从 YUV 到 RGB 的转换在 GPU 上也更有效(而且我已经有一个着色器这样做)。
编辑:为了澄清我想要做什么,这里是 FFMPEG 通过 avcodec_get_hw_config() 报告的解码设备列表和 av_hwdevice_get_type_name :

Hardware configurations:
0: Device Type: dxva2
1: Device Type: (none)
2: Device Type: d3d11va
3: Device Type: cuda
正如 talonmies 在评论中指出的那样,最后一个实际上命名错误,解码不是通过 CUDA 计算完成的,而是通过 GPU 芯片上的专用硬件 (SIP) 完成的。毫无疑问,这是我需要使用的设备,尽管它更恰本地指定为“NVDEC”。
编辑#2:查看负责通过 NVDEC 解码的 FFMPEG 源代码文件, cuviddec.c ,似乎没有选项可以防止从设备(GPU)内存到主机(CPU)内存的不必要复制。这意味着我很可能必须自己针对 NVDEC API 进行编程。

最佳答案

查看示例 cuda-samples/3_Imaging/cudaDecodeGL/ImageGL.cpp您将看到它使用 CUDA API 将 OpenGL PBO 映射为 CUDA 缓冲区对象(cuGLRegisterBufferObjectcuGraphicsGLRegisterBuffer),然后使用另一个 CUDA API(cuGLMapBufferObject)使 PBO 内存可用于 CUDA 处理。
不幸的是,在 FFMPEG 源代码中搜索任何这些函数都不会返回任何结果。

关于opengl - 使用 FFMPEG 通过 CUDA 解码的视频帧作为来自 OpenGL 的纹理或图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71279207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com