camera_module 結構體參考資料
#include <
camera_common.h
>
資料欄位 |
|
hw_module_t | 通用 |
int(* | get_number_of_cameras )(void) |
int(* | get_camera_info )(int camera_id, struct camera_info *info) |
int(* | set_callbacks )(const camera_module_callbacks_t *callbacks) |
void(* | get_vendor_tag_ops )(vendor_tag_ops_t *ops) |
int(* | open_legacy )(const struct hw_module_t *module, const char *id, uint32_t halVersion, struct hw_device_t **device) |
int(* | set_torch_mode )(const char *camera_id, bool enabled) |
int(* | init )() |
void * | 保留 [5] |
詳細說明
定義位於檔案 camera_common.h 的 646 行。
欄位說明文件
hw_module_t 通用 |
攝影機模組的常用方法。這個 必須是 camera_module 的首位成員,因為這個結構的使用者會在已知 hw_module_t 參照 camera_module 的情況下,將 hw_module_t 投放至 camera_module 指標。
common.methods->open for camera_module 的回傳值如下:
0:已成功開啟相機裝置。
-ENODEV:相機裝置發生內部錯誤,因此無法開啟。
-EINVAL:輸入引數無效,也就是 ID 無效,和/或模組無效。
-EBUSY:相機裝置已為此相機 ID 開啟 (使用此方法或 open_legacy),無論是以哪個裝置 HAL 版本開啟皆然。
-EUSERS:同時開啟的相機裝置數量已達上限,可能是透過這個方法或 open_legacy 方法開啟。
所有其他 common.methods->open 的傳回值都會視為 -ENODEV。
定義位於檔案 camera_common.h 的 674 行。
int(* get_camera_info)(int camera_id, struct camera_info *info) |
get_camera_info:
傳回指定攝影機裝置的靜態攝影機資訊。攝影機裝置的這項資訊可能不會變更。
傳回值:
0:成功執行作業時
-ENODEV:由於內部錯誤,因此無法提供資訊。
-EINVAL:輸入引數無效,也就是 ID 無效,和/或模組無效。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_4 以上版本:
相機連線中斷時,相機 ID 就會失效。使用這個無效的相機 ID 呼叫此方法,會傳回 -EINVAL 和空值相機靜態中繼資料 ( camera_info.static_camera_characteristics )。
定義位於檔案 camera_common.h 的 727 行。
int(* get_number_of_cameras)(void) |
get_number_of_cameras:
傳回可透過攝影機模組存取的相機裝置數量。攝影機裝置的編號為 0 到 N-1,其中 N 是這個呼叫傳回的值。open() 的攝影機裝置名稱只是將數字轉換為字串。也就是說,相機 ID 0 為「0」,相機 ID 1 為「1」。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_2_3 以下版本:
這個值必須是靜態值,且在第一次呼叫此方法後就無法變更。
CAMERA_MODULE_API_VERSION_2_4 以上版本:
此處的值必須為靜態,且只能計算具有 CAMERA_FACING_BACK 或 CAMERA_FACING_FRONT 相機朝向值 ( camera_info.facing ) 的內建相機。HAL 不得將外接相機 ( camera_info.facing == CAMERA_FACING_EXTERNAL) 納入此呼叫的傳回值。架構會使用 camera_device_status_change 回呼來管理外部相機的數量。
定義位於檔案 camera_common.h 的 701 行。
void(* get_vendor_tag_ops)(vendor_tag_ops_t *ops) |
get_vendor_tag_ops:
取得查詢供應商擴充功能中繼資料標記資訊的方法。HAL 應填入所有供應商標記作業方法,如果未定義供應商標記,則作業會保持不變。
此處使用的 vendor_tag_ops 結構定義如下:system/media/camera/include/system/vendor_tags.h
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1:HAL 模組未提供。架構可能不會呼叫此函式。
CAMERA_MODULE_API_VERSION_2_2:可供架構呼叫。
定義位於檔案 camera_common.h 的 778 行。
int(* init)() |
init:
相機服務會在相機 HAL 程式庫成功載入後立即呼叫此方法,並在呼叫任何其他方法之前呼叫。如果不需要初始化,HAL 模組可能會將其保留為空值。
HAL 實作項目可使用此方法執行初始化和其他一次性作業。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3:HAL 模組未提供。架構不會呼叫這個函式。
CAMERA_MODULE_API_VERSION_2_4:如果不是空值,在載入 HAL 模組後,架構一律會先呼叫這個值,再呼叫任何其他 HAL 模組方法。
傳回值:
0:作業成功。
-ENODEV:發生內部錯誤,無法完成初始化作業。必須假設 HAL 處於無法運作狀態。
定義位於檔案 camera_common.h 的 909 行。
int(* open_legacy)(const struct hw_module_t *module, const char *id, uint32_t halVersion, struct hw_device_t **device) |
open_legacy:
如果相機 HAL 模組支援多個裝置 HAL API 版本,請開啟特定舊版相機 HAL 裝置。舉例來說,如果相機模組同時支援 CAMERA_DEVICE_API_VERSION_1_0 和 CAMERA_DEVICE_API_VERSION_3_2 裝置 API 的相同相機 ID,架構可以呼叫這個函式,以 CAMERA_DEVICE_API_VERSION_1_0 裝置的形式開啟相機裝置。
這是選用方法。每部裝置的 Camera HAL 模組不必支援多個裝置 HAL 版本,而且此類模組可能會針對所有對此方法的呼叫傳回 -ENOSYS。對於所有不支援的舊版 HAL 裝置 API,可能會傳回 -EOPNOTSUPP。在上述情況下,架構會改用一般 open() 方法 (common.methods->open)。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2:未由 HAL 模組提供。架構不會呼叫這個函式。
CAMERA_MODULE_API_VERSION_2_3:可供架構呼叫。
傳回值:
0:已成功開啟相機裝置。
-ENOSYS 系統不支援這個方法。
-EOPNOTSUPP:此方法不支援要求的 HAL 版本。
-EINVAL:輸入引數無效,也就是 ID 無效,和/或模組無效。
-EBUSY:相機裝置已為此相機 ID 開啟 (使用此方法或 common.methods->open 方法),無論是以哪個裝置 HAL 版本開啟皆然。
-EUSERS:同時開啟的相機裝置數量已達上限,可能是透過這個方法或 common.methods->open 方法開啟。
定義位於檔案 camera_common.h 的 824 行。
void* 保留 [5] |
定義位於檔案 camera_common.h 的 912 行。
int(* set_callbacks)(const camera_module_callbacks_t *callbacks) |
set_callbacks:
為 HAL 模組提供回呼函式指標,以便通知架構非同步攝影機模組事件。在初始相機 HAL 模組載入後,當第一次呼叫 get_number_of_cameras() 方法,以及在對模組進行任何其他呼叫之前,架構會呼叫這個函式一次。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_0、CAMERA_MODULE_API_VERSION_2_0:
並非由 HAL 模組提供。架構可能不會呼叫此函式。
CAMERA_MODULE_API_VERSION_2_1:
可由架構呼叫。
傳回值:
0:成功執行作業時
-ENODEV:由於發生內部錯誤,因此無法完成作業。
-EINVAL:輸入引數無效,也就是回呼為空值
定義位於檔案 camera_common.h 的 758 行。
int(* set_torch_mode)(const char *camera_id, bool enabled) |
set_torch_mode:
開啟或關閉與特定相機 ID 相關聯的閃光燈單元的手電筒模式。如果作業成功,HAL 必須使用新狀態呼叫 camera_module_callbacks.torch_mode_status_change() ,通知架構手電筒狀態。
相機裝置的閃光燈存取優先順序較高。當發生任何資源衝突時 (例如呼叫 open() 以開啟攝影機裝置),HAL 模組必須透過 camera_module_callbacks.torch_mode_status_change() 通知架構,表示手電筒模式已關閉,且手電筒模式狀態已變成 TORCH_MODE_STATUS_NOT_AVAILABLE。當可開啟手電筒模式的資源再次可用時,HAL 模組必須透過 camera_module_callbacks.torch_mode_status_change() 通知架構,指出手電筒模式狀態已變成 TORCH_MODE_STATUS_AVAILABLE_OFF,以便呼叫 set_torch_mode() 。
當架構呼叫 set_torch_mode() 來開啟閃光燈的電筒模式時,如果 HAL 無法同時開啟多個電筒模式,HAL 應關閉先前 set_torch_mode() 呼叫開啟的電筒模式,並通知架構,該閃光燈的電筒模式狀態已變成 TORCH_MODE_STATUS_AVAILABLE_OFF。
版本資訊 (根據 camera_module_t.common.module_api_version):
CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3:HAL 模組未提供。架構不會呼叫這個函式。
CAMERA_MODULE_API_VERSION_2_4:可供架構呼叫。
傳回值:
0:作業成功。
-ENOSYS:攝影機裝置不支援這項作業。只有在 android.flash.info.available 為 false 時才會傳回。
-EBUSY:攝影機裝置已在使用中。
-EUSERS:系統無法取得開啟手電筒模式所需的資源,通常是因為其他相機裝置正在使用這些資源,導致無法使用閃光燈。
-EINVAL:camera_id 無效。
定義位於檔案 camera_common.h 的 878 行。
這個結構體的說明文件是由下列檔案產生:
- hardware/libhardware/include/hardware/ camera_common.h