การอ้างอิง Struct 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) |
คำอธิบายโดยละเอียด
โปรโตคอลคิวอินพุตคำขอ
เฟรมเวิร์กจะเก็บคิวและเนื้อหาของคิวไว้ ในตอนเริ่มต้น คิวจะว่างเปล่า
- เมื่อวางบัฟเฟอร์ข้อมูลเมตาแรกลงในคิวแล้ว เฟรมเวิร์กจะส่งสัญญาณไปยังอุปกรณ์โดยเรียกใช้ 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() และอาจดำเนินการจากภายในการเรียก notify
- ต้องส่งบัฟเฟอร์คำขอที่ออกจากคิวทั้งหมดกลับไปยังเฟรมเวิร์กโดยเรียกใช้ free_request ซึ่งรวมถึงกรณีที่เกิดข้อผิดพลาด มีการขอล้างข้อมูลอุปกรณ์ หรือเมื่ออุปกรณ์ปิดอยู่
เอกสารประกอบในสนาม
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
รับบัฟเฟอร์ข้อมูลเมตาจากเฟรมเวิร์ก แสดงผล OK หากไม่มีข้อผิดพลาด หากคิวว่าง จะแสดงผล 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)(const struct camera2_request_queue_src_ops *q) |
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้
- hardware/libhardware/include/hardware/ camera2.h