在自定义源和 SmartTee 之间插入筛选器会泄漏 COM 对象
Inserting filter between custom source and SmartTee leaks COM object
我们有一个DirectShow图表,由我们自己的Source过滤器组成,该过滤器使用CaptureGraphBuilder呈现。在预览模式下,图形结果为 [源] -> [SmartTee] -(预览引脚)-> [解码器] -> [渲染器]。我们自己的过滤器有一个自定义分配器,并通知 SmartTee 有关它。现在退出就可以了,所有对象都会被释放。
现在,我们尝试在我们自己的源过滤器和 SmartTee 过滤器之间插入一个过滤器。将新创建的筛选器连接到源筛选器时,将在源筛选器上创建新的分配器。将新滤波器(将在输出引脚本身上建议自定义分配器)连接到 SmartTee 滤波器时,SmartTee 会建议在源和 SmartTee 之间的第一次连接中创建的分配器。但是由于BreakConnect,SmartTee应该放弃这个分配器。现在退出应用程序会导致剩余一个源分配器对象,即在第一个连接中创建的分配器。
源筛选器以及插入的筛选器在输出引脚上具有 InitAllocator 函数,用于建议分配器。
您可以在 CBaseOutputPin 类中检查决策分配器函数的来源。输出引脚选择一个分配器。它可以使用输入引脚提供的一个,也可以创建自己的引脚:https://msdn.microsoft.com/en-us/library/windows/desktop/dd390924(v=vs.85).aspx 为了做到这一点,CBaseOutputPin 调用输入引脚的 GetAllocator,并确定输入是否提供它自己的分配器。 若要为输出引脚提供分配器,请重写 CBaseOutputPin::InitAllocator 方法以创建分配器的实例:https://msdn.microsoft.com/en-us/library/windows/desktop/dd377477(v=vs.85).aspx 此时应使用分配器,输出引脚调用 IMemInputPin::NotifyAllocator 以通知输入引脚选择。如果通知分配器返回错误,则分配器为"释放"。 您是否将输出引脚基于 CBaseOutputPin 并替换了决策分配器方法?
- valgrind-hellgrind与泄漏检查的结果不同
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 两个 COM 组件中 ENUM 的重复条目
- COM 接口 c# 封送数组数组
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- Klocwork Inside的资源泄漏
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 在自定义源和 SmartTee 之间插入筛选器会泄漏 COM 对象
- 在这种情况下,DirectX COM 对象会出现内存泄漏
- 为什么这个COM代码会泄漏
- 如何解决BSTR泄漏内存com对象
- 如何判断我是否泄漏了 COM 对象?