c++ - DirectShow 示例过滤器 : How to Use?

标签 c++ winapi com directshow

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

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

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

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

提前致谢,
-约翰

最佳答案

过滤器不是独立使用的——它们是管道的一部分,它们与其他过滤器和过滤器图形管理器通信。

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

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

在转储示例中,there is a AMovieDllRegisterServer2 callg_Templates 的帮助下处理它在同一文件中更高。

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

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

参见 Using GraphEdit在 MSDN 上。

关于c++ - DirectShow 示例过滤器 : How to Use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492603/

相关文章:

python - win32com.client.Dispatch() 32-64 位程序

c++ - 地址的奇怪错误

c++ - struct pcap_pkthdr len 总是 == 零

c++ - QSerial错误与Arduino通信

c++ - 退出应用程序前关闭线程

c# - 如何在 C# 中从 IFileDialogCustomize GetEditBoxText() 获取字符串

php - Xampp PHP 创建没有任何信息的 COM 对象 fatal error

c++ - 在 snprintf 中调用 strlen 期间调用 backtrace_symbols_fd() 有时会挂起

c++ - 从未调用过 Win32 ListBox WNDPROC

c++ - Marlett 字体 : Can I load it and use it in WinAPI