camera3_stream 結構參考資料
#include <
camera3.h
>
資料欄位 |
|
int | stream_type |
uint32_t | width |
uint32_t | height |
int | 格式 |
uint32_t | 用量 |
uint32_t | max_buffers |
void * | priv |
android_dataspace_t | data_space |
int | 旋轉 |
void * | 保留 [7] |
詳細說明
camera3_stream_t:
單一攝影機輸入或輸出串流的句柄。此串流是由架構透過緩衝區解析度和格式定義,並且由 HAL 透過 gralloc 用法旗標和最大飛行中緩衝區數量定義。
串流結構體由架構擁有,但由 configure_streams() 傳遞至 HAL 的 camera3_stream 指標,在第一個後續的 configure_streams() 呼叫結束前 ( 不包含該 camera3_stream 做為引數) 或 close() 呼叫結束前,都有效。
一旦將 camera3_stream 傳入 configure_streams() 後,所有 camera3_stream 架構控制成員都會變得不可變動。在 configure_streams() 呼叫期間,HAL 只能變更 HAL 控制的參數,私人指標的內容除外。
如果 configure_streams() 呼叫傳回非致命錯誤,所有有效的串流都會保持有效,就好像未呼叫 configure_streams() 一樣。
攝影機 HAL 裝置無法看到串流的端點。在 DEVICE_API_VERSION_3_1 中,這項設定已變更為在相機為產生者 (OUTPUT 和 BIDIRECTIONAL 串流類型) 的串流上共用使用者用途旗標,請參閱下方的用途欄位。
欄位說明文件
android_dataspace_t data_space |
用來描述緩衝區內容的欄位。格式和緩衝區維度會定義串流緩衝區的記憶體配置和結構,而 dataSpace 則會定義緩衝區內資料的意義。
對於大多數格式,dataSpace 會定義圖片資料的色彩空間。此外,針對某些格式,dataSpace 會指出是否要求圖像或深度資料。如需格式詳細資料和每個格式的有效 dataSpace 值,請參閱 system/core/include/system/graphics.h。
版本資訊:
< CAMERA_DEVICE_API_VERSION_3_3:
未定義,且不應存取。dataSpace 應假設為 HAL_DATASPACE_UNKNOWN,而適當的色域等應根據用途旗標和格式決定。
= CAMERA_DEVICE_API_VERSION_3_3:
一律由攝影機服務設定。HAL 必須使用這個 dataSpace,將串流設定為正確的色彩空間,或在支援的情況下,選擇顏色和深度輸出。資料空間值是 graphics.h 中的舊定義。
>= CAMERA_DEVICE_API_VERSION_3_4:
一律由攝影機服務設定。HAL 必須使用這個 dataSpace,將串流設定為正確的色彩空間,或在支援的情況下,選擇顏色和深度輸出。使用 graphics.h 中的 V0 資料空間定義設定資料空間值。
int 格式 |
這個串流中緩衝區的像素格式。格式是 system/core/include/system/graphics.h 或裝置專屬標頭中的 HAL_PIXEL_FORMAT_* 清單值。
如果使用 HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,平台 gralloc 模組會根據相機裝置和串流的其他端點提供的用途標記,選取格式。
<= CAMERA_DEVICE_API_VERSION_3_1:
相機 HAL 裝置必須在後續 register_stream_buffers() 呼叫中檢查交給它的緩衝區,以便在必要時取得特定實作格式的詳細資料。
>= CAMERA_DEVICE_API_VERSION_3_2:
架構不會呼叫 register_stream_buffers(),因此 HAL 應只根據已設定串流的大小、用途標記和格式,設定 ISP 和感應器管道。
uint32_t max_buffers |
void* priv |
此為串流的 HAL 私有資訊句柄。不會由架構程式碼檢查。
定義位於檔案 camera3.h 的 1614 行。
int rotation |
串流的必要輸出旋轉角度,為 camera3_stream_rotation_t 值之一。HAL 必須檢查這項資訊,以及串流的寬度和高度。舉例來說,如果旋轉角度為 90 度,且串流寬度和高度分別為 720 和 1280,相機服務會提供大小為 720x1280 的緩衝區,而 HAL 應擷取 1280x720 的圖片,並將圖片旋轉 90 度逆時針。當串流類型為輸入時,旋轉欄位會無操作。Camera HAL 必須忽略輸入串流的旋轉欄位。
<= CAMERA_DEVICE_API_VERSION_3_2:
未定義,且不得存取。HAL 不得對輸出圖片套用任何旋轉效果。
>= CAMERA_DEVICE_API_VERSION_3_3:
一律由攝影機服務設定。HAL 必須在串流設定期間檢查這個欄位,如果 HAL 無法執行此旋轉作業,則會傳回 -EINVAL。HAL 一律必須支援 CAMERA3_STREAM_ROTATION_0,因此如果所有串流的旋轉欄位為 CAMERA3_STREAM_ROTATION_0,則 configure_streams() 呼叫不得因不支援的旋轉而失敗。
uint32_t 用法 |
這個串流的 gralloc 用法旗標,視 HAL 的需求而定。使用量標記是在 gralloc.h (GRALLOC_USAGE_*) 或裝置專屬標頭中定義。
對於輸出串流,這些是 HAL 的產生器用法旗標。對於輸入串流,這些是 HAL 的使用者用途旗標。供應者和使用者使用的標記會合併,然後傳遞至平台 gralloc HAL 模組,為每個串流分配 gralloc 緩衝區。
版本資訊:
== CAMERA_DEVICE_API_VERSION_3_0:
透過 configure_streams() 傳遞時,系統不會保證有初始值。HAL 可能不會使用這個欄位做為輸入,且必須使用其使用旗標覆寫這個欄位。
>= CAMERA_DEVICE_API_VERSION_3_1:
如果 stream_type 為 OUTPUT 和 BIDIRECTIONAL,透過 configure_streams() 傳遞時,初始值即為使用者的使用標記。HAL 可能會使用這些消費者標記來決定串流設定。如果 stream_type 為 INPUT,透過 configure_streams() 傳遞時,這個值的初始值為 0。對於透過 configure_streams() 傳遞的所有串流,HAL 必須使用其用途標記覆寫這個欄位。
定義位於檔案 camera3.h 的第 1601 行。
這個結構體的說明文件是由下列檔案產生:
- hardware/libhardware/include/hardware/ camera3.h