作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个 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) {
最佳答案
简而言之:这很复杂。
根据 ffmpeg 在您的系统上使用的硬件后端,您可能需要进行 DirectX/CUDA/OpenGL 互操作。假设您正在使用 VDPAU 后端并希望将其与 OpenGL 互操作。看起来 ffmpeg 没有以记录的方式从其公共(public)接口(interface)公开该功能。
但是,基于 vdpau_transfer_data_from实现,似乎可以检索到 VdpVideoSurface
来自 AVFrame
如下:
VdpVideoSurface surf = (VdpVideoSurface)(uintptr_t)frame->data[3];
VDPAURegisterVideoSurfaceNV
来自
NV_vdpau_interop和
NV_vdpau_interop2用于创建 OpenGL 纹理的扩展。
关于opengl - 如何在不复制到 CPU 内存的情况下将 ffmpeg 纹理转换为 Open GL 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913418/
我是一名优秀的程序员,十分优秀!