การอ้างอิงโครงสร้าง camera2_request_queue_src_ops
การอ้างอิงโครงสร้าง camera2_request_queue_src_ops
#include < camera2.h >
เขตข้อมูล | |
อินท์(* | request_count ) (สร้างโครงสร้าง กล้อง 2_request_queue_src_ops * q) |
อินท์(* | dequeue_request ) (const struct camera2_request_queue_src_ops * q, camera_metadata_t ** บัฟเฟอร์) |
อินท์(* | free_request ) (สร้างโครงสร้าง กล้อง2_request_queue_src_ops * q, camera_metadata_t * old_buffer) |
คำอธิบายโดยละเอียด
ขอโปรโตคอลคิวอินพุต:
กรอบงานจะเก็บคิวและเนื้อหาไว้ เมื่อเริ่มต้นคิวจะว่างเปล่า
- เมื่อบัฟเฟอร์ข้อมูลเมตาแรกถูกวางลงในคิว เฟรมเวิร์กจะส่งสัญญาณอุปกรณ์โดยการเรียก notify_request_queue_not_empty()
- หลังจากได้รับ notify_request_queue_not_empty อุปกรณ์จะต้องเรียก dequeue() เมื่อพร้อมที่จะจัดการกับบัฟเฟอร์ถัดไป
- เมื่ออุปกรณ์ประมวลผลบัฟเฟอร์แล้ว และพร้อมสำหรับบัฟเฟอร์ถัดไป อุปกรณ์จะต้องเรียก dequeue() อีกครั้งแทนที่จะรอการแจ้งเตือน หากไม่มีบัฟเฟอร์เหลืออยู่ dequeue() จะส่งคืนค่า NULL หลังจากจุดนี้ เมื่อบัฟเฟอร์พร้อมใช้งาน กรอบงานจะต้องเรียก notify_request_queue_not_empty() อีกครั้ง หากอุปกรณ์ได้รับการส่งคืนค่า NULL จากการยกเลิกคิว ก็ไม่จำเป็นต้องสอบถามคิวอีกครั้งจนกว่าจะได้รับการเรียก notify_request_queue_not_empty() จากแหล่งที่มา
- หากอุปกรณ์เรียก buffer_count() และได้รับ 0 นี่ไม่ได้หมายความว่าเฟรมเวิร์กจะให้การเรียก notify_request_queue_not_empty() กรอบงานจะส่งการแจ้งเตือนดังกล่าวหลังจากที่อุปกรณ์ได้รับค่า NULL จากการยกเลิกคิวหรือเมื่อเริ่มต้นระบบครั้งแรกเท่านั้น
- การเรียก dequeue() เพื่อตอบสนองต่อ notify_request_queue_not_empty() อาจอยู่ในเธรดเดียวกันกับการเรียก notify_request_queue_not_empty() และอาจดำเนินการจากภายในการโทรแจ้งเตือน
- บัฟเฟอร์คำขอที่ออกจากคิวทั้งหมดจะต้องส่งคืนไปยังเฟรมเวิร์กโดยการเรียก free_request รวมถึงเมื่อเกิดข้อผิดพลาด มีการขอล้างอุปกรณ์ หรือเมื่ออุปกรณ์ปิดตัวลง
เอกสารภาคสนาม
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **บัฟเฟอร์) |
รับบัฟเฟอร์ข้อมูลเมตาจากกรอบงาน ส่งคืนตกลงหากไม่มีข้อผิดพลาด หากคิวว่างเปล่า จะส่งคืนค่า NULL ในบัฟเฟอร์ ในกรณีดังกล่าว อุปกรณ์ต้องรอข้อความ notify_request_queue_not_empty() ก่อนที่จะพยายามถอนคิวอีกครั้ง บัฟเฟอร์ที่ได้รับในลักษณะนี้จะต้องส่งคืนไปยังเฟรมเวิร์กด้วย free_request()
int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
int(* request_count)(สร้างโครงสร้าง กล้อง2_request_queue_src_ops *q) |
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้:
- ฮาร์ดแวร์ / libhardware / รวม / ฮาร์ดแวร์ / camera2.h