将EVR与自定义演示者

时间:2017-02-08 14:32:09

标签: c# render directshow renderer hardware-acceleration

我是DirectShow和MediaFoundation的新手,所以如果明显在我面前,请耐心等待。我的首选语言是C#,我正在使用直接显示构建视频播放器,我有一个由这些过滤器组成的图表(我只描述视频路径):

LAV source fiter -> LAV video decoder -> Enhanced Video Renderer

除了将视频从一个视频更改为下一个视频(在此播放播放列表)之外,所有内容都工作得非常漂亮。我在视频之间会出现黑框,导致屏幕闪烁。然而,当使用此图表时,性能非常出色,除非在视频之间进行转换,否则CPU大多保持在0%。

现在,为了摆脱黑框,我尝试将EVR与自定义演示者一起使用。我尝试了v6.1 SDK(<RootDrive>\ProgramFiles\Microsoft SDKs\ Windows\v6.1\Samples\ Multimedia\MediaFoundation\EVRPresenter)中的自定义evr presenter示例以及codeproject中的.NET实现 - https://www.codeproject.com/Articles/419286/EVR-Presenter-in-pure-Csharp-with-Direct-D-Video-R

两者都工作得很好,但是我测试的机器上的1080p视频的CPU消耗大约为30-40%。通过注释掉代码来完成3D渲染并没有带来任何改进CPU消耗,这似乎是正确的硬件加速,这使我认为图中的其他组件 - 即视频解码器,也许EVR混音器不使用自定义演示器从GetService方法返回的IDirect3DDeviceManager9设备管理器(这实际上被方式调用。)

所以,问题是,为了让所有组件都使用硬件加速并达到与使用默认演示者的EVR时相同的性能水平,我该怎么做?

非常感谢,

约努茨

0 个答案:

没有答案