camera_module 結構體參考資料

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 行。

欄位說明文件

攝影機模組的常用方法。這個 必須是 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 行。


這個結構體的說明文件是由下列檔案產生: