有没有很好的例子说明如何从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
结构中的SysMemSlicePitch
和D3D11_SUBRESOURCE_DATA
值?
任何帮助都会非常感激!谢谢。
答案 0 :(得分:1)
我能够找到一个将NV12样本呈现到屏幕的完整示例。虽然在渲染自己的示例图像时有一些简单的步幅计算错误,但实际的渲染代码确实可以正常工作。它似乎是一个旧的Microsoft示例,我找不到任何其他有关的信息。