将 DirectShow 与 Direct2D 结合使用

Using DirectShow with Direct2D

我有一个 windows 只有 Direct2D 的应用程序,我想为过场动画实现一个视频播放系统。这些文件是 mp4,但如果需要,可以更改格式。

似乎 DirectShow 是在 windows 上呈现 video/audio 的推荐方式。

现在如何让 DirectShow 将视频帧渲染到我的 Direct2D 渲染目标?

VMR-9 过滤器看起来是最佳途径,但我似乎找不到将其集成到我的应用程序中的优雅方式

Windows 中没有 Direct2D/DirectShow 互操作层。为了适应这两种技术,您将不得不以一种相当低效的方式在 API 之间复制数据(这仍然需要一些时间来开发适应性)。

对于 H.264/HEVC MP4 视频文件,您最好使用 Media Foundation 读取和解码帧,然后将它们加载到 Direct2D 位图中并显示在您的应用程序中。在性能方面,可以通过 GPU 以合理的成本和合理的开发工作将视频帧传输到 Direct2D 位图,但即使您走捷径并粗略且低效地进行集成,它也将与 DirectShow 相提并论。

我建议首先使用 Media Foundation 查看和解码视频帧 Source Reader API. Once you get familiar with fitting the technologies, you will take next step and optimize the transfer by using GPU capacity and interop between Direct3D and Direct2D