C# 将EVR与自定义演示器一起使用时,DirectShow graph未对所有筛选器使用硬件加速

C# 将EVR与自定义演示器一起使用时,DirectShow graph未对所有筛选器使用硬件加速,c#,render,directshow,renderer,hardware-acceleration,C#,Render,Directshow,Renderer,Hardware Acceleration,我是DirectShow和MediaFoundation的新手,所以如果显而易见的事情就在我面前,请耐心等待。我的首选语言是C#,我正在使用direct show构建一个视频播放器,我有一个由这些过滤器组成的图(我只描述视频路径): 一切都运行得很好,只是当从一个视频切换到下一个视频(在这里播放播放列表)时,视频之间会出现一个黑色边框,导致屏幕闪烁。然而,当使用此图表时,性能非常好,除了在视频之间转换外,CPU大部分保持在0% 现在,为了摆脱黑框,我尝试将EVR与自定义演示器一起使用。我尝试了v

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

一切都运行得很好,只是当从一个视频切换到下一个视频(在这里播放播放列表)时,视频之间会出现一个黑色边框,导致屏幕闪烁。然而,当使用此图表时,性能非常好,除了在视频之间转换外,CPU大部分保持在0%

现在,为了摆脱黑框,我尝试将EVR与自定义演示器一起使用。我尝试了v6.1 SDK中的自定义evr presenter示例(
\ProgramFiles\Microsoft SDK\Windows\v6.1\Samples\Multimedia\MediaFoundation\EVRPresenter
)以及codeproject中的.NET实现-

两者都很好,然而,在我正在测试的机器上,1080p视频的CPU消耗约为30-40%。通过注释代码来进行3D渲染并没有带来CPU消耗方面的任何改善,因此这似乎是适当的硬件加速,这让我想到了图中的其他组件,即视频解码器,也许还有EVR mixer未使用自定义演示者从GetService方法返回的IDirect3DDeviceManager 9设备管理器(顺便说一句,这实际上会被调用)

所以,问题是,为了让所有组件都使用硬件加速,并实现与使用EVR和默认演示者时相同的性能水平,我必须做些什么

多谢各位


Ionut

有人对此有什么想法吗?提前谢谢!我猜,自定义演示器中较高的CPU消耗是由生成空周期的渲染循环(线程?)造成的。
LAV source fiter -> LAV video decoder -> Enhanced Video Renderer