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

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

#include < camera3.h >

เขตข้อมูล

uint32_t frame_number
const camera_metadata_t * ผลลัพธ์
uint32_t num_output_buffers
const กล้อง 3_stream_buffer_t * เอาท์พุท_บัฟเฟอร์
const กล้อง 3_stream_buffer_t * input_buffer
uint32_t ผลบางส่วน

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

กล้อง3_capture_result_t:

ผลลัพธ์ของการจับภาพ/การประมวลผลซ้ำเพียงครั้งเดียวโดยอุปกรณ์ HAL ของกล้อง สิ่งนี้จะถูกส่งไปยังเฟรมเวิร์กแบบอะซิงโครนัสกับ process_capture_result() เพื่อตอบสนองต่อคำขอจับภาพเดียวที่ส่งไปยัง HAL ด้วย process_capture_request() การเรียก process_capture_result() หลายรายการอาจดำเนินการโดย HAL สำหรับแต่ละคำขอ

การเรียกแต่ละครั้งซึ่งมีหมายเลขเฟรมเดียวกัน อาจมีเซ็ตย่อยของบัฟเฟอร์เอาท์พุต และ/หรือข้อมูลเมตาของผลลัพธ์ ข้อมูลเมตาสามารถระบุได้เพียงครั้งเดียวสำหรับหมายเลขเฟรมที่กำหนด การเรียกอื่นๆ ทั้งหมดต้องตั้งค่าข้อมูลเมตาผลลัพธ์เป็น NULL

โครงสร้างผลลัพธ์ประกอบด้วยข้อมูลเมตาเอาท์พุตจากการจับภาพนี้ และชุดบัฟเฟอร์เอาท์พุตที่ได้รับการ/จะถูกเติมเต็มสำหรับการจับภาพนี้ บัฟเฟอร์เอาต์พุตแต่ละรายการอาจมาพร้อมกับกรอบการซิงค์การเผยแพร่ที่เฟรมเวิร์กจะรอก่อนที่จะอ่าน ในกรณีที่ HAL ยังไม่ได้เติมบัฟเฟอร์

>= CAMERA_DEVICE_API_VERSION_3_2:

ข้อมูลเมตาอาจระบุได้หลายครั้งสำหรับหมายเลขเฟรมเดียว กรอบการทำงานจะรวบรวมผลลัพธ์สุดท้ายที่กำหนดโดยการรวมผลลัพธ์บางส่วนเข้าด้วยกันเป็นชุดผลลัพธ์ทั้งหมด

หากมีการกำหนดบัฟเฟอร์อินพุตในคำขอ HAL จะต้องส่งคืนในการเรียก process_capture_result อย่างใดอย่างหนึ่ง และการเรียกอาจเป็นเพียงการส่งคืนบัฟเฟอร์อินพุตโดยไม่มีข้อมูลเมตาและบัฟเฟอร์เอาต์พุต รั้วการซิงค์จะต้องได้รับการจัดการในลักษณะเดียวกับที่ทำกับบัฟเฟอร์เอาต์พุต

ข้อควรพิจารณาด้านประสิทธิภาพ:

แอปพลิเคชันจะได้รับผลลัพธ์บางส่วนเหล่านี้ทันที ดังนั้นการส่งผลลัพธ์บางส่วนจึงเป็นการเพิ่มประสิทธิภาพการทำงานที่แนะนำเป็นอย่างยิ่ง เพื่อหลีกเลี่ยงเวลาแฝงของไปป์ไลน์ก่อนที่จะส่งผลลัพธ์สำหรับสิ่งที่ทราบตั้งแต่เนิ่นๆ ในไปป์ไลน์

กรณีการใช้งานทั่วไปอาจคำนวณสถานะ AF ครึ่งทางของไปป์ไลน์ โดยการส่งสถานะกลับไปที่เฟรมเวิร์กทันที เราจะได้ประสิทธิภาพเพิ่มขึ้น 50% และการรับรู้การตอบสนองของโฟกัสอัตโนมัติ

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

เอกสารภาคสนาม

uint32_t frame_number

หมายเลขเฟรมเป็นจำนวนเต็มที่เพิ่มขึ้นซึ่งกำหนดโดยเฟรมเวิร์กในคำขอที่ส่งเพื่อระบุการจับนี้โดยไม่ซ้ำกัน นอกจากนี้ยังใช้เพื่อระบุคำขอในการแจ้งเตือนแบบอะซิงโครนัสที่ส่งไปยัง camera3_callback_ops_t.notify()

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

const camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

หมายเลขอ้างอิงสำหรับบัฟเฟอร์สตรีมอินพุตสำหรับการจับภาพนี้ อาจยังไม่ถูกใช้ในขณะที่ HAL เรียก process_capture_result(); เฟรมเวิร์กจะรอบนรั้วการซิงค์รุ่นที่ได้รับจาก HAL ก่อนที่จะนำบัฟเฟอร์กลับมาใช้ใหม่

HAL ควรจัดการรั้วการซิงค์ในลักษณะเดียวกับที่ทำกับ output_buffers

อนุญาตให้ส่งบัฟเฟอร์อินพุตเพียงหนึ่งรายการต่อคำขอ เช่นเดียวกับบัฟเฟอร์เอาต์พุต การเรียงลำดับบัฟเฟอร์อินพุตที่ส่งคืนจะต้องได้รับการดูแลโดย HAL

ข้อควรพิจารณาด้านประสิทธิภาพ:

บัฟเฟอร์อินพุตควรส่งคืนโดยเร็วที่สุด หาก HAL รองรับรั้วการซิงค์ ก็สามารถเรียก process_capture_result เพื่อส่งคืนโดยตั้งค่ารั้วการซิงค์อย่างเหมาะสม หากไม่รองรับรั้วการซิงค์ บัฟเฟอร์สามารถส่งคืนได้เมื่อมีการใช้งานเท่านั้น ซึ่งอาจใช้เวลานาน HAL อาจเลือกที่จะคัดลอกบัฟเฟอร์อินพุตนี้เพื่อให้บัฟเฟอร์กลับมาเร็วขึ้น

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

uint32_t num_output_buffers

จำนวนบัฟเฟอร์เอาต์พุตที่ส่งคืนในโครงสร้างผลลัพธ์นี้ ต้องน้อยกว่าหรือเท่ากับจำนวนคำขอจับภาพที่ตรงกัน หากน้อยกว่าจำนวนบัฟเฟอร์ในคำขอจับภาพ จะต้องทำการเรียก process_capture_result ด้วย frame_number เดียวกันอย่างน้อยหนึ่งครั้ง เพื่อส่งคืนบัฟเฟอร์เอาต์พุตที่เหลือไปยังเฟรมเวิร์ก นี่อาจเป็นศูนย์ได้หากโครงสร้างรวมข้อมูลเมตาของผลลัพธ์ที่ถูกต้อง หรือมีบัฟเฟอร์อินพุตถูกส่งกลับในผลลัพธ์นี้

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

const camera3_stream_buffer_t * output_buffers

หมายเลขอ้างอิงสำหรับบัฟเฟอร์กระแสข้อมูลขาออกสำหรับการจับภาพนี้ อาจยังไม่ได้กรอกในขณะที่ HAL เรียก process_capture_result(); เฟรมเวิร์กจะรอบนรั้วการซิงค์รุ่นที่ได้รับจาก HAL ก่อนที่จะอ่านบัฟเฟอร์

HAL ต้องตั้งค่ารั้วการซิงค์รีลีสของบัฟเฟอร์สตรีมให้เป็น sync fd ที่ถูกต้อง หรือเป็น -1 หากบัฟเฟอร์เต็มแล้ว

หาก HAL พบข้อผิดพลาดขณะประมวลผลบัฟเฟอร์ และบัฟเฟอร์ไม่ได้รับการเติม ฟิลด์สถานะของบัฟเฟอร์จะต้องตั้งค่าเป็น CAMERA3_BUFFER_STATUS_ERROR หาก HAL ไม่ได้รอบนรั้วการรับก่อนที่จะพบข้อผิดพลาด รั้วการรับควรถูกคัดลอกไปยังรั้วการปล่อย เพื่อให้กรอบงานรอบนรั้วก่อนนำบัฟเฟอร์กลับมาใช้ใหม่

รั้วการรับต้องตั้งค่าเป็น -1 สำหรับบัฟเฟอร์เอาต์พุตทั้งหมด หาก num_output_buffers เป็นศูนย์ นี่อาจเป็น NULL ในกรณีนั้น HAL จะต้องเรียก process_capture_result อย่างน้อยหนึ่งครั้งเพื่อจัดเตรียมบัฟเฟอร์เอาต์พุต

เมื่อเรียก process_capture_result ด้วยบัฟเฟอร์ใหม่สำหรับเฟรม บัฟเฟอร์ของเฟรมก่อนหน้าทั้งหมดสำหรับสตรีมที่เกี่ยวข้องนั้นจะต้องถูกส่งไปแล้ว (รั้วไม่จำเป็นต้องได้รับการส่งสัญญาณ)

>= CAMERA_DEVICE_API_VERSION_3_2:

บัฟเฟอร์ Gralloc สำหรับเฟรมอาจถูกส่งไปยังเฟรมเวิร์กก่อนที่จะแจ้งเตือน SHUTTER ที่เกี่ยวข้อง

ข้อควรพิจารณาด้านประสิทธิภาพ:

บัฟเฟอร์ที่ส่งไปยังเฟรมเวิร์กจะไม่ถูกส่งไปยังเลเยอร์แอปพลิเคชันจนกว่าจะได้รับการเริ่มต้นการประทับเวลาการสัมผัสผ่านการเรียก SHUTTER notify() ขอแนะนำอย่างยิ่งให้ส่งสายนั้นโดยเร็วที่สุด

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

uint32_t ผลบางส่วน

>= CAMERA_DEVICE_API_VERSION_3_2:

เพื่อใช้ประโยชน์จากผลลัพธ์บางส่วน HAL จะต้องตั้งค่าข้อมูลเมตาคงที่ android.request.partialResultCount เป็นจำนวนผลลัพธ์บางส่วนที่จะส่งสำหรับแต่ละเฟรม

ผลลัพธ์การบันทึกใหม่แต่ละรายการที่มีผลลัพธ์บางส่วนจะต้องตั้งค่าฟิลด์นี้ (partial_result) ให้เป็นค่ารวมที่แตกต่างกันระหว่าง 1 ถึง android.request.partialResultCount

HAL ที่ไม่ต้องการใช้ประโยชน์จากคุณลักษณะนี้จะต้องไม่ตั้งค่า android.request.partialResultCount หรือ Partial_result เป็นค่าอื่นที่ไม่ใช่ 1

ค่านี้ต้องตั้งค่าเป็น 0 เมื่อผลการจับมีเฉพาะบัฟเฟอร์และไม่มีข้อมูลเมตา

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

ผลลัพธ์ const camera_metadata_t *

ข้อมูลเมตาผลลัพธ์สำหรับการบันทึกนี้ ข้อมูลนี้มีข้อมูลเกี่ยวกับพารามิเตอร์การจับขั้นสุดท้าย สถานะของฮาร์ดแวร์การจับและหลังการประมวลผล สถานะของอัลกอริธึม 3A หากเปิดใช้งาน และเอาต์พุตของหน่วยสถิติใดๆ ที่เปิดใช้งาน

การเรียก process_capture_result() เพียงครั้งเดียวด้วย frame_number ที่กำหนดอาจรวมข้อมูลเมตาของผลลัพธ์ด้วย การเรียกอื่นๆ ทั้งหมดสำหรับ frame_number เดียวกันจะต้องตั้งค่านี้เป็น NULL

หากมีข้อผิดพลาดในการสร้างข้อมูลเมตาของผลลัพธ์ ผลลัพธ์จะต้องเป็นบัฟเฟอร์ข้อมูลเมตาที่ว่างเปล่า และจะต้องเรียก notify() ด้วย ERROR_RESULT

>= CAMERA_DEVICE_API_VERSION_3_2:

การเรียก process_capture_result() หลายครั้งด้วย frame_number ที่กำหนดอาจรวมข้อมูลเมตาของผลลัพธ์ด้วย

ข้อมูลเมตาบางส่วนที่ส่งไม่ควรรวมคีย์ข้อมูลเมตาใดๆ ที่ส่งคืนในผลลัพธ์บางส่วนก่อนหน้าสำหรับเฟรมที่กำหนด ผลลัพธ์บางส่วนใหม่สำหรับเฟรมนั้นจะต้องตั้งค่า Partial_result ที่แตกต่างกันด้วย

หากมีการเรียกการแจ้งเตือนด้วย ERROR_RESULT ผลลัพธ์บางส่วนเพิ่มเติมทั้งหมดสำหรับเฟรมนั้นจะถูกละเว้นโดยเฟรมเวิร์ก

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


เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้:
  • ฮาร์ดแวร์ / libhardware / รวม / ฮาร์ดแวร์ / กล้อง 3.h