การอ้างอิงโครงสร้าง camera3_callback_ops

การอ้างอิงโครงสร้าง 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)
 

คำอธิบายโดยละเอียด

คำจำกัดความที่บรรทัด 2397 ของไฟล์ camera3.h

เอกสารประกอบของฟิลด์

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 มิลลิวินาที

คำจำกัดความที่บรรทัด 2499 ของไฟล์ camera3.h

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 เฟรม

คำจำกัดความที่บรรทัด 2466 ของไฟล์ camera3.h


เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้