ข้อมูลอ้างอิงเกี่ยวกับโครงสร้าง camera2_device_ops
#include <
camera2.h
>
ฟิลด์ข้อมูล |
|
int(* | set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* | notify_request_queue_not_empty )(const struct camera2_device *) |
int(* | set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* | get_in_progress_count )(const struct camera2_device *) |
int(* | flush_captures_in_progress )(const struct camera2_device *) |
int(* | construct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request) |
int(* | allocate_stream )(const struct camera2_device *, uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers) |
int(* | register_stream_buffers )(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
int(* | release_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | allocate_reprocess_stream )(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
int(* | allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id) |
int(* | release_reprocess_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | trigger_action )(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
int(* | set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* | get_metadata_vendor_tag_ops )(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* | dump )(const struct camera2_device *, int fd) |
int(* | get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata) |
คำอธิบายโดยละเอียด
เอกสารประกอบในสนาม
int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
จัดสรรสตรีมอินพุตใหม่เพื่อใช้งาน ซึ่งกำหนดโดยความกว้าง ความสูง และรูปแบบพิกเซลของบัฟเฟอร์เอาต์พุต แสดงผลรหัสของสตรีมใหม่ แฟล็กการใช้งาน gralloc และจํานวนบัฟเฟอร์ที่รับพร้อมกันได้ หากสําเร็จ เงื่อนไขข้อผิดพลาด
- การขอชุดค่าผสมความกว้าง/ความสูง/รูปแบบที่ไม่ได้ระบุไว้ว่าลักษณะแบบคงที่ของเซ็นเซอร์รองรับ
- ขอให้กําหนดค่าสตรีมการประมวลผลอีกครั้งมากเกินไปในคราวเดียว
พารามิเตอร์อินพุต
- width, height, format: ข้อมูลจำเพาะสำหรับบัฟเฟอร์ที่จะส่งผ่านสตรีมนี้ รูปแบบต้องเป็นค่าจากรายการ HAL_PIXEL_FORMAT_*
- reprocess_stream_ops: โครงสร้างของพอยน์เตอร์ฟังก์ชันสำหรับการรับและปล่อยบัฟเฟอร์สำหรับสตรีมนี้ ระบบจะกําหนดค่าสตรีมพื้นฐานตามเอาต์พุตการใช้งานและ max_buffers
พารามิเตอร์เอาต์พุต
- stream_id: จำนวนเต็มแบบไม่ลงนามที่ระบุสตรีมนี้ ค่านี้ใช้ในคําขอขาเข้าเพื่อระบุสตรีมและในการเผยแพร่สตรีม รหัสเหล่านี้จะนับแยกต่างหากจากรหัสสตรีมอินพุต
- consumer_usage: มาสก์การใช้งาน gralloc ที่อุปกรณ์ HAL ต้องใช้เพื่อบริโภคข้อมูลประเภทที่ขอ ซึ่งใช้ในการจัดสรรบัฟเฟอร์ gralloc ใหม่สำหรับคิวบัฟเฟอร์สตรีม
- max_buffers: จำนวนบัฟเฟอร์สูงสุดที่อุปกรณ์ HAL อาจต้องได้รับพร้อมกัน อุปกรณ์อาจมีบัฟเฟอร์ที่รับพร้อมกันได้ไม่เกินค่านี้
int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
จัดสรรสตรีมอินพุตใหม่เพื่อใช้งาน ซึ่งจะใช้บัฟเฟอร์ที่จัดสรรไว้สำหรับสตรีมเอาต์พุตที่มีอยู่ กล่าวคือ หลังจากที่ HAL จัดคิวบัฟเฟอร์ลงในสตรีมเอาต์พุตแล้ว HAL อาจเห็นบัฟเฟอร์เดียวกันที่ส่งมาจากสตรีมการประมวลผลอินพุตอีกครั้งนี้ หลังจากที่ HAL ส่งบัฟเฟอร์กลับไปยังสตรีมการประมวลผลอีกครั้ง ระบบจะส่งบัฟเฟอร์กลับไปยังคิวเอาต์พุตเพื่อใช้ซ้ำ
เงื่อนไขข้อผิดพลาด
- การใช้สตรีมเอาต์พุตที่มีขนาด/รูปแบบไม่เหมาะสมสำหรับพื้นฐานของสตรีมการประมวลผลอีกครั้ง
- พยายามจัดสรรสตรีมการประมวลผลอีกครั้งมากเกินไปในครั้งเดียว
พารามิเตอร์อินพุต
- output_stream_id: รหัสของสตรีมเอาต์พุตที่มีอยู่ซึ่งมีขนาดและรูปแบบที่เหมาะสำหรับการประมวลผลอีกครั้ง
- reprocess_stream_ops: โครงสร้างของพอยน์เตอร์ฟังก์ชันสำหรับการรับและปล่อยบัฟเฟอร์สำหรับสตรีมนี้ สตรีมที่อยู่เบื้องหลังจะใช้แฮนเดิลบัฟเฟอร์กราฟิกเดียวกับที่สตรีมเอาต์พุตใช้
พารามิเตอร์เอาต์พุต
- stream_id: จำนวนเต็มแบบไม่ลงนามที่ระบุสตรีมนี้ ค่านี้ใช้ในคําขอขาเข้าเพื่อระบุสตรีมและในการเผยแพร่สตรีม รหัสเหล่านี้จะนับแยกต่างหากจากรหัสสตรีมอินพุต
ลูกค้า HAL ต้องเผยแพร่สตรีมการประมวลผลอีกครั้งก่อนเผยแพร่สตรีมเอาต์พุตที่ใช้เป็นพื้นฐานเสมอ
int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers) |
allocate_stream:
จัดสรรสตรีมเอาต์พุตใหม่เพื่อใช้งาน ซึ่งกำหนดโดยความกว้าง ความสูง เป้าหมาย บัฟเฟอร์เอาต์พุต และรูปแบบพิกเซล แสดงผลรหัสของสตรีมใหม่ แฟล็กการใช้งาน gralloc จํานวนบัฟเฟอร์คิวขั้นต่ำ และรูปแบบพิกเซล (หากมี) เมื่อดำเนินการสำเร็จ เงื่อนไขข้อผิดพลาด
- การขอชุดค่าผสมความกว้าง/ความสูง/รูปแบบที่ไม่ได้ระบุไว้ว่าลักษณะแบบคงที่ของเซ็นเซอร์รองรับ
- การขอสตรีมรูปแบบหนึ่งๆ มากเกินไป (เช่น สตรีม RAW แบบ Bayer 2 รายการ)
พารามิเตอร์อินพุต
- width, height, format: ข้อมูลจำเพาะสำหรับบัฟเฟอร์ที่จะส่งผ่านสตรีมนี้ รูปแบบคือค่าจากรายการ HAL_PIXEL_FORMAT_* หากใช้ HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED โมดูล gralloc ของแพลตฟอร์มจะเลือกรูปแบบตาม Flag การใช้งานที่ HAL ของกล้องและผู้ใช้งานสตรีมระบุ HAL ของกล้องควรตรวจสอบบัฟเฟอร์ที่ส่งให้ในการเรียกใช้ register_stream_buffers เพื่อรับรูปแบบเฉพาะการใช้งาน หากจำเป็น
- stream_ops: โครงสร้างของพอยน์เตอร์ฟังก์ชันสำหรับการรับและจัดคิวบัฟเฟอร์สำหรับสตรีมนี้ ระบบจะกําหนดค่าสตรีมพื้นฐานตามเอาต์พุตการใช้งานและ max_buffers ระบบอาจไม่เรียกใช้เมธอดในโครงสร้างนี้จนกว่า allocate_stream จะแสดงผล
พารามิเตอร์เอาต์พุต
- stream_id: จำนวนเต็มแบบไม่ลงนามที่ระบุสตรีมนี้ ค่านี้ใช้ในคําขอขาเข้าเพื่อระบุสตรีมและในการเผยแพร่สตรีม
- usage: มาสก์การใช้งาน gralloc ที่อุปกรณ์ HAL ต้องใช้ในการสร้างข้อมูลประเภทที่ขอ ซึ่งใช้ในการจัดสรรบัฟเฟอร์ gralloc ใหม่สำหรับคิวบัฟเฟอร์สตรีม
- max_buffers: จำนวนบัฟเฟอร์สูงสุดที่อุปกรณ์ HAL อาจต้องนำออกจากคิวพร้อมกัน อุปกรณ์จะยกเลิกการจัดคิวบัฟเฟอร์ได้ไม่เกินค่านี้พร้อมกัน
int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
สร้างคำขอเริ่มต้นที่กรอกข้อมูลไว้แล้วสำหรับกรณีการใช้งานกล้องมาตรฐาน
อุปกรณ์ต้องแสดงคำขอที่สมบูรณ์ซึ่งกําหนดค่าให้เป็นไปตาม Use Case ที่ขอ ซึ่งต้องเป็นค่าใดค่าหนึ่งใน CAMERA2_TEMPLATE_* ต้องรวมช่องควบคุมคําขอทั้งหมดไว้ ยกเว้น android.request.outputStreams
บัฟเฟอร์ข้อมูลเมตาที่แสดงผลต้องได้รับการจัดสรรด้วย allocate_camera_metadata เฟรมเวิร์กจะเป็นเจ้าของบัฟเฟอร์
int(* dump)(const struct camera2_device *, int fd) |
int(* flush_captures_in_progress)(const struct camera2_device *) |
ล้างการบันทึกที่อยู่ระหว่างดำเนินการทั้งหมด ซึ่งรวมถึงคำขอทั้งหมดที่ออกจากคิว (ปกติหรือประมวลผลอีกครั้ง) ซึ่งยังไม่ได้ส่งเอาต์พุตไปยังสตรีมหรือคิวเฟรม การบันทึกที่เสร็จสิ้นบางส่วนต้องดำเนินการให้เสร็จสมบูรณ์ตามปกติ ระบบจะไม่นำคิวคำขอใหม่ออกจากคิวจนกว่าการล้างข้อมูลจะเสร็จสมบูรณ์
int(* get_in_progress_count)(const struct camera2_device *) |
int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
รับข้อมูลเมตาเฉพาะอินสแตนซ์อุปกรณ์ ข้อมูลเมตานี้ต้องคงที่สำหรับอินสแตนซ์เดียวของอุปกรณ์กล้อง แต่อาจแตกต่างกันระหว่างการเรียกใช้ open() โปรดทราบว่าตัวชี้ camera_metadata ที่แสดงผลต้องถูกต้องจนกว่าจะมีการเรียกใช้เมธอด close() ของอุปกรณ์
ข้อมูลเวอร์ชัน
CAMERA_DEVICE_API_VERSION_2_0:
ไม่พร้อมใช้งาน เฟรมเวิร์กอาจเข้าถึงตัวชี้ฟังก์ชันนี้ไม่ได้
CAMERA_DEVICE_API_VERSION_2_1:
ถูกต้อง เฟรมเวิร์กเรียกใช้ได้
int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct camera2_device *) |
int(* register_stream_buffers)(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
ลงทะเบียนบัฟเฟอร์สำหรับสตรีมหนึ่งๆ ฟังก์ชันนี้จะเรียกใช้หลังจากการเรียก allocate_stream สําเร็จ และก่อนที่คําขอแรกซึ่งอ้างอิงสตรีมจะจัดคิว วิธีการนี้มีไว้เพื่อให้อุปกรณ์ HAL แมปหรือเตรียมบัฟเฟอร์ไว้ใช้ภายหลัง โดย num_buffers ต้องมีอย่างน้อย max_buffers (จาก allocate_stream) แต่อาจมากกว่าก็ได้ บัฟเฟอร์จะล็อกไว้เพื่อใช้งานแล้ว เมื่อสิ้นสุดการโทร บัฟเฟอร์ทั้งหมดต้องพร้อมที่จะส่งกลับไปยังคิว หากตั้งค่ารูปแบบสตรีมเป็น HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED แล้ว HAL ของกล้องควรตรวจสอบบัฟเฟอร์ที่ส่งผ่านที่นี่เพื่อระบุข้อมูลรูปแบบพิกเซลที่เป็นส่วนตัวของแพลตฟอร์ม
int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* release_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้
- hardware/libhardware/include/hardware/ camera2.h