camera3_capture_result結構參考
#include < camera3.h >
資料欄位 | |
uint32_t | 影格號 |
常數camera_metadata_t * | 結果 |
uint32_t | num_output_buffers |
常數camera3_stream_buffer_t * | 輸出緩衝區 |
常數camera3_stream_buffer_t * | 輸入緩衝區 |
uint32_t | 部分結果 |
詳細說明
camera3_capture_result_t:
相機 HAL 裝置單次擷取/再處理的結果。這是使用 process_capture_result() 非同步發送到框架的,以回應使用 process_capture_request() 發送到 HAL 的單一擷取請求。 HAL 可以針對每個請求執行多個 process_capture_result() 呼叫。
每個呼叫都有相同的幀號,可能包含輸出緩衝區的某個子集和/或結果元資料。對於給定的幀編號,元資料只能提供一次;所有其他呼叫必須將結果元資料設為 NULL。
結果結構包含來自此捕獲的輸出元數據,以及已經/將要為此捕獲填充的輸出緩衝區集。每個輸出緩衝區可能帶有釋放同步柵欄,框架將在讀取之前等待該柵欄,以防緩衝區尚未被 HAL 填充。
>= CAMERA_DEVICE_API_VERSION_3_2:
對於單一幀號可以多次提供元資料。框架將透過將每個部分結果組合在一起形成總結果集來累積最終結果集。
如果請求中給出了輸入緩衝區,則 HAL 必須在 process_capture_result 呼叫之一中傳回它,而該呼叫可能只是傳回輸入緩衝區,而不傳回元資料和輸出緩衝區;同步柵欄的處理方式必須與處理輸出緩衝區的方式相同。
性能考量:
應用程式還將立即收到這些部分結果,因此強烈建議發送部分結果,以避免在發送管道中早期已知的結果之前出現總管道延遲。
典型的用例可能是在管道中途計算 AF 狀態;透過立即將狀態傳回框架,我們獲得了 50% 的效能提升和自動對焦的感知反應能力。
現場文檔
uint32_t 幀號 |
幀編號是框架在提交的請求中設定的遞增整數,用於唯一標識此擷取。它也用於識別發送到camera3_callback_ops_t.notify()的非同步通知中的請求。
常數camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
此捕獲的輸入流緩衝區的句柄。 HAL 呼叫 process_capture_result() 時它可能尚未被消耗;在重複使用緩衝區之前,框架將等待 HAL 提供的釋放同步柵欄。
HAL 應該以與處理 output_buffers 相同的方式處理同步柵欄。
每個請求只允許發送一個輸入緩衝區。與輸出緩衝區類似,傳回的輸入緩衝區的順序必須由 HAL 維護。
性能考量:
應儘早返回輸入緩衝區。如果 HAL 支援同步柵欄,它可以呼叫 process_capture_result 來將其傳回,並適當地設定同步柵欄。如果不支援同步柵欄,則緩衝區只能在消耗時才返回,這可能需要很長時間; HAL 可能會選擇複製此輸入緩衝區以使緩衝區更快返回。
uint32_t num_output_buffers |
常數camera3_stream_buffer_t * output_buffers |
此捕獲的輸出流緩衝區的句柄。當 HAL 呼叫 process_capture_result() 時,它們可能尚未被填充;在讀取緩衝區之前,框架將等待 HAL 提供的釋放同步柵欄。
HAL 必須將流緩衝區的釋放同步柵欄設定為有效的同步 fd,如果緩衝區已被填充,則設定為 -1。
如果 HAL 在處理緩衝區時遇到錯誤,且緩衝區未填充,則緩衝區的狀態欄位必須設為 CAMERA3_BUFFER_STATUS_ERROR。如果 HAL 在遇到錯誤之前沒有在獲取柵欄上等待,則應將獲取柵欄複製到釋放柵欄中,以允許框架在重用緩衝區之前在柵欄上等待。
對於所有輸出緩衝區,取得柵欄必須設定為 -1。如果 num_output_buffers 為零,則這可能為 NULL。在這種情況下,HAL 必須至少再呼叫一次 process_capture_result 來提供輸出緩衝區。
當使用幀的新緩衝區呼叫 process_capture_result 時,該對應流的所有先前幀的緩衝區必須已經交付(柵欄不需要尚未發出信號)。
>= CAMERA_DEVICE_API_VERSION_3_2:
幀的 Gralloc 緩衝區可以在相應的 SHUTTER 通知之前發送到框架。
性能考量:
在透過 SHUTTER notification() 呼叫接收到曝光開始時間戳之前,傳遞到框架的緩衝區不會被分派到應用程式層。強烈建議儘早撥打該電話。
uint32_t 部分結果 |
>= CAMERA_DEVICE_API_VERSION_3_2:
為了利用部分結果,HAL 必須將靜態元資料 android.request.partialResultCount 設定為它將為每個幀發送的部分結果的數量。
每個具有部分結果的新擷取結果必須將此欄位 (partial_result) 設為 1 到 android.request.partialResultCount 之間的不同包含值。
不希望利用此功能的 HAL 不得將 android.request.partialResultCount 或partial_result 設為 1 以外的值。
當擷取結果僅包含緩衝區且不包含元資料時,該值必須設為 0。
常數camera_metadata_t * 結果 |
此捕獲的結果元資料。其中包含有關最終捕獲參數、捕獲和後處理硬體的狀態、3A 演算法的狀態(如果啟用)以及任何啟用的統計單元的輸出的資訊。
對於給定的frame_number,只有一次process_capture_result() 的呼叫可能包含結果元資料。對相同frame_number 的所有其他呼叫必須將其設為NULL。
如果產生結果元資料時發生錯誤,則結果必須是空的元資料緩衝區,並且必須使用 ERROR_RESULT 呼叫 notification()。
>= CAMERA_DEVICE_API_VERSION_3_2:
使用給定的frame_number對process_capture_result()進行多次呼叫可能包括結果元資料。
提交的部分元資料不應包括給定幀的先前部分結果中返回的任何元資料鍵。該訊框的每個新部分結果也必須設定不同的partial_result 值。
如果使用 ERROR_RESULT 呼叫通知,則框架將忽略該訊框的所有進一步部分結果。
該結構的文檔是從以下文件產生的: