0

現在ハードウェア オーバーレイにあるビデオからフレームを取得する方法を探していましたが、確実なものは見つかりませんでした。私が見つけたものはすべて、再生中のビデオからフレームを取得するため (アプリで)、またはアプリで実際にフレームを取得する方法の良い例を見つけることができないフィルターを作成するためです (または、アプリをプレーヤーで「インストール」して選択する必要のないメモリ内フィルター?)。

それで、私の質問は、どうすればこれを行うことができるでしょうか? フィルターでそれが可能であることは知っています。フィルターでフレームを取得してアプリに送信する方法の良い例はありますか? または、何らかのプロシージャコールにフックして、そこからフレームを取得する方法はありますか?

DirectX がすべての DirectX 情報を取得するためにフックが行われているのを見てきましたが、ハードウェア オーバーレイは DirectX ではありませんか? または、DirectX にフックして、そこからフロント バッファーを取得することはできますか?

この問題に関するリソースを探してきましたが、ぐるぐる回っていますが、DirectX サーフェスにオーバーレイを配置したい人がいるという事実は役に立ちません。多くの結果がそのトピックに関するものです。

関連する場合は、C ++でのソリューションを好みます(私が持っているアプリはC ++であり、現在、画面からスクリーンショットを取得する「通常の」方法を使用しています。これはもちろん、ハードウェアオーバーレイ用に黒い長方形を残します)。

4

2 に答える 2

0

最初にアプリの画像が必要で、ハードウェア オーバーレイがスナップショットを取得するのに障害となる場合、おそらく最も簡単な方法は、オーバーレイを介してビデオ再生を開始する単純なアプリケーションを作成することです (実際のサンプルをストリーミングする必要はありません! 一時停止するだけです)。グラフで十分です)、目的のアプリケーションを実行する前にアプリケーションを実行します。

この方法では、オーバーレイは通常限られたリソース (ビデオ アダプターごとに 1 つなど) であり、目的のアプリケーションはそれを使用できなくなります。

于 2011-11-17T10:56:49.587 に答える
0

directshow を使用してフレームを取得する方法は 2 つあります。1 つ目は SampleGrabber フィルターを使用したもので、インターネットには多くの例があります。2 つ目は、カスタム ビデオレンダラーを使用する場合です。この場合、cbasevideorenderer から派生させてレンダー メソッドを実装するために、プラットフォーム SDK の baceclasses プロジェクトを使用できる独自のフィルターを実装する必要があります。

于 2011-11-17T09:36:41.357 に答える