camera2_request_queue_src_ops 結構體參考

camera2_request_queue_src_ops 結構體參考資料

#include < camera2.h >

資料欄位

int(*  request_count )(const struct camera2_request_queue_src_ops *q)
 
int(*  dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer)
 
int(*  free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer)
 

詳細說明

要求輸入佇列通訊協定:

此架構會保留佇列及其內容。在開始時,佇列為空。

  1. 當第一個中繼資料緩衝區放入佇列時,架構會呼叫 notify_request_queue_not_empty(),向裝置發出信號。
  2. 收到 notify_request_queue_not_empty 後,裝置必須在準備好處理下一個緩衝區時呼叫 dequeue()。
  3. 裝置處理完一個緩衝區後,如果已準備好處理下一個緩衝區,就必須再次呼叫 dequeue(),而非等待通知。如果沒有可用的緩衝區,dequeue() 會傳回 NULL。此時,當緩衝區可用時,架構必須再次呼叫 notify_request_queue_not_empty()。如果裝置從 dequeue 收到空值回傳,則在從來源接收 notify_request_queue_not_empty() 呼叫之前,不需要再次查詢佇列。
  4. 如果裝置呼叫 buffer_count() 並收到 0,這並不表示架構會提供 notify_request_queue_not_empty() 呼叫。只有在裝置從 dequeue 收到空值,或在初始啟動時,架構才會提供這類通知。
  5. 回應 notify_request_queue_not_empty() 的 dequeue() 呼叫可能與 notify_request_queue_not_empty() 呼叫位於同一執行緒,且可能會在通知呼叫中執行。
  6. 所有已從佇列中移除的要求緩衝區都必須透過呼叫 free_request 傳回至架構,包括發生錯誤、要求裝置清除或裝置關機時。

定義位於檔案 camera2.h 的第 220 行。

欄位說明文件

int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer)

從架構取得中繼資料緩衝區。如果沒有錯誤,就會傳回 OK。如果佇列為空,則會在緩衝區中傳回 NULL。在這種情況下,裝置必須等待 notify_request_queue_not_empty() 訊息,才能再次嘗試移除佇列。以這種方式取得的緩衝區必須透過 free_request() 傳回至架構。

定義位於檔案 camera2.h 237 行。

int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer)

在使用中繼資料緩衝區後,或發生錯誤或關機時,將中繼資料緩衝區傳回至架構。

定義位於檔案 camera2.h 243 行。

int(* request_count)(const struct camera2_request_queue_src_ops *q)

取得佇列中待處理的要求緩衝區數量。如果目前已設定重複要求 (串流要求),可能會傳回 CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS。呼叫這個方法不會影響架構是否會呼叫 notify_request_queue_not_empty() 方法。

定義位於檔案 camera2.h 228 行。


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