ISV の詳細設計 (Camera Profile V2)
ISV の Camera Profiles 1507 の使用は、プロファイルの表示方法の複雑な性質と、プロファイルが単なる有益なデータ セットであるという事実により、重要な課題を提示しました。基になるパイプラインでは、ハードウェアの制約に違反したメディアの種類とストリームの組み合わせが引き続き許可されます。
ISV は、ストリームがアクティブ化されたときに失敗する方法でキャプチャ パイプラインを構成するリスクを引き続き実行しました。
カメラ プロファイル V2 の場合、メディア キャプチャ オブジェクトの初期化時に選択したプロファイルの構成がフレーム サーバーに伝達され、フレーム サーバーでは、そのプロファイル内で有効なストリーム/メディアの種類の組み合わせのみが公開されます。
フレーム サーバー経由でルーティングされるときに複数のメディア キャプチャ オブジェクトを作成するコストが低いため、アプリケーションは同じソースを使用してメディア キャプチャ オブジェクトの複数のインスタンスを事前に作成できます。 最初に作成された場合にのみ、ソース作成の待機時間が発生します。 後続のインスタンスは、フレーム サーバー上に既に作成されているソースを取得し、プロファイルに基づいてストリーム/メディアの種類のセットをフィルター処理するだけです。
高品質の写真モードと、高フレーム レートのビデオまたは 4K ビデオを含むビデオ録画モードの両方を公開するアプリケーションでは、同じカメラ ソース用に異なるプロファイルで構成されたメディア キャプチャ オブジェクトの複数のインスタンスを作成できます。 メディア キャプチャ オブジェクトの 1 つだけが任意の時点でアクティブにストリーミングされている限り、Media Capture オブジェクトを切り替えると待機時間がほとんど発生しません (通常は、いくつかの RPC 呼び出しのコストがかかります)。
カメラ Profile 1507 は、MediaCaptureVideoProfile オブジェクトを介してプロファイルを公開します。 このオブジェクトは、特定のデバイス ID を指定することによって MediaCapture ファクトリを通じて検出されます。 このデバイス中心のビューは、特定のシナリオを有効にしたいアプリが、最初に選択したデバイスを列挙/検索し、そのデバイスを使用して使用可能なプロファイルを反復処理する必要があることを意味します。
カメラ Profile V2 は、デバイス中心の API サーフェスを提供し続けるために API サーフェスを拡張しますが、これに加えて、カメラ Profile V2 ではシナリオ駆動型プロファイル列挙も提供されます。
代わりに、特定のカメラから開始する代わりに、アプリケーションは特定のシナリオから始まります。 たとえば、World Facing カメラ シナリオを使用したビデオ録画などです。
このエントリ ポイントは、そのシナリオに適したすべての使用可能なカメラのアプリケーションを提供します。 シナリオの詳細に応じて、結果の MediaFrameSourceGroup リストに複数のエントリが含まれる場合があります。 場合によっては、エントリがない可能性があります。 たとえば、ワールドカメラを持たないオールインワンデバイスのワールド向けカメラを使用したビデオ録画では、空のセットが返されます。
シナリオを記述するために使用される "言語" では、最小条件に基づいてフォールバックが可能になります。 この言語では、"30 fps の最小フレーム レートで可能な世界向けカメラと最高解像度のビデオ録画" が可能です。
プロファイル ベースのフィルター処理
フレーム サーバー アーキテクチャを使用する主な利点の 1 つは、クライアント アプリ上のメディア キャプチャ オブジェクトの仮想表現であるフレーム サーバー上のクライアント コンテキスト オブジェクトが物理ソースから切り離されていることです。
これにより、同じソースを使用するクライアント コンテキスト オブジェクトの複数のインスタンスを特定の操作モードで構成できます。これには、基になるユース ケースと競合する可能性があるピン/メディアの種類のフィルター処理を含めることができます。
デバイス ソースはクライアント コンテキストの一部ではないので、構成が異なるクライアント コンテキスト オブジェクトの複数のインスタンスを作成しても、大きなオーバーヘッドは発生しません (内部データ構造を追跡するために必要なオーバーヘッドと同じくらい)。
ソースの作成/初期化の待機時間は、最初のクライアント コンテキストに対しては引き続き発生しますが、作成後、同じ構成または異なる構成を持つ後続のインスタンスでは、内部データ構造を作成するオーバーヘッドが増えるだけです。
次の図は、null プロファイルで構成されたメディア キャプチャがクライアント コンテキストを介してフレーム サーバーによって公開される方法を示しています。
上の図では、各ソースでプレビュー、キャプチャ、写真の 3 つのピンが公開されています。 また、null プロファイルが設定されたため、結果として得られる Media Capture は 9 つのピンすべてをアプリケーションに公開します。 アプリケーションは、各ピンと各ピンで使用可能な各メディアの種類を調べることができます。
これにより、アプリに柔軟性が提供されますが、ステート マシンを管理して、同時にアクティブ化できるメディアの種類/ピンの組み合わせを決定する複雑さが増します。
ただし、プロファイル ベースのフィルター処理を使用すると、次の処理が行われます。
アプリケーションは、それぞれ特定のプロファイルで構成された複数の Media Capture インスタンスを作成できます。 上の図では、null プロファイル インスタンスは図のように残されています。アプリケーションは、null プロファイル インスタンスを作成しないことを選択できます。
下位のメディア キャプチャ オブジェクトは、それぞれ特定のプロファイルで構成されます。 ソースの IHV/OEM によって発行されたプロファイル情報に基づいて、結果のパイプラインは必要なソースのみをプルします。
HQ Photo World Facing プロファイルの場合、IHV/OEM が示したメディアの種類と共に公開されるのは、World Facing RGB (Source 3) のプレビューピンと写真ピンだけです。 これは、IHV/OEM が HQ Photo の場合、同時キャプチャができないことを示していることを前提としています。 同時キャプチャが許可されている場合、キャプチャ ピンと、写真と記録の同時操作に使用できるメディアの種類が公開されます。
録画ユーザー向けの場合、ユーザー向け RGB (ソース 1) のプレビュー ピンとキャプチャ ピンのみが公開されます。 ここでも、上の図は、キャプチャ ピンがアクティブな場合に写真操作ができないことを前提としています。
Mixed Reality プロファイルでは、World Facing RGB ビデオ ストリームと World Facing Perception ビデオ ストリームがクライアント アプリに公開されます。 また、同時に動作することが保証されているメディアの種類のみが使用可能になります。