2

I have a Delphi 6 program that receives audio from an external program via a socket. Now I want to feed that audio to a DirectShow filter graph I create that routes that audio to different output filters on the PC. I am using DSPACK for my DirectShow filter graph work. I'll be using one of the DSPACK examples that shows how to create a Push Source Filter as my starting point.

Is it possible to embed a DirectShow filter directly into my main EXE, or do I have to create an external DLL or AX file and run regsvr32 on it? I'd like to avoid creating an external module otherwise I'll have to create a parameter and data passing bridge between it and my main program and I'd prefer to eliminate that work. I'm wondering if there is a way to simply include the push source filter code in my main program and finesse Windows into working with it as a DirectShow filter if that is at all possible.

4

2 回答 2

5

过滤器不必放入库 (DLL) 中,它们甚至不必是注册的 COM 对象,不。如前所述,这样做的唯一原因是通过 CoCreateInstance 和/或通过 DirectShow 类别的枚举使过滤器可用于应用程序。

直接放入您的应用程序中,它必须实现IBaseFilter并且您将IFilterGraph::AddFilter其放入图表中。私有过滤器的一个优点是您不需要通过COM接口实现应用程序和过滤器之间的通信,并且您可以使用本机/直接指针。

另请参阅 Geraint 的文章Using Filters without Registration

于 2011-10-10T06:45:26.800 回答
3

我认为将过滤器放在 DLL 中的唯一原因是能够在多个程序中使用它们。另一方面,如果您要将过滤器放入 DLL 中,您总是可以让它们实现一个接口,您可以在需要时使用它。

在我的工作中,我必须播放存储在专有存档文件中的电影。我制作了一个具有正确描述其媒体格式的输出引脚的源,如果我愿意,其余部分会自动工作。我还需要为视频使用专有渲染器。所有这些东西都内置在用 C++ 编写的 .exe 中

于 2011-10-10T06:11:33.053 回答