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

September 03, 2004

プレーヤーの修正

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

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

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

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

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

投稿者 Takenori : September 3, 2004 02:30 PM

Trackback Pings

このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/133

コメント

Total : Today : Yesterday :