« フィルタの修正 | メイン | LightflowをC++から使おうと試す »

2004年09月03日

吉里吉里2/KAG3ムービー拡張日誌:: プレーヤーの修正

    

今まで内部で持っていたレンダーフィルターをCoCreateInstanceで得るようにし、他にもいろいろと依存していた部分を書き換えた。
やっぱり、インターフェイスだけでつながるようにするとすっきりするなぁ。
で、デバッグは両方でいろいろとやらないといけないかと思いきや、プレーヤー側だけで出来る様子。(たぶん、レンダーフィルタがデバッグビルドだから)
でも、変。
うまくいかない。
これは少し時間がかかるかも。

ディスコネクトした時にデストラクタが呼ばれている。
なぜ?
と言うか、今まではなぜ動いていたんだ?
前はアロケーターをCComPtrで保持していたからか?
でも・・・
もう少し調査の必要がありそうだ。

アロケーターのReleaseがコールされる時の参照カウンタ値が違う。
CComPtrの場合、代入時にAddRefで参照カウンタがインクリメントされるが、アロケーターをCComPtrで保持しないようにしたから、Release時に参照カウンタ値がなくなり、Deleteされてしまうのか。
と言うことで、ピンのコンストラクタでアロケーターを生成した後、きちんとAddRefするように変更。
でも、newせずに単にメンバに持つって言うのはまずいのかなぁ。
いいような気もするけど。なんでこんな実装になっているのだろう? ピンはレンダーが普通にメンバとして保持しているのに。
ここから拾ってきた物をベースにしているのだが・・・
サンプルを見るとレンダーがアロケーターを持ってるしぃ。
まあ、だとしてもAddRefは必要なのかな。
でも、よく見るとnewしている意味がわからんな。

IBasicVideo::get_SourceHeightでアサートが出る。ピンが接続されていないとか。
レンダーのコンストラクタでCBaseControlVideo::SetControlVideoPinでレンダーの入力ピンを設定しておかなければいけないようだ。

とりあえず、シングルバッファーで普通に動くようになったが、CoUninitializeでアクセス違反が出る。
また、わかりづらいところで・・・
CoUninitializeの処理について調べないと。



投稿者 Takenori : 2004年09月03日 02:30




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