我使用DirectShowNet,当我的图形停止时,我释放com对象。
问题是,虽然我试图释放COM对象过滤器,接口,有时这种清理导致directshow图不STOPPED.It“挂起”。
如果我不做clen up释放com对象,一切都是正常的,除非我有内存泄漏……
下面是我做清理的方法:
if (videoWindow != nullptr)
{
Marshal::ReleaseComObject(videoWindow);
videoWindow = nullptr;
}
if (mediaControl != nullptr)
{
Marshal::ReleaseComObject(mediaControl);
mediaControl = nullptr;
}
if (graphBuilder != nullptr)
{
Marshal::ReleaseComObject(graphBuilder);
graphBuilder = nullptr;
}……
可能出了什么问题?我是否以错误的方式重新发布滤镜?是什么导致了这种“不可阻挡的图形”?
发布于 2012-03-21 20:08:27
您没有提到具体是哪个调用停止(冻结)以及调用堆栈是什么。
典型情况是,有故障的筛选器,或者可能是具有故障回调的Sample Grabber筛选器,无法同步其接收停止请求的“主”线程和后台线程上的工作线程或工作活动,并最终锁定。您应该能够通过检查调试器下的线程状态来识别损坏的组件。
将问题隔离到特定过滤器的另一种方法是暂时从流水线中删除某些片段,并找出添加/删除哪个片段导致了问题。
https://stackoverflow.com/questions/9792775
复制相似问题