マルチピン カメラのドライバー MF Tに関する考慮事項 (UWP デバイス アプリ)

Windows 8.1 は、カメラ ドライバー MFT と呼ばれるメディア ファンデーション変換 (MFT) の形式でビデオ処理プラグインを作成する機能を IHV およびシステム OEM に提供します。 インストールされると、これらのドライバー MFT は UWP デバイス アプリで使用され、特殊なビデオ効果を有効にできます。 一部のカメラでは、プレビュー、キャプチャ、および静止画用に個別のピンが提供されます。 これらのマルチピン カメラは、開発者に固有の課題をもたらします。 このトピックでは、マルチピン カメラでカメラ ドライバー MFT を開発する際に考慮すべきいくつかのポイントについて説明します。 ドライバー MFT の作成の詳細については、「カメラ ドライバー MFT の作成」を参照してください。

はじめに

ドライバー MFT は、ソース リーダーで動作する最初の MFT であることを示すために "MFT0" とも呼ばれます。 MFT0 の個別のインスタンスは、キャプチャ ソース上のすべてのピンにアタッチされます。 一部のシステム OEM では、AVStream キャプチャ ドライバーは、プレビュー ピン、キャプチャ ピン、スチル ピンをサポートする必要があります。 これは、MFT0 のインスタンスが 3 つある可能性があることを意味します。 次の図はこのアーキテクチャを示すもので、IHV プラグイン MFT のコピーが 3 つ (ストリームごとに 1 つ) あります。

capture extension plug-in model in mf.

MFT0 の一般的なシナリオでは、課題が生じる可能性があります。 MFT0 の 2 つの一般的な機能は次のとおりです。

  • ビデオ ストリームを分析してカメラにフィードバックを提供し、キャプチャを改善する (ホストベースの自動フォーカスや自動露出など)

  • ビデオ効果を追加する

1 ピンの Web カメラ

これまで、カメラは単一のキャプチャ ピンとして Windows に公開されてきました。 次の図は、1 ピンの Web カメラの動作を表しています。

one-pin webcam.

この場合、カメラ コントロールとビデオ効果の両方が設計どおりに動作します。これは、カメラ コントロールとビデオ効果が適用された後、キャプチャ ピンからプレビューとスティルがティード (tee'd) されるためです。 その結果、格納されたファイルまたはユーザーのチャット相手には、ユーザーがプレビューで見ているものと同じビデオ効果が表示され、カメラ コントロール機能のインスタンスは 1 つだけになります。 関連付けられている UWP デバイス アプリがある場合、アプリはキャプチャ ピンの MFT0 に接続されるため、MFT0 はアプリ (つまりユーザー) からの制御メッセージを取得します。

3 ピンの Web カメラ

3 ピン カメラは、アプリケーションのニーズに応じて、MFT0 のインスタンスを 3 つ持っている場合があります。 次の図は、3 ピン カメラの動作を表しています。

three-pin webcam.

この状況には、いくつかの課題があります。 まず、カメラ センサーと ISP の設定を直接制御する必要があるホストベースの自動露出ソリューションでは、3 つの MFT0 が同時にカメラを制御しようする可能性があります。 この場合、制御システムは中断されます。

次に、ビデオ効果のインスタンスが 3 つ存在する可能性があります。 3 倍の計算コストが発生するだけでなく、3 つの MFT0 インスタンスは、各ビデオ フレームが常にまったく同じ状態で同じ効果を持つような方法で通信する必要があります。 そうしなければ、ユーザーに表示される内容は保存も共有もされません。

さらに、最終的な複合要因が 2 つあります。

  • 各 MFT0 インスタンスは、いつでも作成またはシャットダウンできます

  • UWP デバイス アプリは、1 つの MFT0 インスタンスにのみ接続されます

圧縮ビデオ

Web カメラまたはシステムの OEM は、キャプチャ ピン (つまり、Web カメラ自体) に表示される前にビデオを圧縮することを選択できます。 Web カメラに圧縮をオフロードすると、低電力の PC で HD ビデオを保存して共有できます。 一般に、この圧縮されたビデオ ストリームは、カメラ コントロールをサポートするために分析することも、ビデオ効果を適用することもできません。 これにより、MFT0 (および存在する場合は Microsoft Store デバイス アプリ) のすべてのインスタンスに、効果がキャプチャ ストリームに適用されないことを認識させるという課題が生じます。 次の図は、圧縮ビデオを表しています。

compressed video.

ユーザーがプレビュー ストリームにビデオ効果を適用した場合、キャプチャ ストリームまたはスチル ピンに適用することはできません。 したがって、ユーザーには、保存またはストリーミングされたビデオに適用されていないビデオ効果が表示されます。 プレビュー ストリームが停止すると、Microsoft Store デバイス アプリはキャプチャ ストリームへの接続を試みます。 ユーザーが圧縮ビデオをストリーミングしている場合、これにより多くの機能が許可されません。

MFT0 インスタンス間の通信

3 つの MFT0 インスタンスが相互に通信できる場合、これでほとんどの問題が解決される可能性があります。 これらのインスタンスが互いを検出する方法は、IHV によります。 すべての MFT0 で通信ができると、Microsoft Store デバイス アプリに接続されている MFT0 のインスタンスは、適用されている効果とその現在の状態を他のインスタンスに知らせることができます。 また、3 つのインスタンスは、カメラ コントロールを適用するインスタンスを決定できます。 最後に、プレビュー ピンは、キャプチャ ピンがエンコードされたビデオをストリーミングしているかどうかを判断できます。 プレビュー ピンは、ビデオ効果を無効にできます。

MFT0 のインスタンス間の通信でユーザー エクスペリエンスの主要な問題を解決できますが、ビデオ効果の 3 つのインスタンスが同時に実行されている必要があります。 一部のビデオ効果では、特に全画面表示ビデオが同時にプレビューおよびキャプチャされている場合に、利用可能なほとんどの CPU リソースを使用する可能性があります。 これらは重大な問題です。 パフォーマンス上の理由から、各 ISV は、顔検出のように一度だけ実行され、MFT0 のすべてのインスタンスで共有される可能性のある処理を検討する必要があります。