2012-03-20 17 views
1

私はDirectShowNetを使用しています。グラフが停止するとcomオブジェクトがリリースされます。DirectShowグラフのクリーンアップ - DirectShowグラフが停止していません

問題は、COMオブジェクト[フィルタ、インターフェイス]を解放しようとするときに、このクリーンアップによってSTOPPED.Itが一時停止されないことがあることです。

私はeverthingが[私はメモリリークを持っている以外] OKです[リリース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フィルタがあり、停止要求を受け取った「メイン」スレッドとバックグラウンドスレッドのワーカースレッドまたはワーカーアクティビティの同期に失敗することがよくあるシナリオです、最終的に死んでしまう。デバッガの下でスレッド状態をチェックすることによって、壊れたコンポーネントを識別できるはずです。

問題を特定のフィルタに特定するもう1つの方法は、特定のフラグメントをパイプラインから一時的に削除し、どのフラグメントが問題につながるかの追加/削除を確認することです。

+0

古いデコーダフィルタ[ffdshow]がこれを引き起こしているようです。[それ自体を破壊しません]。私はデコーダフィルタを更新し、今度はそれを閉じます。 – Novalis

関連する問題