这个ffmpeg示例演示了如何进行硬件解码:https://github.com/FFmpeg/FFmpeg/blob/release/4.2/doc/examples/hw_decode.c
在第109行,它执行了以下操作:
我希望避免这种情况,因为这会花费时间。因此,我需要一种将已解码的视频(存在GPU内存中)重新使用并进行颜色转换的方法。
如何将GPU内存中的解码纹理转换为Open GL中的纹理而无需像上面的代码那样将其传回CPU内存?
如果上述方法不可行,如何在解码视频中使用OpenGL进行颜色转换?我听说ffmpeg支持将OpenGL着色器作为输入进行传递,所以我猜应该是可以的。
/* retrieve data from GPU to CPU */
if ((ret = av_hwframe_transfer_data(sw_frame, frame, 0)) < 0) {
我希望避免这种情况,因为这会花费时间。因此,我需要一种将已解码的视频(存在GPU内存中)重新使用并进行颜色转换的方法。
如何将GPU内存中的解码纹理转换为Open GL中的纹理而无需像上面的代码那样将其传回CPU内存?
如果上述方法不可行,如何在解码视频中使用OpenGL进行颜色转换?我听说ffmpeg支持将OpenGL着色器作为输入进行传递,所以我猜应该是可以的。
(CUdeviceptr)src->data[i]
不是指向你的CUDA图像的指针吗?我不知道是否可能直接从中创建一个OpenGL纹理,但你可以尝试将所有复制操作都在GPU上完成,而不必进入系统内存。 - Yakov Galka