【发布时间】:2016-05-26 12:51:41
【问题描述】:
我正在尝试使用 Windows Media Foundation 类解码 mp4 视频,并将帧转换为 2D 纹理,供 DirectX 着色器用于渲染。我已经能够使用 MFCreateSourceReaderfromURL 读取源流,并且能够读取其主要类型为 MFMEdiaType_Video 和次要类型为 的流媒体类型MFVideoFormat_H264 符合预期。
我现在需要将此格式转换为可用于初始化 D3D11_TEXTURE2D 资源和资源视图的 RGB 格式,然后可以将其传递给 HLSL 像素着色器进行采样。我已经厌倦了使用 IMFTransform 类为我进行转换,但是当我尝试将转换上的输出类型设置为任何 MFVideoFormat_RGB 变体时,我得到一个错误。我还尝试在源阅读器上设置一个新的输出类型,然后只是采样希望以正确的格式获得样本,但我还是没有运气。
所以我的问题是:
这种类型的转换可行吗?
这可以通过 IMFTransform/SourceReader 类来完成,就像我上面已经厌倦的那样,我只需要调整代码还是需要手动进行这种类型的转换?
这是将视频纹理数据输入着色器进行采样的最佳方法,还是有一个我没有想到的更简单的替代方法。
使用的操作系统是 Windows 7,因此我无法使用 SourceReaderEx 或 ID3D11VideoDevice 接口,因为据我所知,这些解决方案似乎仅在 Windows 8 上可用。
任何正确方向的帮助/指针将不胜感激,如有必要,我还可以提供一些源代码。
【问题讨论】:
标签: video windows-7 mp4 directx-11 ms-media-foundation