Important
デバイス メタデータは非推奨となり、Windows の今後のリリースで削除される予定です。 この機能の置き換えについては、「 ドライバー パッケージ コンテナー メタデータ」を参照してください。
Windows は、カメラ ドライバー MFT と呼ばれる Media Foundation Transform (MFT) の形式でビデオ処理プラグインを作成する機能を IHV およびシステム OEM に提供します。 インストール後、これらのドライバーの MFT は、特殊なビデオ効果を有効にするために UWP デバイス アプリによって使用されます。 一部のカメラでは、プレビュー、キャプチャ、および静止用に個別のピンが提供されます。 これらのマルチピン カメラは、開発者に固有の課題をもたらします。 この記事では、マルチピン カメラでカメラ ドライバー MFT を開発する際に考慮すべきいくつかの点について説明します。 ドライバー MFT の作成の詳細については、「 カメラ ドライバー MFT の作成」を参照してください。
Introduction
ドライバー MFT は、ソース リーダーで動作する最初の MFT であることを示すために MFT0 とも呼ばれます。 MFT0 の個別のインスタンスは、キャプチャ ソース上のすべてのピンにアタッチされます。 一部のシステム OEM の場合、AVStream キャプチャ ドライバーは、プレビュー ピン、キャプチャ ピン、および静止ピンをサポートする必要があります。 これは、MFT0 のインスタンスが 3 つある可能性があることを意味します。 この図は、このアーキテクチャを示しています。IHV プラグイン MFT のコピーは 3 つあり、ストリームごとに 1 つです。
MFT0 の一般的なシナリオでは、課題が発生する可能性があります。 MFT0 の 2 つの一般的な関数は次のとおりです。
ビデオ ストリームを分析してカメラにフィードバックを提供し、キャプチャを改善する (ホスト ベースの自動フォーカスや自動露出など)
ビデオ効果の追加
One-pin webcam
これまで、カメラは単一のキャプチャ ピンとして Windows に公開されていました。 次の図は、ワンピン Web カメラの動作を表しています。
この場合、カメラコントロールとビデオエフェクトはどちらも、カメラコントロールとビデオエフェクトを適用した後にキャプチャピンからプレビューとスティルが接続されるため、設計どおりに動作します。 その結果、保存されたファイルまたはユーザーのチャットバディには、ユーザーがプレビューで表示するのと同じビデオ効果が表示され、カメラコントロール機能のインスタンスは 1 つだけです。 関連付けられている UWP デバイス アプリがある場合、アプリはキャプチャ ピンの MFT0 に接続されるため、MFT0 はアプリ (つまりユーザー) から制御メッセージを取得します。
Three-pin webcam
3 ピン カメラは、アプリケーションのニーズに応じて、MFT0 のインスタンスを 3 つまで持つことができます。 次の図は、3 ピン カメラの動作を表しています。
この状況には、いくつかの課題があります。 まず、カメラ センサーと ISP の設定を直接制御する必要があるホスト ベースの自動露出ソリューションの場合、3 つの MFT0 が同時にカメラを制御しようとしている可能性があります。 これにより、制御システムが中断されます。
次に、ビデオ効果のインスタンスが 3 つ存在する可能性があります。 計算の 3 倍のコストが発生する以外に、MFT0 の 3 つのインスタンスは、各ビデオ フレームが常にまったく同じ状態で同じ効果を持つよう通信する必要があります。 それ以外の場合、ユーザーに表示される内容は保存または共有されません。
さらに、2 つの最終的な複合要因があります。
MFT0 の各インスタンスはいつでも作成またはシャットダウンできます
UWP デバイス アプリは、MFT0 の 1 つのインスタンスにのみ接続されます
Compressed video
Web カメラまたはシステム OEM は、キャプチャ ピン (つまり、Web カメラ自体) に表示される前にビデオを圧縮することを選択する場合があります。 Web カメラに圧縮をオフロードすると、低い電力の PC で HD ビデオを保存して共有できます。 この圧縮されたビデオ ストリームは、一般に、カメラ制御をサポートするために分析することも、ビデオ効果を適用することもできません。 このシナリオでは、キャプチャ ストリームに影響が適用されていないことを MFT0 のすべてのインスタンス (および Microsoft Store デバイス アプリ (存在する場合) に認識させるという課題を示します。 次の図は、圧縮されたビデオを表しています。
ユーザーがプレビュー ストリームにビデオ効果を適用した場合、キャプチャ ストリームまたはスティル ピンにそれを適用することはできません。 そのため、ユーザーには、保存またはストリーミングされたビデオに適用されていないビデオ効果が表示されます。 プレビュー ストリームが停止した場合、Microsoft Store デバイス アプリはキャプチャ ストリームへの接続を試みます。 ユーザーが圧縮ビデオをストリーミングしている場合、これは多くの機能を許可しません。
MFT0 インスタンス間の通信
MFT0 の 3 つのインスタンスが相互に通信できる場合は、ほとんどの問題が解決される可能性があります。 これらのインスタンスが互いを検出する方法は、IHV にかかっています。 すべての MFT0 が通信できたら、Microsoft Store デバイス アプリに接続されている MFT0 のインスタンスは、適用されている効果とその現在の状態を他のインスタンスに知らせることができます。 また、3 つのインスタンスは、カメラ コントロールを適用するインスタンスを決定できます。 最後に、プレビュー ピンは、キャプチャ ピンがエンコードされたビデオをストリーミングしているかどうかを判断できます。 プレビューピンは、ビデオ効果を無効にすることができます。
MFT0 のインスタンス間の通信は、ユーザー エクスペリエンスの主要な問題を解決しますが、ビデオ効果の 3 つのインスタンスが同時に実行されている必要があります。 一部のビデオ効果では、特に全画面表示ビデオが同時にプレビューおよびキャプチャされている場合に、利用可能なほとんどの CPU リソースを使用できます。 これらは重大な問題です。 パフォーマンス上の理由から、各 ISV では、1 回実行できる処理を考慮し、顔検出など、MFT0 のすべてのインスタンスと共有する必要があります。