OpenGL / DirectX上的硬件超高分辨率视频解码和渲染

时间:2015-06-02 02:06:30

标签: opengl directx gpu directshow video-processing

我正在尝试解码和渲染超高分辨率视频(4k x 4k),视频采用h.264编解码器编码。在解码视频帧时,我们希望在着色器上渲染帧,目前在glsl的opengl管道中,以便我们可以动态操作片段颜色。我们已经使用FFmpeg解码API进行了测试,但瓶颈在于软件解码时间和以下gl函数调用的数据传输:

glTexSubImage2D(...);

我们考虑使用DirectShow通过GPU上的硬件加速来解码视频帧,并使用NV_DX_interop2将GL的纹理槽映射到解码的内存地址,但是解码h.264帧的当前最大分辨率是1920x1080,请参阅here

所以我想我的问题是:是否有任何建议通过利用硬件加速解码超高分辨率视频(假设在h.264编解码器中),映射GPU的视频内存地址并将其渲染为纹理?

1 个答案:

答案 0 :(得分:1)

Map a PBO并将/ swscale直接解码到缓冲区。取消映射后,glTexSubImage2D()成为GPU-> GPU操作,几乎"免费"。

使用着色器,您可以直接渲染YUV并避免使用YUV-> RGB转换进行窃听,从而为解码节省更多CPU时间。