gpt4 book ai didi

opengl - 如何在不复制到CPU内存的情况下将ffmpeg纹理转换为Open GL纹理

转载 作者:行者123 更新时间:2023-12-03 14:36:29 73 4
gpt4 key购买 nike

此ffmpeg示例演示了如何进行硬件解码:https://github.com/FFmpeg/FFmpeg/blob/release/4.2/doc/examples/hw_decode.c

在109行,它执行以下操作:

/* retrieve data from GPU to CPU */
if ((ret = av_hwframe_transfer_data(sw_frame, frame, 0)) < 0) {


我想避免这种情况,因为这需要时间。因此,我需要一种方法来重用GPU内存中的已解码视频以重做颜色转换。

如何将GPU内存中的解码纹理转换为Open GL中的纹理而又不像上面的代码那样将其返回到CPU内存中?

如果上述方法不可行,如何使用open gl在解码视频中进行颜色转换?我听说ffmpeg支持将opengl着色器作为输入传递,所以我认为这是可能的。

最佳答案

简而言之:很复杂。

根据ffmpeg在系统上使用的硬件后端,您可能需要执行DirectX / CUDA / OpenGL互操作。假设您使用的是VDPAU后端,并且想与OpenGL互操作。 ffmpeg似乎没有以书面记录的方式从其公共接口中公开该功能。

但是,基于vdpau_transfer_data_from实现,您似乎可以从VdpVideoSurface检索AVFrame,如下所示:

VdpVideoSurface surf = (VdpVideoSurface)(uintptr_t)frame->data[3];


在这里,您可以将其从 NV_vdpau_interopNV_vdpau_interop2扩展名传递到 VDPAURegisterVideoSurfaceNV以创建OpenGL纹理。

关于opengl - 如何在不复制到CPU内存的情况下将ffmpeg纹理转换为Open GL纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242800/

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