0

私は DirectShow にかなり慣れていないので、今のところ自分のやり方を感じているところです。Directshow グラフの directshow レンダラー ウィンドウを WPF アプリ内でホストしたいと考えており、現在 HwndHost クラスを使用してこれを実現しようとしています。HwndHost に必要なのは、ビデオをレンダリングしているウィンドウへのハンドルです。GetWindowHandle メソッドを使用してハンドルを取得できるように、IVideoWindow インターフェイスのピンを列挙し、IOverlay を照会してハンドルを取得する例を見つけました。

問題は、IOverlay が DirectShow.Net で利用できないように見えることです。DirectShow.Netについてのページを読むと、IOverlay は、「これらのインターフェイスはソース コードにありますが、推奨されておらず、文書化されておらず、Ole Automation を対象としているか、テストできないため、テストされておらず、テストされないことを意味する」という見出しが付いた表にリストされています。 " .

では、この定義にアクセスするにはどうすればよいのでしょうか? ライブラリとして配布されているビルドから除外されているので、自分でソースからライブラリをビルドする必要がありますか?

または、私がやろうとしていることを行うためのより良い方法はありますか? 私がこのすべてのものに慣れていないと言ったように、どんな助けも感謝します。

前もって感謝します。

編集: 多くの DirectShow 開発者はいないのですか? それとも、これはばかげた質問ですか?

4

1 に答える 1

2

これを行う通常の方法は、IVideoWindow::put_Owner を使用してビデオ ウィンドウの親を変更し、独自のウィンドウの子にすることです。また、AutoShow (false)、Visible、Width、および Height プロパティを設定し、WindowStyle プロパティを変更して子ウィンドウにします。

IOverlay インターフェイスは、DirectShow の最初のバージョン (1996 年) で実装され、廃止されて久しい一部のハードウェア デコーダをサポートします。現在のビデオ レンダラーではサポートされていないと思います。

ウィンドウ ハンドルの取得が困難になったのは、不適切なアプリケーション プログラミングが Video for Windows で頻繁にデッドロックを引き起こしたためであり、開発者は、DirectShow スレッドと所有するウィンドウ、およびすべてのアプリケーション スレッドを明確に分離する必要があると感じていました。

G

于 2009-09-03T08:17:57.703 に答える