gpt4 book ai didi

delphi - 如何正确构建私有(private)的(又名未注册的 DirectShow 过滤器)(有源代码)?

转载 作者:行者123 更新时间:2023-12-02 02:36:49 26 4
gpt4 key购买 nike

我使用 Delphi 6 Pro 和 DSPACK DirectShow 组件库创建了一个推送源过滤器。我想私下使用该过滤器,因此我不会为 DLL 创建 AX 文件。相反,我想直接创建过滤器。我发现了一些关于此的线程,但它们都没有展示如何在给定过滤器构造函数的情况下构造私有(private)过滤器:

constructor Create(ObjName: string; Unk: IUnKnown; out hr: HRESULT);
constructor CreateFromFactory(Factory: TBCClassFactory; const Controller: IUnknown); override;

以下是我发现的一些关于未注册或私有(private) DirectShow 过滤器主题的主题:

http://www.gdcl.co.uk/2011/June/UnregisteredFilters.htm

http://www.progdigy.com/forums/viewtopic.php?p=12304&sid=df52f07f5b00d7ebfac12cb9b9bd9b54

How can I directly embed a DirectShow Push Source filter in an EXE?

Filter的源代码已直接添加到我的Delphi项目中。但我不知道直接从主应用程序创建过滤器时应该使用哪个构造函数,以及为构造函数的参数传递什么。有人可以告诉我他们应该是什么吗?

此外,我是否需要像上面第一个线程所说的那样增加 Filter 对象的引用计数,然后在应用程序终止时对其调用 Release() ?如果是这样,最好的方法是什么?或者当我的应用程序终止时我可以在过滤器上调用 Free 吗?

最后,在使用我的私有(private)过滤器之前,我需要调用 CoInitialized() 和 CoUninitialize() 吗?

更新:通过 TBCSource(DSPACK 派生过滤器的基类)的类和类层次构造函数链进行跟踪,ObjName 参数似乎是过滤器名称Unk 参数是拥有过滤器的对象。我当前的猜测是,直接从源创建过滤器的正确方法是,给定一个名为 TPushSourceFilter 的 TBCSource 派生类,任意指定过滤器名称“My Push Source Filter”,例如:

TPushSourceFilter.Create('My Push Source Filter', nil, hr);

第一个构造函数参数是用于注册过滤器的过滤器名称,即您在 GraphEdt 等工具中仔细阅读 DirectShow 过滤器时看到的名称。我认为第二个参数应该是 NIL,因为它解析为名为 TBCUnknown 的祖先类中的 owner 数据字段 (FOwner)。它的唯一目的是将基类处理的任何 QueryInterface() 调用重定向到 owner 对象(如果它是非 NIL),而不是将查询直接应用于 Filter 对象(如果它是 )委托(delegate)情况。我将继续使用这种构造方法,看看它是否有效。

最佳答案

您只需要一个TPushSourceFilter.Create对象的实例,并从该实例获取IBaseFilter接口(interface)。从那里开始,您将其添加到图表中,就像使用 CoCreateInstance 创建的过滤器一样,然后连接引脚等。

关于delphi - 如何正确构建私有(private)的(又名未注册的 DirectShow 过滤器)(有源代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com