การอ้างอิงโครงสร้าง camera3_callback_ops
#include <
camera3.h
>
ฟิลด์ข้อมูล |
|
void(* | process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
void(* | notify )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
คำอธิบายโดยละเอียด
เอกสารประกอบของฟิลด์
void(* notify)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
แจ้ง:
การเรียกกลับการแจ้งเตือนแบบไม่พร้อมกันจาก HAL ซึ่งทริกเกอร์ด้วยเหตุผลต่างๆ ใช้เฉพาะกับข้อมูลที่ไม่ขึ้นอยู่กับการจับภาพเฟรม หรือข้อมูลที่ต้องใช้การจับเวลาที่เฉพาะเจาะจง HAL จะยังคงเป็นเจ้าของโครงสร้างข้อความ และ msg จะต้องใช้ได้ในช่วงระยะเวลาของการเรียกนี้เท่านั้น
หลายเธรดอาจเรียก notify() พร้อมกัน
<= CAMERA_DEVICE_API_VERSION_3_1:
HAL ต้องส่งการแจ้งเตือนการเริ่มการเปิดรับแสงสำหรับคำขอที่ระบุ ก่อนที่จะมีการเรียกใช้ process_capture_result() ครั้งแรกสำหรับคำขอนั้น
>= CAMERA_DEVICE_API_VERSION_3_2:
ระบบจะไม่ส่งบัฟเฟอร์ที่ส่งไปยังเฟรมเวิร์กไปยังเลเยอร์แอปพลิเคชันจนกว่าจะได้รับไทม์สแตมป์เริ่มต้นการเปิดรับแสง (หรือไทม์สแตมป์เริ่มต้นการเปิดรับแสงของรูปภาพอินพุตสำหรับคำขอประมวลผลซ้ำ) ผ่าน SHUTTER notify() call เราขอแนะนำอย่างยิ่งให้เรียกใช้ฟังก์ชันนี้โดยเร็วที่สุด
ข้อกำหนดด้านประสิทธิภาพ
นี่คือการเรียกที่ไม่บล็อก เฟรมเวิร์กจะส่งคืนการเรียกนี้ใน 5 มิลลิวินาที
void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
process_capture_result:
ส่งผลลัพธ์จากการจับภาพที่เสร็จสมบูรณ์ไปยังเฟรมเวิร์ก process_capture_result() อาจเรียกใช้หลายครั้งโดย HAL เพื่อตอบสนองต่อคำขอจับภาพเดียว ซึ่งจะช่วยให้ส่งคืนข้อมูลเมตาและบัฟเฟอร์ความละเอียดต่ำในการเรียกครั้งเดียว และส่งคืนบัฟเฟอร์ JPEG ที่ประมวลผลภายหลังในการเรียกครั้งถัดไปเมื่อพร้อมใช้งาน การเรียกใช้แต่ละครั้งต้องมีหมายเลขเฟรมของคำขอที่ส่งคืนข้อมูลเมตาหรือบัฟเฟอร์
คอมโพเนนต์ (บัฟเฟอร์หรือข้อมูลเมตา) ของผลลัพธ์ที่สมบูรณ์อาจรวมอยู่ในการเรียกใช้ process_capture_result เพียงครั้งเดียว HAL ต้องส่งคืนบัฟเฟอร์สำหรับแต่ละสตรีมและข้อมูลเมตาของผลลัพธ์สำหรับแต่ละคำขอในการเรียกใช้ process_capture_result อย่างใดอย่างหนึ่ง แม้ว่าจะมีข้อผิดพลาดที่ทำให้เอาต์พุตบางรายการ ไม่อนุญาตให้เรียกใช้ process_capture_result() โดยไม่มีบัฟเฟอร์เอาต์พุตหรือข้อมูลเมตาของผลลัพธ์
ลำดับการส่งคืนข้อมูลเมตาและบัฟเฟอร์สำหรับผลลัพธ์เดียวไม่สำคัญ แต่ต้องส่งคืนบัฟเฟอร์สำหรับสตรีมที่กำหนดตามลำดับ FIFO ดังนั้น บัฟเฟอร์สำหรับคำขอที่ 5 ของสตรีม A จะต้องแสดงผลก่อนบัฟเฟอร์สำหรับคำขอที่ 6 ของสตรีม A เสมอ ซึ่งรวมถึงข้อมูลเมตาของผลลัพธ์ด้วย โดยคุณต้องส่งคืนข้อมูลเมตาสำหรับคำขอที่ 5 ก่อนข้อมูลเมตาสำหรับคำขอที่ 6
อย่างไรก็ตาม สตรีมต่างๆ จะแยกจากกัน ดังนั้นจึงเป็นเรื่องปกติที่บัฟเฟอร์สำหรับคำขอ 5 ของสตรีม A อาจแสดงผลหลังจากบัฟเฟอร์สำหรับคำขอ 6 ของสตรีม B และเป็นเรื่องปกติที่ข้อมูลเมตาของผลลัพธ์สำหรับคำขอ 6 ของสตรีม B จะแสดงผลก่อนบัฟเฟอร์สำหรับคำขอ 5 ของสตรีม A
HAL จะยังคงเป็นเจ้าของโครงสร้างผลลัพธ์ ซึ่งจะต้องถูกต้องเท่านั้นจึงจะเข้าถึงได้ในระหว่างการโทรนี้ เฟรมเวิร์กจะคัดลอกสิ่งที่จำเป็นก่อนที่การเรียกนี้จะกลับมา
คุณยังไม่จำเป็นต้องป้อนข้อมูลในบัฟเฟอร์เอาต์พุต เนื่องจากเฟรมเวิร์กจะรอรั้วการซิงค์การเผยแพร่บัฟเฟอร์สตรีมก่อนที่จะอ่านข้อมูลบัฟเฟอร์ ดังนั้น HAL ควรเรียกใช้วิธีนี้โดยเร็วที่สุด แม้ว่าบัฟเฟอร์เอาต์พุตบางส่วนหรือทั้งหมดจะยังอยู่ระหว่างการป้อนข้อมูลก็ตาม HAL ต้องมีรั้วการซิงค์การเผยแพร่ที่ถูกต้องในรายการบัฟเฟอร์สตรีมของ output_buffers แต่ละรายการ หรือ -1 หากบัฟเฟอร์สตรีมนั้นเต็มแล้ว
หากสร้างบัฟเฟอร์ผลลัพธ์สำหรับคำขอไม่ได้ HAL ควรแสดงผลบัฟเฟอร์ข้อมูลเมตาที่ว่างเปล่า แต่ยังคงระบุบัฟเฟอร์เอาต์พุตและรั้วการซิงค์ของบัฟเฟอร์เหล่านั้น นอกจากนี้ notify() ต้องเรียกใช้ด้วยข้อความ ERROR_RESULT
หากป้อนข้อมูลลงในบัฟเฟอร์เอาต์พุตไม่ได้ คุณต้องตั้งค่าฟิลด์สถานะเป็น STATUS_ERROR นอกจากนี้ notify() ต้องเรียกใช้ด้วยข้อความ ERROR_BUFFER
หากการจับภาพทั้งหมดล้มเหลว คุณยังคงต้องเรียกใช้เมธอดนี้เพื่อส่งคืนบัฟเฟอร์เอาต์พุตไปยังเฟรมเวิร์ก สถานะบัฟเฟอร์ทั้งหมดควรเป็น STATUS_ERROR และข้อมูลเมตาผลลัพธ์ควรเป็นบัฟเฟอร์ว่าง นอกจากนี้ notify() ต้องเรียกใช้ด้วยข้อความ ERROR_REQUEST ในกรณีนี้ ไม่ควรส่งข้อความ ERROR_RESULT/ERROR_BUFFER แต่ละรายการ
ข้อกำหนดด้านประสิทธิภาพ
นี่คือการเรียกที่ไม่บล็อก เฟรมเวิร์กจะส่งคืนการเรียกนี้ใน 5 มิลลิวินาที
เวลาในการตอบสนองของไปป์ไลน์ (ดูคำจำกัดความใน S7) ควรน้อยกว่าหรือเท่ากับช่วงเวลา 4 เฟรม และต้องน้อยกว่าหรือเท่ากับช่วงเวลา 8 เฟรม
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้
- hardware/libhardware/include/hardware/ camera3.h