dshowベースクラスを実装CSource
して作成したカスタムソースフィルターがあります。メソッドを使用して、異なる名前でCSourceStream
複数回エクスポートされます。IFilterMapper2::RegisterFilter
さて、私のフィルターでは、どのフィルターの登録済みインスタンスが開かれているのかを(できるだけ早く)知りたいと思います。たとえば、仮想Webカメラをエミュレートするdllがあるとします。同じdllがフィルターの2つのインスタンスをエクスポートするため、(たとえば)Skypeで仮想カメラ#1と仮想カメラ#2を選択できます。私のコンストラクターで、CSource
または私は、構築されているのが仮想カム#1であるか仮想カム#2CSourceStream
であるかを知りたいです。これはできますか?
質問する
336 次
1 に答える
2
文書化された方法はありませんが、回避策があります。DirectShowは安定しているので、うまく機能するはずです。
フィルタクラスのオーバーライドIPersistPropertyBag::Load
と、提供さIPropertyBag::Read
れたレジストリへの読み取りで行う読み取りでは、からの読み取りが行われますHKEY_LOCAL_MACHINE\SOFTWARE\Classes...\CLSID_VideoInputDeviceCategory\Instance\<your-instance>
。したがって、必要なすべてのIDをそこに配置して、アクセスできるようにすることができます。
これはアプリケーションのBindToObject
呼び出しから呼び出されることに注意してください。
私はこれをIPカメラに裏打ちされた仮想ビデオ入力で行っていますhttp://alax.info/blog/1233
于 2012-04-18T06:00:15.653 に答える