DirectShow ビデオ キャプチャ フィルター
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
DirectShow のキャプチャ フィルターには、他の種類のフィルターと区別するいくつかの機能があります。 Capture Graph Builder では多くの詳細が非表示になりますが、DirectShow キャプチャ グラフの一般的な理解を深めるためには、このセクションを読んでおくことをお勧めします。
カテゴリをピン留めする
キャプチャ フィルターには、多くの場合、プレビュー ピンやキャプチャ ピンなど、同じ種類のデータを提供する 2 つ以上の出力ピンがあります。 そのため、メディアタイプはピンを区別する良い方法ではありません。 代わりに、ピンは、PIN カテゴリと呼ばれる GUID を使用して識別される機能によって区別されます。
カテゴリのピンに対してクエリを実行する方法の詳細については、「ピン カテゴリ の操作」を参照してください。 ただし、ほとんどのアプリケーションでは、ピンに直接クエリを実行する必要はありません。 代わりに、さまざまな ICaptureGraphBuilder2 メソッドは、操作するピン カテゴリを指定するパラメーターを受け取ります。 Capture Graph Builder は、正しいピンを自動的に見つけます。
プレビュー ピンとキャプチャ ピン
一部のビデオ キャプチャ デバイスには、プレビューとキャプチャ用に個別の出力ピンがあります。 プレビューピンはビデオを画面にレンダリングするために使用され、キャプチャピンはファイルにビデオを書き込むのに使用されます。
プレビュー ピンとキャプチャ ピンには、次の違いがあります。
- プレビュー ピンは、キャプチャ ピンのスループットを維持するために必要に応じてフレームをドロップします。
- キャプチャ ピンの各フレームには、フレームがキャプチャされたときのストリーム時間と共にタイムスタンプが付きます。 プレビュー ピンは、提供されるサンプルにタイム スタンプを設定しません。
プレビュー フレームにタイム スタンプがない理由は、フィルター グラフによってストリームに少量の待機時間が発生するためです。 キャプチャ時間をプレゼンテーション時間として使用する場合、ビデオ レンダラーはすべてのサンプルを少し遅れていると扱います。 これにより、ビデオ レンダラーが追いつこうとするときにフレームがドロップされる可能性があります。 タイム スタンプを削除すると、フレームを削除することなく、レンダラーが到着したときに各サンプルが表示されるようになります。
プレビュー ピンのピン カテゴリはPIN_CATEGORY_PREVIEW。 キャプチャ ピンのカテゴリはPIN_CATEGORY_CAPTURE。
ビデオ ポート ピン
ビデオ ポートは、ビデオ デバイス (アナログ テレビ チューナーなど) とビデオ カード間のハードウェア接続です。 ビデオ ポートを使用すると、デバイスはビデオ データをグラフィックス カードに直接送信できます。 ビデオは、ハードウェア オーバーレイを使用して画面に表示されます。 ビデオ ポートは、2 つのデバイスを別々のカードに接続する実際のケーブルである場合があります。または、同じカード上の有線接続である可能性があります。
ビデオ ポートの利点は、ビデオが直接ビデオ メモリに入り、CPU による作業が不要になる点です。 ただし、ビデオ ポートにはいくつかの欠点があります。
- ビデオ ポートでは、ビデオをプレビューするかどうかに関係なく、キャプチャ時に常にオーバーレイ サーフェスが使用されます。
- フレーム間の反転は自動的に行われ、反転を他のビデオ操作と同期することが困難になります。
キャプチャ デバイスでビデオ ポートが使用されている場合、キャプチャ フィルターにはプレビュー ピンではなくビデオ ポート ピンがあります。 ビデオ ポート ピンのピン カテゴリはPIN_CATEGORY_VIDEOPORT。
すべてのキャプチャ フィルターには、少なくとも 1 つのキャプチャ ピンがあります。 さらに、プレビューピンまたはビデオポートピンを持っているかもしれませんが、両方を持つことはありません。 フィルターには複数のキャプチャ ピンとプレビュー ピンを含めることができます。それぞれ異なるメディアの種類が提供されます。 したがって、1 つのフィルターにビデオ キャプチャ ピン、ビデオ プレビュー ピン、オーディオ キャプチャ ピン、オーディオ プレビュー ピンを設定できます。 (ただし、オーディオのビデオ ポートに相当するものはありません)。
アップストリーム WDM フィルター
Windows ドライバー モデル (WDM) デバイスでは、キャプチャ フィルターのアップストリームにいくつかの追加フィルターが必要になる場合があります。 これらのフィルターには、次のものが含まれます。
- TVチューナフィルター。 アナログTVチューナのチューニングを制御します。
- TV オーディオ フィルター。 アナログテレビのチューナのオーディオ設定を制御します。
- アナログビデオクロスバーフィルタ。 ハードウェア デバイスを介してビデオとオーディオの信号をルーティングします。 たとえば、デバイスには、S-Video や複合ビデオなどの複数の入力が含まれます。 クロスバー フィルターを使用すると、アプリケーションで入力を選択できます。
これらは DirectShow の個別のフィルターですが、通常は同じハードウェア デバイスを表します。 各フィルターは、デバイスの異なる機能を制御します。 フィルターはピンで接続されますが、ピン接続間でメディア データが移動しません。 したがって、これらのフィルターのピンは、メディアの種類を確立することによって接続されません。 代わりに、 mediums と呼ばれる GUID 値を使用します。 中 GUID は、特定のデバイス ミニドライバーに対して一意に定義されます。 たとえば、同じテレビ カードの TV チューナ フィルターとビデオ キャプチャ フィルターはどちらも同じメディアをサポートするため、アプリケーションでグラフを正しく構築できます。
実際には、 ICaptureGraphBuilder2 を使用してキャプチャ グラフを作成している限り、これらのフィルターは自動的にグラフに追加されます。 詳細については、「 WDM クラス ドライバー フィルター」を参照してください。
関連トピック