如何从H.264 NV12 IMFSample输出渲染到DirectX11纹理?

时间:2018-05-18 00:08:05

标签: directx directx-11 ms-media-foundation hardware-acceleration dxva

有没有很好的例子说明如何从H.264解码器渲染IMFSample输出?我的场景使用4K分辨率的H.264流,我所定位的PC只能使用DXGI缓冲区接受1080p。但H.264解码器将处理4K,因此我需要找到一种方法将NV12 IMFSample直接馈送到DirectX 11渲染器。我已尝试使用DX11VideoRenderer示例,但由于此特定IMFSample没有IMFDXGIBuffer接口而失败。

DX11VideoRenderer 中,输入IMFDXGIBuffer是NV12类型,可以在硬件中成功呈现。因此,NV12类型的非DXGI缓冲区也应该可接受似乎合乎逻辑?

也许我需要使用NV12类型创建ID3D11Texture2D纹理或资源?我找到了如何create a texture from a file但没有关于如何从样本创建纹理的示例,这看起来更有用。如果我可以创建NV12纹理,如何计算NV12的SysMemPitch结构中的SysMemSlicePitchD3D11_SUBRESOURCE_DATA值?

任何帮助都会非常感激!谢谢。

1 个答案:

答案 0 :(得分:1)

我能够找到一个将NV12样本呈现到屏幕的完整示例。虽然在渲染自己的示例图像时有一些简单的步幅计算错误,但实际的渲染代码确实可以正常工作。它似乎是一个旧的Microsoft示例,我找不到任何其他有关的信息。

D3D11NV12Rendering