【问题标题】:DirectShow Sample Filters: How to Use?DirectShow 示例过滤器:如何使用?
【发布时间】:2017-01-22 09:18:03
【问题描述】:

我正在尝试编写自定义 DS 渲染过滤器。我决定从 SDK 提供的示例过滤器开始,即“转储”。我可以成功构建 DUMP.DLL 和相关文件,但我不知道如何在我的应用中使用它。

看起来 IFilterMapper2->RegisterFilter 可能会这样做,但是(恕我直言)这是一个怪物,文档是极简主义的。此外,我看不到将 DLL 指定为 InProcServer 的地方,我认为这是必需的。

我也尝试了 regsvr32 DUMP.DLL,但我不确定这是否有帮助。

我相信答案一定很简单,但我就是不明白。任何帮助都将不胜感激,尤其是代码片段(学术论文并不是很有帮助)。此外,最好的解决方案应该是直接的 C++(没有第三方包或 .NET 的东西)。

提前致谢,
-约翰

【问题讨论】:

    标签: c++ winapi com directshow


    【解决方案1】:

    过滤器不能单独使用 - 它们是管道的一部分,它们与其他过滤器和过滤器图表管理器进行通信。

    过滤器确实是通过IFilterMapper2::RegisterFilter 调用注册的。请注意,由于这涉及到 HKLM 下的注册表写入,因此必须使用本地管理员的提升权限进行注册。

    在大多数情况下,即使不需要完全以这种方式发生,此注册也是通用 COM 注册的一部分,由 regsvr32 或等效调用完成。 DLL 注册代码通常为它发布的过滤器执行IFilterMapper2::RegisterFilter

    在 Dump 示例中,there is a AMovieDllRegisterServer2 call 处理它,在同一文件中更高的 g_Templates 的帮助下。

    一旦您注册了过滤器,它就可以被应用程序枚举。您想尝试的第一件事是 SDK GraphEdit 工具或其更新、更强大的开源替代品GraphStudioNext

    Ctrl+ F 打开过滤器列表,您可以在其中找到您的过滤器列表并将其插入到正在交互构建的过滤器图中。然后连接tpo其他过滤器并运行。

    请参阅 MSDN 上的 Using GraphEdit

    【讨论】:

    • 是的,我明白了,但我的问题是我究竟如何“注册过滤器”(并使用它来将过滤器添加到图表中)?
    • 太棒了!正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多