2012-03-20 49 views
1

我使用DirectShowNet,並在Graph停止時釋放com對象。清理DirectShow圖形 - DirectShow圖形不停止

問題是,雖然我嘗試釋放COM對象[過濾器,接口],有時這種清理導致directshow圖不STOPPED.It「暫停」。

如果我不作CLEN了[發佈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; 

} 

.. ..

什麼可能是錯的?我是否以錯誤的方式回收過濾器?什麼可能導致這個「不可撤銷的圖表」?

回答

2

你沒有提到哪個確切的調用停止(凍結)以及調用堆棧是什麼。

這是一個典型的場景是一個錯誤的過濾器,或者它可能是一個Sample Grabber過濾器故障回調,未能同步在後臺線程「主」線程上它接收結束請求,並且工作線程或工人活動,並最終鎖死。您應該能夠通過檢查調試器下的線程狀態來識別損壞的組件。

將問題隔離到特定過濾器的另一種方法是暫時從管道中刪除某個片段,並找出添加/刪除哪個片段導致問題。

+0

看來,舊的解碼器過濾器[ffdshow]會造成這種情況[它不會破壞自身]。我更新瞭解碼器過濾器,現在它關閉了。 – Novalis 2012-03-21 14:59:31

相關問題