【发布时间】:2023-04-07 07:38:02
【问题描述】:
我们有一些 DS 过滤器。它可以工作 - 使用标准 win dll。
我们希望将该过滤器转换为某种不依赖于使用 DS 的程序。我们希望它以正确的顺序调用 dll,做 DS 正在做的所有事情,但不以任何方式依赖 DS - 仅依赖于过滤器 dll。
那么...如何将 DirectShow Filter 转换为 C++\C#?
【问题讨论】:
标签: c# c++ dll directshow
我们有一些 DS 过滤器。它可以工作 - 使用标准 win dll。
我们希望将该过滤器转换为某种不依赖于使用 DS 的程序。我们希望它以正确的顺序调用 dll,做 DS 正在做的所有事情,但不以任何方式依赖 DS - 仅依赖于过滤器 dll。
那么...如何将 DirectShow Filter 转换为 C++\C#?
【问题讨论】:
标签: c# c++ dll directshow
更好的解决方案是在单一用途图表中使用过滤器,其中您有一个自定义源从应用程序提供过滤器,以及一个自定义接收器接收输出并将其传送到应用程序。 www.gdcl.co.uk 上有一个例子。我知道这不是您所要求的,但是您对 dshow 的依赖非常有限,并且很难看到过滤器二进制文件可以工作但 dshow 基础知识不可用的环境。
G
【讨论】:
可以在不使用 DirectShow 的情况下使用 DirectShow 过滤器,但您需要编写自己的 Graph 实现。
这意味着您必须实现IFilterGraph、IMemInputPin 和IMemOutputPin 接口,以使 DirectShow 过滤器认为它在其本机环境中运行。
为了通过过滤器传递缓冲区,您可能需要实现IMemAllocator 和IMediaSample
缓冲区传递,特别是不能在托管代码中完成。您也许可以使用互操作来做到这一点,但我认为这在 C++ 中比在 C# 中更容易做到。很多年前我做过一次。花了大约3个月的时间。
【讨论】: