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 |
相機裝置 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 facing |
相機鏡頭的方向。如要查看攝影機方向定義,請參閱 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 頻寬有限,因此同時使用兩部攝影機會導致影格速率大幅下降。
設定:
Camera Device 0 - resource_cost = 51 conflicting_devices = null Camera Device 1 - resource_cost = 51 conflicting_devices = null
結果:
由於資源成本總和大於 100,如果優先順序較高的應用程式開啟任一裝置,相機服務就不會允許優先順序較低的應用程式開啟任一裝置。如果優先順序較低的應用程式正在使用裝置,而優先順序較高的應用程式隨後嘗試開啟該裝置,優先順序較低的應用程式就會被迫中斷裝置連線。
如果最高優先順序的應用程式選擇,仍可能嘗試開啟兩部裝置 (因為這些裝置不會在 conflicting_devices 欄位中列為衝突裝置),但在開啟或設定呼叫中使用這些裝置可能會失敗。
範例:2:相機裝置 0 = 左後置鏡頭相機裝置 1 = 右後置鏡頭相機裝置 2 = 結合了裝置 0 和 1 所使用的右後置鏡頭感應器和左後置鏡頭感應器的立體鏡頭相機裝置 3 = 前置鏡頭
- 由於硬體限制,一次最多只能開啟兩部相機。結合的立體鏡頭可能不會與兩個後置鏡頭裝置 (裝置 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,系統會強制斷開裝置 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