次の方法で共有


ビデオ ポートベースのキャプチャ

ビデオ ポートに基づくキャプチャ デバイスは、ビデオ ポート マネージャーに接続するビデオ ポート ピンを提供する必要があります。 ビデオ ポート ピンを使用すると、ハードウェア ベースのトランスポートで、ペリフェラル・コンポーネント・インターコネクト (PCI) バスのオーバーヘッドなしでプレビュー ストリームを表示できます。 別のピンによってキャプチャ機能が提供されます (キャプチャされたビデオをディスクに書き込む必要がある場合など)。 キャプチャ プロセス中に、キャプチャ バッファーがディスプレイ ドライバーに提供され、バス マスタリングによってバッファーがいっぱいになります。 キャプチャ ミニドライバーとディスプレイ ドライバーの間の相互作用については、このセクションの後半とカーネル モードビデオトランスポートで詳しく説明します。

Microsoft Windows 98 Standard Edition または Windows 2000 を実行するシステムでは、オーバーレイ ミキサー フィルター (後のオペレーティング システムのビデオ ポート マネージャー フィルターの一部) では、セカンダリ モニターでのビデオ ポート接続はサポートされません。 この場合、ピンの接続は失敗します。 セカンダリ モニター上のビデオ ポート接続は、Windows Millennium Edition (Windows Me) と Windows XP を実行するシステムでサポートされています。

デバイスが VBI キャプチャをサポートしている場合、通常は VPVBI と VBI の 2 つの追加ピンが公開されます。 ビデオ ポート マネージャー フィルターは、VPVBI ピンを使用して、VBI キャプチャ用のビデオ ポート サーフェスを割り当てます。 VBI ピン自体は、生の VBI サンプルを提供します。

次の図は、VPVBI と VBI キャプチャの個別のパスを示しています。

vpvbi と vbi キャプチャの個別のパスを示す図。

この種類のフィルター グラフに固有のプロパティ セットは、KSPROPSETID_VPConfig and KSPROPSETID_VPVBIConfigPROPSETID_ALLOCATOR_CONTROL です。

ビデオ ポート拡張機能 (VPEs) の使用

注: 次の段落は、次のバージョンの Windows Vista より前のオペレーティング システムにのみ適用されます。 ディスプレイ ドライバーが新しい Windows Vista ドライバーディスプレイ モデル (LDDM) を使用している場合、Windows Vista では VPE が無効になります。

ビデオ キャプチャ ミニドライバーは、DxApi 関数を使用してビデオ ミニポート ドライバーと通信し、キャプチャ ストリーミング ビデオをキャプチャ ハードウェアとディスプレイ ハードウェアの間のビデオ ポート バス経由で転送できるようにします。 ストリームは NTSC、PAL、または SECAM ビデオのシーケンシャル フィールドで構成され、ブランキング (VBI) データとタイムコード (水平同期と垂直同期) データを含めることができます。 ディメンション、色形式、頻度、スケーリング、トリミングなどのビデオ ストリームの特性は、VPE DirectDraw インターフェイスを介してユーザー モードで構成されます。 ストリーミングが開始されると、 DxApi がカーネル モードで呼び出され、個々のフレームがキャプチャされます。 解像度の変更や全画面表示のコマンド プロンプトとの切り替えなどの表示の変更をサポートするには、ビデオ キャプチャ ミニドライバーもビデオ ミニポート ドライバーに登録して、このような表示変更イベントに応答できるようにする必要があります。

VPE と DxApi 関数は、DirectX 5.0 を使用して DirectDraw DDI に導入されました。 DxApi は、Windows 2000 以降のオペレーティング システムのビデオ ミニポート ドライバーでサポートされています。 仮想ディスプレイ ミニポート ドライバー (miniVDD) は、Windows 98 および Windows Me オペレーティング システムで DxApi をサポートしています。 DxApi を使用してカーネル モードのビデオトランスポートを有効にするには、WDM ビデオ キャプチャ ミニドライバーに ddkmapi.h (DirectDraw カーネル モード API) ヘッダー ファイルを含め、dxapi.lib ライブラリとのリンクを含める必要があります。 DxApi ライブラリは、dxapi.sysによってエクスポートされた機能を使用します。 DxApi.sysは、DxApi が DirectDraw DDI の VPEs の一部であるため、DirectDraw が読み込まれている場合にのみ使用できます。

DxApi は、DxApi.sysによって公開される単一のカーネル モード API です。 ビデオ ポート拡張機能は、DDraw.dllによって公開されるユーザー モード API です。 ビデオ キャプチャ ミニドライバーは、ビデオ ポート ハードウェアを 設定して正しくストリーミングするように構成するために、DxApi に対して複数の異なる呼び出しを行う必要があります。

DxApi は、複数の関数識別子をカプセル化する 1 つの関数です。 ミニドライバーは、最初の引数の目的の関数識別子を DxApi に渡します。 DxApi の残りの引数は、関数識別子とバッファーの長さに対応する構造体のミニドライバーによって割り当てられたバッファー用です。 関数の動作、および入力バッファーと出力バッファーのサイズと形式は、指定された関数識別子によって異なります。 この動作については、DxApi 関数と識別子に関する記事を参照してください。

WDK には、DxApi 機能を実装する方法を示す 2 つのサンプル ドライバーが用意されています。 ATIWDM サンプルでは、動作するために特定のハードウェアが存在する必要があります。 TestCap サンプルはハードウェアを必要とせず、すべてのプラットフォームで動作します。 GraphEdt ツールを使用して、いずれかのサンプルを操作できます。

ビデオ キャプチャ ミニドライバーが DxApi を呼び出して実行する必要がある一般的な機能は次のとおりです。

  • カーネル モードの DirectDraw へのハンドルを開きます (DxApi 関数識別子を DD_DXAPI_OPENDIRECTDRAW に設定)。 この操作は IRQL = PASSIVE_LEVELで実行する必要があります。

  • ハードウェア ビデオ ポートのカーネル モード機能 (DxApi 関数識別子を DD_DXAPI_GETKERNELCAPS に設定) を取得します。

  • モードが全画面表示のコマンド プロンプトに切り替わる (DxApi 関数識別子を DD_DXAPI_REGISTER_CALLBACK に設定) など、DirectDraw イベントを処理するためのコールバックを登録します。

  • DirectDraw サーフェスをターゲットにするハンドルを開きます (DxApi 関数識別子を DD_DXAPI_OPENSURFACE に設定)。

  • コールバックの登録を解除します (DxApi 関数識別子を DD_DXAPI_UNREGISTER_CALLBACK に設定)。

  • ハンドルをサーフェスとカーネル モード DirectDraw に閉じます (DxApi 関数識別子を DD_DXAPI_CLO Standard Edition HANDLE に設定)

ビデオ ポートの子デバイスと電源管理

テレビ のチューナやディスプレイの組み合わせアダプターなどのビデオ ポートの子デバイスは、ミニドライバーの使用中に電源状態の遷移をブロックできます。 電源状態遷移のブロックは、ミニドライバーがアクティブに使用されている場合に発生します (ピンまたはフィルターが開いている)。 ミニドライバーが読み込まれているが、使用中のピンまたはフィルターがない場合、電源状態は S0 (フルパワー) から下位の電源状態 (S1、S2、S3、S4 など) に遷移します。 電源状態遷移のブロックは、ビデオ ポートの子デバイスのクライアントである Stream クラス ミニドライバーでのみ発生します。

WHQL 免除は、この条件を満たすデバイスで利用できるため、ベンダーは引き続きロゴを取得できます。