强制第三方DirectShow过滤器使用自定义分配器



在第三方过滤器中使用自定义分配器的理由:

我有一个numa系统,并且在错误的numa节点上分配内存会导致性能问题并从相机中删除图像。

我当前的方法:

我会写一个迭代所有过滤器的函数,并询问他们的输入引脚是否具有分配器。然后,我向我的特殊分配器接口询问此分配器,最后,如果找不到接口,我会创建新的自定义分配器并应用与以前的分配器相同的属性。然后,我在输入引脚上调用NotifyAllocator,以将其通知有关新的分配器。

我试图在图形构建中的不同时间调用此功能。当前在IMediaControl::Pause之后,就在IMediaControl::Run之前,但我的自定义分配器没有由任何第三方过滤器使用。样品位于错误的numa节点上。

此外,我还跟踪在IMediaControl::Pause调用期间创建的线程,并将其线程亲和力更改为正确的CPU,因此通常这些直接保存过滤器应具有正确的NUMA节点,因为它们应该在运行CPU的NUMA节点上分配。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

您不能用NotifyAllocator覆盖分配器。输出引脚决定使用分配器,内部存储一个指针并通知输入引脚。您不能外部替换分配器,至少在连接引脚时不能在状态下。

有些过滤器依靠自己的分配器,根本无法与他人合作。没有用于替换分配器的通用解决方案,特定的过滤器可能会被输出引脚对分配器没有特定要求的事实所欺骗,并要求Peer Input PIN提供合适的实例。

最新更新