AVStream のハードウェア コーデック サポートの概要
Windows 7 以降、 Windows Media Foundation は AVStream ベースのメディア コンポーネントをユーザー モード Media Foundation Transform (MFT) として表します。
この機能を使用することで、ベンダーはハードウェア ベースのデコーダー、エンコーダー、およびビデオ プロセッサを、アプリケーション レベルで操作できる MFT として提示できます。
AVStream モデルは Windows 7 では変更されず、この機能を有効にするためにミニドライバーにいくつかの追加のみが必要です。
このコード変換トポロジを次の図に示します。
パフォーマンスを最大限に高めるには、図の一番下の行に表示されるメディア処理が専用ハードウェアで行われる必要があります。 このシナリオでは、専用のトランスコード ハードウェアは、セキュリティで保護されたハードウェア エンコーダー デコーダー (SHED) と呼ばれます。 SHED は、マザーボード用のプラグイン モジュールとして、またはディスプレイ アダプタの統合機能としてパッケージ化することができます。
Windows 7 では、ソフトウェア ベースのコード変換が引き続きサポートされています。 ただし、システムは CPU ではなく専用ハードウェアでコード変換作業を実行するため、SHED ベースのソリューションでは、ソフトウェア ベースのソリューションと比較してユーザー エクスペリエンスが大幅に向上します。
前の図に示すように、ユーザー モード クライアントは、各 MFT で公開されている IMFTransform インターフェイスを使用して、ユーザーモード変換にアクセスできます。 IMFTransform は Vista 以降のバージョンの Windows で使用できますが、ハードウェア ベースのメディア処理をユーザー モード アプリケーションに公開するメカニズムは、Windows 7 以降でのみ使用できます。
システム提供のデバイス プロキシ (Devproxy) モジュールは、DirectShow ストリーミング モデルの KSProxy と同じ役割を果たします。 Devproxy ブローカーは、カーネル モードのKs.sys とユーザー モードの MFT コンポーネント間の通信を仲介します。
結果としてラップされたハードウェア メディア処理関数は、デバイス プロキシ MFT と呼ばれます。 このメカニズムを利用するには、AVStream ミニドライバーで次の操作を行う必要があります。
AVStream ミニドライバーの一部である個々の KS フィルターとして変換関数を公開します。 たとえば、デバイスにデコード、エンコード、およびビデオ処理機能がある場合、これらの関数は 3 つの異なる KS フィルターとして表す必要があります。
エンコーダー: 圧縮されていない形式から圧縮形式に変換するために使用されます。
デコーダー: NV12 を含める必要がある圧縮形式から圧縮されていない形式に変換するために使用されます。
ビデオ プロセッサ: スケーリング、インターレース/インターレース解除、およびフォーマット変換を実行するために使用されます。 デコーダーまたはエンコーダー フィルターにビデオ処理のサポートを含めないでください。
Microsoft では、ベンダーがハードウェア ベースのスケーリングサポートを提供することを強くお勧めします。 ただし、ハードウェア ベースのスケーリングサポートを提供しないことを選択した場合は、システム提供のビデオ処理 MFT を使用して、パフォーマンスの低下レベルでスケーリング操作を実行できます。 ハードウェア ベースのスケーリングのサポートを提供しない場合、Media Foundation トポロジ ビルダーは、システム提供のスケーリング MFT をトポロジに自動的に挿入します。
Windows 7 以降のバージョンの Windows で利用可能な次の KS カテゴリのいずれかに、そのメディア処理 KS フィルターを登録します。
さらに、他のコード変換シナリオで使用するために、次のカテゴリも定義されています。
その後、Media Foundation アプリケーションでは、MFTEnumEx 関数を使用して、以前にメンションカテゴリを使用して、MFT として登録されているデバイスを列挙できます。