camera_info 構造体リファレンス
#include <
camera_common.h
>
データ フィールド |
|
int | 向き |
int | 向き |
uint32_t | device_version |
const camera_metadata_t * | static_camera_characteristics |
int | resource_cost |
char ** | conflicting_devices |
size_t | conflicting_devices_length |
詳細な説明
ファイル camera_common.h の 161 行 の定義。
フィールドのドキュメント
char** conflicting_devices |
このカメラデバイスの使用中に同時に開くことができない他のデバイスを示す、NULL で終端された文字列として表されるカメラデバイス ID の配列。
このフィールドは、このカメラ デバイスが他の複数のカメラ デバイスの複合体であるか、ハードウェアに依存関係があり、同時に使用できないことを示すために使用します。依存関係がない場合、このフィールドに NULL が返され、依存関係がないことを示します。
このカメラデバイスが開いている間は、カメラ サービスがこのリスト内のデバイスを同時に開くことはありません。
このフィールドで参照される文字列はカメラ サービスによってクリーンアップされず、このデバイスが電源に接続されている間は残しておく必要があります。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_2_3 以前:
無効です。NULL と想定できます。このフィールドは読み取らないでください。
CAMERA_MODULE_API_VERSION_2_4 以降:
常に有効。
ファイル camera_common.h の 404 行の定義。
size_t conflicting_devices_length |
conflicting_devices フィールドで指定された配列の長さ。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_2_3 以前:
無効です。0 と想定できます。このフィールドは読み取らないでください。
CAMERA_MODULE_API_VERSION_2_4 以降:
常に有効。
ファイル camera_common.h の 419 行の定義。
uint32_t device_version |
camera_device_t.common.version の値。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_1_0:
無効です。CAMERA_DEVICE_API_VERSION_1_0 と想定できます。このフィールドは読み取らないでください。
CAMERA_MODULE_API_VERSION_2_0 以降:
常に有効
ファイル camera_common.h の 219 行 の定義。
int の向き |
カメラの向き。カメラの向きの定義については、system/core/include/system/camera.h をご覧ください。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_2_3 以前:
CAMERA_FACING_BACK または CAMERA_FACING_FRONT にする必要があります。
CAMERA_MODULE_API_VERSION_2_4 以降:
CAMERA_FACING_BACK、CAMERA_FACING_FRONT、CAMERA_FACING_EXTERNAL のいずれかです。
ファイル camera_common.h の 177 行 の定義。
int orientation |
カメラ画像の向き。この値は、カメラ画像を時計回りに回転させて、ディスプレイに自然な向きで正しく表示させる必要がある角度です。0、90、180、270 のいずれかを指定します。
たとえば、デバイスの画面が縦長であるとします。背面カメラセンサーは横向きに配置されています。画面を見ています。カメラセンサーの上部が自然な向きで画面の右端と一致する場合、値は 90 にする必要があります。前面カメラのセンサーの上部が画面の右側と揃っている場合は、値は 270 にする必要があります。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_2_3 以前:
すべての camera_module バージョンで有効です。
CAMERA_MODULE_API_VERSION_2_4 以降:
カメラの向きが CAMERA_FACING_BACK または CAMERA_FACING_FRONT の場合に有効です。カメラの向きが CAMERA_FACING_EXTERNAL の場合は無効です。
ファイル camera_common.h の 202 行 に定義されています。
int resource_cost |
このカメラの使用によるリソースの合計「コスト」。[0, 100] の範囲の整数値で表されます。100 は、カメラ サブシステムの制限ボトルネックである共有リソースの合計使用量を表します。これは非常に大まかな推定値であり、カメラ サービスによってアドバタイズされた複数のカメラを複数のアプリが同時に開くことを許可しないタイミングを判断するためのヒントとしてカメラ サービスに使用されます。
カメラサービスは、HAL によって公開されるカメラデバイスの任意の組み合わせを同時に開いて使用でき、これらのカメラのリソース費用の合計が 100 以下である必要があります。費用を決定するには、各カメラデバイスが、カメラのメタデータを通じてそのデバイスに公開されている構成設定で、リソース消費量が最大になるフレームレートとストリームサイズで構成され、動作していると想定する必要があります。
カメラ サービスは、リソース費用の合計が 100 を超えるカメラデバイスの組み合わせを同時に開こうとすることがあります。成功する場合もあれば、失敗する場合もあります。これが成功すると、複数のデバイスが開いているためにリソース制約によりサポートされていない構成の組み合わせは、構成呼び出し中に失敗します。リソースの合計費用が 100 以下の場合、ストリーム構成の設定や、デバイスが唯一の開いているカメラデバイスである場合に通常は成功する他のデバイス機能のオープンと構成が失敗することはありません。
このフィールドは、他のアプリが他のカメラ デバイスを使用しているときに、バックグラウンド アプリがこのカメラ デバイスを使用できるかどうかを判断するために使用されます。注: カメラ サービスは、複数のアプリが同じカメラデバイスを同時に開くことを許可しません。
ユースケース例:
例: 1: カメラデバイス 0 = 背面カメラ カメラデバイス 1 = 前面カメラ
- 両方のカメラデバイスを使用すると、ISP 帯域幅が制限されるため、フレームレートが大幅に低下します。
構成:
カメラデバイス 0 - resource_cost = 51 conflicting_devices = null カメラデバイス 1 - resource_cost = 51 conflicting_devices = null
結果:
リソース費用の合計が 100 を超えるため、優先度の高いアプリがいずれかのデバイスを開いている場合、カメラ サービスは優先度の低いアプリがいずれかのデバイスを開くことを許可しません。優先度の低いアプリが、優先度の高さが後で開こうとしているデバイスを使用している場合、優先度の低いアプリはデバイスとの接続を強制的に切断されます。
優先度が最も高いアプリが選択した場合、(これらのデバイスは conflicting_devices フィールドに競合としてリストされていないため)両方のデバイスを開こうとしますが、open 呼び出しまたは configure 呼び出しでこれらのデバイスの使用が失敗する可能性があります。
例: 2: カメラ デバイス 0 = 左背面カメラ カメラ デバイス 1 = 右背面カメラ カメラ デバイス 2 = デバイス 0 と 1 で使用される右背面カメラ センサーと左背面カメラ センサーの両方を使用する統合ステレオカメラ カメラ デバイス 3 = 前面カメラ
- ハードウェアの制約により、一度に開けるカメラは 2 台までです。統合ステレオカメラは、2 つの背面カメラデバイス(デバイス 0、1)のいずれかと同時に使用されることはありません。また、通常、前面カメラ(デバイス 3)と同時に使用するには帯域幅が大きすぎます。
構成:
Camera Device 0 - resource_cost = 50 conflicting_devices = { 2 } Camera Device 1 - resource_cost = 50 conflicting_devices = { 2 } Camera Device 2 - resource_cost = 100 conflicting_devices = { 0, 1 } Camera Device 3 - resource_cost = 50 conflicting_devices = null
結果:
conflicting_devices フィールドに基づいて、カメラ サービスは、次の開いているデバイスのセット({ 1, 2 }, { 0, 2 })が決して許可されないようにします。
resource_cost フィールドに基づいて、優先度の高いフォアグラウンド アプリがカメラデバイス 0 を使用している場合、バックグラウンド アプリはカメラデバイス 1 または 3 を開くことができます(ただし、フォアグラウンド アプリが別のデバイスを開いた場合は、再度切断する必要があります)。
優先度が最も高いアプリは、デバイス 0、2、3 を同時に開こうとしますが、この組み合わせのオープンまたは構成呼び出しで HAL が失敗する可能性があります。
例: 3: カメラ デバイス 0 = 背面カメラ カメラ デバイス 1 = 前面カメラ カメラ デバイス 2 = デバイス 1 と同じセンサーを使用する低電力の前面カメラ。ただし、低電力モードで使用できる画像ストリームの解像度のみを公開します。
-
物理センサーを共有しているため、両方の前面カメラ(デバイス 1、2)を同時に使用することはできません。ハードウェアの制限により、一部のストリーミング構成では背面カメラと「高電力」の前面カメラ(デバイス 1)を使用できない場合がありますが、「低電力」の前面カメラ オプションは、専用のハードウェアが搭載されているため、常に使用できます。
構成:
カメラ デバイス 0 - resource_cost = 100 conflicting_devices = null カメラ デバイス 1 - resource_cost = 100 conflicting_devices = { 2 } カメラ デバイス 2 - resource_cost = 0 conflicting_devices = { 1 } 結果:
conflicting_devices フィールドに基づいて、カメラ サービスは、次のオープン デバイスのセット { 1, 2 } が決して許可されないようにします。
resource_cost フィールドに基づいて、デバイス 0 とデバイス 1 の両方を同時に開こうとするのは、優先度が最も高いアプリのみです。優先度の高いアプリがデバイス 1 または 2 を使用していない場合、優先度の低いバックグラウンド アプリがデバイス 2 を開くことがあります(ただし、優先度の高いアプリがデバイス 1 または 2 を開いた場合は、強制的に切断されます)。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_2_3 以前:
無効です。100 と想定できます。このフィールドは読み取らないでください。
CAMERA_MODULE_API_VERSION_2_4 以降:
常に有効。
ファイル camera_common.h の 376 行の定義。
const camera_metadata_t * static_camera_characteristics |
カメラの固定特性。system/media/camera/docs/docs.html で指定されているすべての静的カメラ メタデータが含まれます。これは並べ替えられたメタデータ バッファである必要があります。呼び出し元によって変更または解放することはできません。ポインタはカメラ モジュールの存続期間中有効なままである必要があります。また、get_camera_info() によって返された後、その値は変更されない可能性があります。
バージョン情報(camera_module_t.common.module_api_version に基づく):
CAMERA_MODULE_API_VERSION_1_0:
無効です。追加の特性を使用することはできません。このフィールドは読み取らないでください。
CAMERA_MODULE_API_VERSION_2_0 以降:
device_version >= CAMERA_DEVICE_API_VERSION_2_0 の場合に有効です。それ以外の場合は読み取らないでください。
ファイル camera_common.h の 241 行 の定義。
この構造体のドキュメントは、次のファイルから生成されました。
- hardware/libhardware/include/hardware/ camera_common.h