« WMVからの読み出し | メイン | DirectX Video Acceleration »

2005年10月17日

吉里吉里 ムービー拡張日誌2:: DirectShowのデバッグ支援

    

DirectShowには、DbgSetModuleLevelでタイプとレベルを指定することで、デバッグ用の出力を表示することが出来ると今頃気付いた。

出力のタイプには次のようなものがある。
LOG_ERROR エラー通知。
LOG_LOCKING クリティカル セクションのロックとアンロック。
LOG_MEMORY メモリ割り当てと、オブジェクトの作成および破棄。
LOG_TIMING タイミングとパフォーマンスの測定。
LOG_TRACE 一般的な呼び出しトレース。
CUSTOM1 ~ CUSTOM5 カスタム デバッグ メッセージ用に使用可能。
レベルは大きくすればするほどいろいろと出力されるようだ。
ざっとソースを見たところ、5が使われている最大値だった。

これらの機能を使用するには、使用前にDbgInitialiseをコールし、使い終わったらDbgTerminateをコールする必要があるが、CBaseObjectを継承しているオブジェクトを使っていたら、それらは自動的にコールされるようになっている。
フィルタやピンなど多くの基底クラスはこのクラスを継承しているので、独自のフィルタなどを作った場合は、DbgInitialiseのコールについて気にする必要はなさそう。

デバッグ文字列の出力先はレジストリで指定されており、コンソールかデバッガウィンドウか指定ファイルになる。
CBaseObjectを継承したクラスを使っている場合、自動的にレジストリの"\HKEY_LOCAL_MACHINE\SOFTWARE\Debug\[Module Name]\LogToFile"へ登録されるようだ。(気付いたらkrkr.eXeなどが登録されていた)
ただし、これらはデバッグビルド時のみ有効なので、リリース版では出力や登録は行われないよう。

今後はこれを使っていく予定。
現行のソースは気が向いたら書き換えていくことにする。(OutputDebugStringを使っているので特に問題はない。統一感がないのが問題と言えば問題だけど)



投稿者 Takenori : 2005年10月17日 19:15




comments powered by Disqus
Total : Today : Yesterday : なかのひと