การอ้างอิง Struct camera3_capture_result

การอ้างอิง Struct camera3_capture_result

#include < camera3.h >

ฟิลด์ข้อมูล

uint32_t  frame_number
 
const camera_metadata_t result
 
uint32_t  num_output_buffers
 
const camera3_stream_buffer_t output_buffers
 
const camera3_stream_buffer_t input_buffer
 
uint32_t  partial_result
 

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

camera3_capture_result_t:

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

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

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

>= CAMERA_DEVICE_API_VERSION_3_2:

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

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

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

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

Use Case ทั่วไปอาจเป็นการคำนวณสถานะ 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 ควรจัดการกับ Sync Fence ในลักษณะเดียวกับที่จัดการกับ output_buffers

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

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

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

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

uint32_t num_output_buffers

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

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

const camera3_stream_buffer_t * output_buffers

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

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

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

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

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

>= CAMERA_DEVICE_API_VERSION_3_2:

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

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

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

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

uint32_t partial_result

>= 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 * result

ข้อมูลเมตาของผลลัพธ์สำหรับการจับภาพนี้ ข้อมูลนี้ประกอบด้วยข้อมูลเกี่ยวกับพารามิเตอร์การจับภาพขั้นสุดท้าย สถานะของฮาร์ดแวร์การจับภาพและหลังการประมวลผล สถานะของอัลกอริทึม 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 ที่ไม่ซ้ำกันด้วย

หากมีการเรียก notify ด้วย ERROR_RESULT เฟรมเวิร์กจะละเว้นผลลัพธ์บางส่วนทั้งหมดของเฟรมนั้น

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


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