私はDirectShowアプリケーションの作業を続けており、仕上げのタッチをしています。プログラムがやっていることは、1秒間隔でビデオファイルを調べて、現在のバッファをsamplegrabberからキャプチャし、処理することです。しかし、テストで重複した画像が表示されていることに気づいていましたが、DirectShowはその1秒間隔でビデオを十分に速くインクリメントしていませんでした。私の質問は、現在のフレームを取得して処理するためにDirectShowがsamplegrabberを呼び出す準備ができているかどうかをチェックする方法があるかどうかです。現時点では、私は1秒間睡眠を呼びますが、より良い方法が必要です。事前にお手伝いいただきありがとうございます。DirectShowでサンプルグラバーがいつ準備完了になったかを調べる
EDIT
は、私は、ビデオの位置は、私が取得し、プロセスしたいと思います次の位置に等しいかどうかを確認するためのチェックを実行してみました。それは重複したフレームの数を減らしましたが、私はまだそれらが塊で現れるのを見ています。
私は現在、サンプルグラバーからデータを取得して準備が整っていて、そこから処理しているだけなので、コールバック関数を設定していません。私はオンラインで見て、IMediaSampleクラスの使い方に関する非常に限られたリソースを見ました。私は返されている "E_NOINTERFACE"ハンドルでグラフのインターフェイスを照会しようとしました。 – Seb
私のDirectShowの経験では、これを行う「正しい」方法は、サンプルグラバーコールバックによるものです。グラフを通過するすべてのサンプルを通知することによって、各サンプルで何をすべきかを完全に制御できます。 IMediaSampleインターフェイスについては、それほど多くはありません。上記のコードセクションで示されているようにメディアサンプルバッファを取得して処理/保存できるだけです。 IMediaSampleインターフェイスのグラフを照会することはできません。 IMediaSampleは、メディアサンプルのコンテナであり、DSグラフ(つまり、フィルタからフィルタ)に渡されます。 – Ralf
Samplegrabberからのコールバックを取得するためにコードをリファクタリングした後、すべてが完璧に機能します。私は睡眠の呼び出しを削除し、重複した画像なしで巨大なパフォーマンスの向上を得ることができました。ご協力ありがとうございました。 – Seb