首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FFMPEG通过CUDA解码的视频帧作为OpenGL的纹理或图像

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

Stack Overflow用户
提问于 2022-02-26 18:16:47
回答 1查看 702关注 0票数 1

使用这里提供的示例,我能够让FFMPEG通过CUDA解码HEVC编码的视频(任务管理器显示我的测试程序使用75%的GPU)。

我想更进一步,直接从GPU显示这些帧--很遗憾必须将它们下载到CPU (就像上面的示例代码所做的那样),将它们作为OpenGL纹理重新上传到GPU,特别是因为从YUV到RGB的转换在GPU上也更有效(而且我已经有一个着色器这样做了)。

编辑:为了澄清我要做什么,下面是FFMPEG通过avcodec_get_hw_config()av_hwdevice_get_type_name报告的解码设备列表

代码语言:javascript
复制
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,cuviddec.c解码的FFMPEG源代码文件,似乎没有任何选项可以防止不必要的复制从设备(GPU)内存到主机(CPU)内存。这意味着,我很可能不得不自己编程针对NVDEC。

EN

回答 1

Stack Overflow用户

发布于 2022-05-28 22:45:01

查看示例cuda-samples/3_Imaging/cudaDecodeGL/ImageGL.cpp,您将看到它使用CUDA将OpenGL PBO映射为CUDA缓冲区对象(cuGLRegisterBufferObjectcuGraphicsGLRegisterBuffer),然后使用另一个CUDA API (cuGLMapBufferObject)将PBO内存用于CUDA处理。

不幸的是,在FFMPEG源代码中搜索任何这些函数都不会返回结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71279207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档