1

dshowベースクラスを実装CSourceして作成したカスタムソースフィルターがあります。メソッドを使用して、異なる名前でCSourceStream複数回エクスポートされます。IFilterMapper2::RegisterFilterさて、私のフィルターでは、どのフィルターの登録済みインスタンスが開かれているのかを(できるだけ早く)知りたいと思います。たとえば、仮想Webカメラをエミュレートするdllがあるとします。同じdllがフィルターの2つのインスタンスをエクスポートするため、(たとえば)Skypeで仮想カメラ#1仮想カメラ#2を選択できます。私のコンストラクターで、CSourceまたは私は、構築されているのが仮想カム#1であるか仮想カム#2CSourceStreamであるかを知りたいです。これはできますか?

4

1 に答える 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 に答える