หน้านี้แสดงรายละเอียดความแตกต่างของเวอร์ชันในกล้อง HAL, API และ การทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ทั้งยังครอบคลุม การเปลี่ยนแปลงเชิงสถาปัตยกรรมที่ทำให้เฟรมเวิร์กกล้องแข็งแกร่งและมั่นคงใน Android 7.0 การเปลี่ยนไปใช้ Treble ใน Android 8.0 และผู้ให้บริการอัปเดตจะต้องดำเนินการเพื่อ รองรับการเปลี่ยนแปลงเหล่านี้ในการใช้งานกล้อง
คำศัพท์
หน้านี้ใช้คำต่อไปนี้
- API กล้องถ่ายรูป1
- เฟรมเวิร์กกล้องระดับแอปในอุปกรณ์ Android 4.4 และต่ำกว่า
ผ่านชั้นเรียน
android.hardware.Camera
- API กล้อง 2
- เฟรมเวิร์กกล้องระดับแอปบนอุปกรณ์ Android 5.0 ขึ้นไปที่เผยให้เห็นเนื้อใน
ผ่านแพ็กเกจ
android.hardware.camera2
- HAL ของกล้อง
- เลเยอร์โมดูลกล้องที่ผู้ให้บริการ SoC ใช้ สาธารณะระดับแอป จะสร้างขึ้นจาก HAL ของกล้อง
- กล้อง HAL3.1
- เวอร์ชัน HAL ของอุปกรณ์กล้องที่เปิดตัวพร้อม Android 4.4
- กล้อง HAL3.2
- เวอร์ชัน HAL ของอุปกรณ์กล้องที่เปิดตัวใน Android 5.0
- API1 CTS ของกล้อง
- ชุดการทดสอบ CTS ของกล้องที่ทำงานเหนือกล้อง API1
- API2 CTS ของกล้อง
- ชุดการทดสอบ CTS เพิ่มเติมของกล้องที่ทำงานบน Camera API2
- เสียงแหลม
- แยกการใช้งานของผู้ให้บริการ (ซอฟต์แวร์เฉพาะอุปกรณ์และระดับล่าง) (ซึ่งเขียนโดยผู้ผลิตซิลิคอน) จากเฟรมเวิร์กระบบปฏิบัติการ Android ผ่าน ให้กับผู้ให้บริการ
- แบบ HIDL
- ภาษาคำจำกัดความของอินเทอร์เฟซ HAL เปิดตัวด้วย Treble และใช้เพื่อระบุอินเทอร์เฟซระหว่าง HAL กับ ผู้ใช้ของเขา
- VTS
- เปิดตัวชุดทดสอบสำหรับผู้ให้บริการควบคู่ไปกับ เสียงแหลม
API กล้อง
Android มี API กล้องดังต่อไปนี้
API กล้องถ่ายรูป1
Android 5.0 ได้เลิกใช้งาน Camera API1 แล้ว ซึ่งยังคงมีการเลิกใช้งานเป็นเวอร์ชันใหม่ การพัฒนาแพลตฟอร์มจะมุ่งเน้นที่ Camera API2 อย่างไรก็ตาม ระยะเวลาที่เลิกใช้งานจะ และ Android รุ่นต่างๆ จะยังคงรองรับแอป Camera API1 สำหรับ สักครั้ง กล่าวอย่างเจาะจงคือ เรามีการสนับสนุนสำหรับบริการต่อไปนี้
- อินเทอร์เฟซกล้องถ่ายรูป API1 สำหรับแอป แอปกล้องที่สร้างต่อยอดจากกล้องถ่ายรูป API1 ควรทำงานในลักษณะเดียวกับในอุปกรณ์ที่ใช้ Android เวอร์ชันต่ำกว่า
- เวอร์ชัน HAL ของกล้อง พร้อมรองรับ HAL1.0 ของกล้อง
API กล้อง 2
เฟรมเวิร์ก Camera API2 ช่วยให้แอปควบคุมกล้องในระดับล่างได้ ซึ่งรวมถึงกระบวนการต่อเนื่อง แบบ Zero Copy/สตรีม และการควบคุมต่อเฟรมที่มีประสิทธิภาพ การรับแสง, อัตราขยาย, การเพิ่มสมดุลแสงขาว, การแปลงสี, การตัดเสียงรบกวน, การเพิ่มความคมชัด และอื่นๆ ดูรายละเอียดได้ที่ ภาพรวมวิดีโอ Google I/O
Android 5.0 ขึ้นไปมี Camera API2 แต่อุปกรณ์ที่ใช้ Android
5.0 ขึ้นไปอาจไม่รองรับฟีเจอร์ Camera API2 ทั้งหมด
พร็อพเพอร์ตี้ android.info.supportedHardwareLevel
ที่แอปค้นหาได้
ในอินเทอร์เฟซ Camera API2 จะรายงานการสนับสนุนอย่างใดอย่างหนึ่งต่อไปนี้
ระดับ:
LEGACY
: อุปกรณ์เหล่านี้เปิดตัวความสามารถต่างๆ แก่แอปผ่าน อินเทอร์เฟซ Camera API2 ที่มีความสามารถใกล้เคียงกับ ผ่านอินเทอร์เฟซ Camera API1 ได้ โค้ดเฟรมเวิร์กเดิม ในแนวคิดจะแปลการเรียก Camera API2 เป็นการเรียก Camera API1 อุปกรณ์เดิม ไม่รองรับฟีเจอร์ Camera API2 เช่น การควบคุมต่อเฟรมLIMITED
: อุปกรณ์เหล่านี้รองรับความสามารถบางอย่างของ Camera API2 (แต่ไม่ใช่ทั้งหมด) และต้องใช้ HAL ของกล้อง 3.2 ขึ้นไปFULL
: อุปกรณ์เหล่านี้รองรับความสามารถหลักทั้งหมดของ Camera API2 และต้องใช้ HAL ของกล้อง 3.2 ขึ้นไป และ Android 5.0 ขึ้นไปLEVEL_3
: อุปกรณ์เหล่านี้รองรับการประมวลผล YUV ใหม่และรูปภาพ RAW พร้อมกับการกำหนดค่าสตรีมเอาต์พุตเพิ่มเติมEXTERNAL
: อุปกรณ์เหล่านี้คล้ายกับLIMITED
อุปกรณ์โดยมีข้อยกเว้นบางประการ เช่น ข้อมูลจากเซ็นเซอร์หรือเลนส์บางส่วนอาจ ไม่ถูกรายงานหรือมีอัตราเฟรมที่เสถียรน้อยกว่า ระดับนี้ใช้สําหรับผู้ใช้ภายนอก เช่น เว็บแคม USB
แต่ละความสามารถจะแสดงผ่าน
พร็อพเพอร์ตี้ android.request.availableCapabilities
ใน Camera API2
อินเทอร์เฟซ อุปกรณ์ FULL
เครื่องต้องใช้ MANUAL_SENSOR
และ
ความสามารถ MANUAL_POST_PROCESSING
และอื่นๆ
ความสามารถของ RAW
เป็นตัวเลือกที่ไม่บังคับสำหรับอุปกรณ์ FULL
เครื่อง
อุปกรณ์ LIMITED
เครื่องสามารถโฆษณาชุดย่อยของความสามารถเหล่านี้
ไม่รวมสิ่งเหล่านี้ อย่างไรก็ตาม ความสามารถ BACKWARD_COMPATIBLE
ต้องมีการกำหนดเสมอ
ระดับฮาร์ดแวร์ที่รองรับของอุปกรณ์ ตลอดจนกล้องที่เฉพาะเจาะจง ความสามารถของ API2 ที่ API รองรับมีพร้อมแฟล็กฟีเจอร์ต่อไปนี้ อนุญาตให้ Google Play กรองแอปกล้องถ่ายรูป API2 กล้องถ่ายรูปได้
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
ข้อกำหนดของ CTS
อุปกรณ์ที่ใช้ Android 5.0 ขึ้นไปต้องผ่าน Camera API1 CTS, Camera การทดสอบกล้อง API2 CTS และ CTS Verifier
อุปกรณ์ที่ไม่ได้ใช้กล้อง HAL3.2 และไม่ใช่
ที่สามารถรองรับอินเทอร์เฟซ Camera API2 เต็มรูปแบบได้ ยังคงต้อง
การทดสอบ API2 CTS แต่อุปกรณ์จะทำงานใน Camera API2
โหมด LEGACY
(ซึ่งมีการแมปการเรียก Camera API2 ตามแนวคิด)
ไปยังการเรียก Camera API1) ดังนั้นการทดสอบ Camera API2 CTS ใดๆ ที่เกี่ยวข้องกับฟีเจอร์หรือ
ระบบจะข้ามความสามารถอื่นๆ นอกเหนือจาก Camera API1 โดยอัตโนมัติ
ในอุปกรณ์เดิม การทดสอบ Camera API2 CTS ที่เรียกใช้จะใช้ อินเทอร์เฟซและความสามารถของ Camera API1 สาธารณะที่มีอยู่ โดยไม่เพิ่ม ข้อบกพร่องที่เปิดเผย (และที่ทำให้ Camera API2 CTS ทำงานล้มเหลว) คือข้อบกพร่องที่มีอยู่แล้วใน HAL กล้องที่มีอยู่ของอุปกรณ์ ด้วยเหตุนี้ ในแอป Camera API1 ที่มีอยู่ เราคาดว่าจะไม่มีข้อบกพร่องลักษณะนี้มากนัก (แต่ต้องแก้ไขข้อบกพร่องดังกล่าวเพื่อให้ผ่านการทดสอบ Camera API2 CTS)
ข้อกำหนดของ VTS
อุปกรณ์ที่ใช้ Android 8.0 ขึ้นไปซึ่งมีการใช้ HAL แบบผูกโยงต้อง ส่งกล้องไปให้ การทดสอบ VTS
การปิดขอบกรอบกล้อง
Android 7.0 ขยับกล้องเพื่อเสริมความปลอดภัยของเฟรมเวิร์กสื่อและกล้อง ออกจากบริการสื่อ ตั้งแต่ Android 8.0 เป็นต้นไป กล้องแยกภาพแต่ละตัว HAL จะทำงานในกระบวนการที่แยกจากบริการกล้อง ผู้ให้บริการอาจต้อง HAL ของกล้องจะเปลี่ยนไปตามเวอร์ชัน API และ HAL ที่ใช้งาน ส่วนต่อไปนี้แสดงรายละเอียดการเปลี่ยนแปลงทางสถาปัตยกรรมใน AP1 และ AP2 สำหรับ HAL1 และ HAL3 และข้อกำหนดทั่วไป
การเปลี่ยนแปลงสถาปัตยกรรมสำหรับ API1
การบันทึกวิดีโอ API1 อาจถือว่ากล้องและโปรแกรมเปลี่ยนไฟล์วิดีโอสดอยู่ในตัวเดียวกัน ขั้นตอนได้ เมื่อใช้ API1 บน:
- HAL3 ซึ่งบริการกล้องใช้ BufferQueue เพื่อส่งบัฟเฟอร์ระหว่าง กระบวนการ ไม่จำเป็นต้องอัปเดตผู้ให้บริการ
- HAL1 ซึ่งรองรับการส่งข้อมูลเมตาในบัฟเฟอร์วิดีโอ ผู้ให้บริการต้อง
อัปเดต HAL เพื่อใช้
kMetadataBufferTypeNativeHandleSource
(Android ไม่รองรับkMetadataBufferTypeCameraSource
อีกต่อไป 7.0)
การเปลี่ยนแปลงทางสถาปัตยกรรมสำหรับ API2
สำหรับ API2 ใน HAL1 หรือ HAL3 นั้น BufferQueue จะส่งบัฟเฟอร์เพื่อให้เส้นทางเหล่านั้นดำเนินการต่อ ที่จะทำงาน สถาปัตยกรรม Android 7.0 สำหรับ API2 บน:
- HAL1 จะไม่ได้รับผลกระทบจากการย้ายบริการกล้อง และไม่มีผู้ให้บริการ อัปเดตเป็นสิ่งจำเป็น
- HAL3 ได้รับผลกระทบ แต่ไม่มีการอัปเดตผู้ให้บริการ จำเป็น:
ข้อกำหนดเพิ่มเติม
การเปลี่ยนแปลงด้านสถาปัตยกรรมเพื่อเสริมความแข็งแกร่งให้กับเฟรมเวิร์กสื่อและกล้อง รวมถึงข้อกำหนดเพิ่มเติมของอุปกรณ์ดังนี้
- ทั่วไป อุปกรณ์ต้องใช้แบนด์วิดท์เพิ่มเติมเนื่องจาก IPC
ซึ่งอาจส่งผลต่อกรณีการใช้งานกล้องที่จำกัดเวลา เช่น วิดีโอความเร็วสูง
บันทึก ผู้ให้บริการสามารถวัดผลกระทบที่เกิดขึ้นจริงโดยการเรียกใช้
android.hardware.camera2.cts.PerformanceTest
และ Google กล้องถ่ายรูป แอปสำหรับการบันทึกวิดีโอความเร็วสูง 120/240 FPS นอกจากนี้ อุปกรณ์จะต้องมี RAM เพิ่มเติมเพียงเล็กน้อยเพื่อสร้างกระบวนการใหม่ - ส่งข้อมูลเมตาในบัฟเฟอร์วิดีโอ (เฉพาะ HAL1 เท่านั้น) หากเป็น HAL1
จัดเก็บข้อมูลเมตาแทนข้อมูลเฟรม YUV จริงในบัฟเฟอร์วิดีโอ HAL
ใช้
kMetadataBufferTypeNativeHandleSource
เป็นบัฟเฟอร์ข้อมูลเมตา พิมพ์และส่งVideoNativeHandleMetadata
ในบัฟเฟอร์วิดีโอ (ไม่รองรับkMetadataBufferTypeCameraSource
ใน Android แล้ว 7.0) เฟรมเวิร์กกล้องและสื่อด้วยVideoNativeHandleMetadata
สามารถส่งผ่านบัฟเฟอร์วิดีโอระหว่างขั้นตอนต่างๆ โดยการเรียงลำดับและ การดีซีเรียลไลซ์แฮนเดิลดั้งเดิมอย่างถูกต้อง - ที่อยู่แฮนเดิลของบัฟเฟอร์ไม่เก็บบัฟเฟอร์เดียวกันเสมอไป (เฉพาะ HAL3 เท่านั้น) สำหรับคำขอจับภาพแต่ละรายการ HAL3 จะได้รับที่อยู่ของบัฟเฟอร์ แฮนเดิล HAL ไม่สามารถใช้ที่อยู่เพื่อระบุบัฟเฟอร์เนื่องจากที่อยู่ อาจจัดเก็บแฮนเดิลอื่นหลังจากที่ HAL ส่งคืนบัฟเฟอร์แล้ว คุณต้องอัปเดต HAL เพื่อใช้แฮนเดิลบัฟเฟอร์เพื่อระบุบัฟเฟอร์ ตัวอย่างเช่น HAL ได้รับ ที่อยู่แฮนเดิล A ของบัฟเฟอร์ A ซึ่งเก็บแฮนเดิล A หลังจาก HAL กลับมา แฮนเดิล A, ที่อยู่แฮนเดิล A ของบัฟเฟอร์ A อาจจัดเก็บแฮนเดิล B ในครั้งถัดไปที่ โดย HAL ได้รับคำตอบ
- อัปเดตนโยบาย SELinux สำหรับ Cameraserver ถ้า นโยบาย SELinux เฉพาะอุปกรณ์ให้สิทธิ์เซิร์ฟเวอร์สื่อในการเรียกใช้กล้อง คุณต้องอัปเดตนโยบาย SELinux เพื่อให้สิทธิ์ที่เหมาะสมแก่ Cameraserver พ ไม่สนับสนุนให้จำลองนโยบาย SELinux ของเซิร์ฟเวอร์สื่อสำหรับเซิร์ฟเวอร์กล้อง (เนื่องจากโดยทั่วไป Mediaserver และ Cameraserver ต้องการทรัพยากรที่แตกต่างกันใน ) Cameraserver ควรมีเฉพาะสิทธิ์ที่จำเป็นต่อการใช้งานกล้องเท่านั้น ฟังก์ชันและสิทธิ์เกี่ยวกับกล้องที่ไม่จำเป็นใน Mediaserver ควรลบออก
- การแยกระหว่าง HAL ของกล้องและ Cameraserver แอนดรอยด์ 8.0 ขึ้นไปจะแยก HAL ของกล้องที่ถูกยึดติดเข้าด้วยกันในกระบวนการ ที่แตกต่างจาก Cameraserver IPC ใช้งานได้แล้ว อินเทอร์เฟซที่กำหนดแบบ HIDL
การตรวจสอบความถูกต้อง
สำหรับอุปกรณ์ทั้งหมดที่มีกล้องและใช้ Android 7.0 ให้ตรวจสอบ ด้วยการใช้ Android 7.0 CTS แม้ว่า Android 7.0 ไม่มี การทดสอบ CTS ใหม่ที่ยืนยันการเปลี่ยนแปลงบริการกล้อง การทดสอบ CTS ที่มีอยู่ล้มเหลว หากคุณไม่ได้ทำการอัปเดตที่ระบุไว้ข้างต้น
สำหรับอุปกรณ์ทุกเครื่องที่มีกล้องและใช้ Android 8.0 ขึ้นไป ให้ตรวจสอบ การติดตั้งใช้งานผู้ให้บริการด้วยการเรียกใช้ VTS
ประวัติเวอร์ชัน HAL ของกล้อง
ดูรายการการทดสอบที่มีไว้ประเมิน HAL ของกล้อง Android ได้ที่ การทดสอบ HAL ของกล้อง รายการตรวจสอบ
Android 10
Android 10 ขอแนะนำการอัปเดตต่อไปนี้
API กล้องถ่ายรูป
- การปรับปรุงกล้องถ่ายรูปหลายตัวที่ช่วยให้กล้อง จะใช้ทีละตัวหรือผ่านกล้องลอจิคัลที่เกี่ยวข้องด้วยการซ่อน รหัสกล้องจริง โปรดดู การรองรับกล้องหลายตัว
- ความสามารถในการตรวจสอบว่า การกำหนดค่าเซสชันหนึ่งๆ
โดยไม่มีค่าโสหุ้ยด้านประสิทธิภาพในการสร้างเซสชันใหม่
โปรดดู
CameraDevice
- ความสามารถในการเรียกคืนการกำหนดค่าสตรีมที่แนะนำสำหรับการใช้งานที่กำหนด
เพื่อให้ลูกค้าประหยัดพลังงานและการทำงานได้มีประสิทธิภาพมากขึ้น โปรดดู
getRecommendedStreamConfigurationMap
- การรองรับฟิลด์ รูปแบบรูปภาพ JPEG ที่มีความลึก ดูรายละเอียดเพิ่มเติมได้ที่ ข้อกำหนดความชัดลึกแบบไดนามิก
- การรองรับฟิลด์ รูปแบบรูปภาพ HEIC โปรดดู การถ่ายภาพ HEIF
- การปรับปรุงความเป็นส่วนตัว ไคลเอ็นต์จำเป็นต้องใช้คีย์บางรายการ
ที่จะมี
CAMERA
สิทธิ์ก่อนที่จะดึงเงินคืนได้CameraCharacteristics
โปรดดูgetKeysNeedingPermission
HAL ของกล้อง
เวอร์ชัน HAL ของกล้องต่อไปนี้ได้รับการอัปเดตใน Android แล้ว 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: ข้อมูลกล้องนิ่งสำหรับรหัสกล้องจริงที่สำรองข้อมูลเชิงตรรกะ กล้อง โปรดดู การรองรับกล้องหลายตัว isStreamCombinationSupported
: วิธีนี้รองรับไฟล์สาธารณะ API ที่ช่วยไคลเอ็นต์ในการค้นหา หากมีการรองรับการกำหนดค่าเซสชัน โปรดดู API เพื่อค้นหาชุดค่าผสมของสตรีม
ICameraDeviceSession
-
isReconfigurationNeeded
: วิธีที่บอกเฟรมเวิร์กของกล้องว่าสตรีมสมบูรณ์หรือไม่ ต้องมีการกําหนดค่าใหม่สําหรับค่าพารามิเตอร์เซสชันใหม่ที่เป็นไปได้ ช่วงเวลานี้ ช่วยหลีกเลี่ยงความล่าช้าในการกำหนดค่ากล้องใหม่โดยไม่จำเป็น โปรดดู การค้นหาเกี่ยวกับการกำหนดค่าเซสชันใหม่ - ฮัล
Buffer Management API: API เหล่านี้ช่วยให้ HAL ของกล้องขอได้
จะบัฟเฟอร์จากเฟรมเวิร์กของกล้องถ่ายรูปเมื่อจำเป็นเท่านั้น แทนที่จะต้องเชื่อมต่อกัน
คำขอจับภาพที่มีบัฟเฟอร์ที่เกี่ยวข้องตลอดไปป์ไลน์ของกล้อง
ซึ่งอาจช่วยลดการใช้หน่วยความจำได้อย่างมาก
-
signalStreamFlush
: ส่งสัญญาณไปยัง HAL ที่กล้อง บริการกำลังจะดำเนินการconfigureStreams_3_5
และ HAL จะต้องส่งคืนบัฟเฟอร์ทั้งหมดของสตรีมที่กำหนด -
configureStreams_3_5
: คล้ายกับICameraDevice3.4.configureStreams
แต่อยู่ใน ยิ่งไปกว่านั้น ตัวนับstreamConfigCounter
ยังใช้กับ ตรวจหาเงื่อนไขการแข่งขันระหว่างconfigureStreams_3_5
และsignalStreamFlush
สาย
-
การอัปเดตสำหรับ ICameraDeviceCallback
:
-
requestStreamBuffers
: Callback แบบซิงโครนัสที่ HAL ของกล้องเรียกใช้เพื่อขอเซิร์ฟเวอร์กล้อง บัฟเฟอร์ โปรดดูrequestStreamBuffers
-
returnStreamBuffers
: Callback แบบซิงโครนัสสำหรับ HAL ของกล้องเพื่อส่งคืนบัฟเฟอร์เอาต์พุตไปยัง เซิร์ฟเวอร์กล้องถ่ายรูป โปรดดูreturnStreamBuffers
3.4
มีการเพิ่มคีย์ต่อไปนี้ลงในข้อมูลเมตาของกล้องใน Android 10.
- รูปแบบรูปภาพ
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- แท็กข้อมูลเมตาของกล้อง
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- ความสามารถ
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- ค่าสำหรับ
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
แป้นANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- การกำหนดค่าสตรีมที่มีความลึกแบบไดนามิกที่ใช้ได้
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- การกำหนดค่าสตรีม HEIC ที่พร้อมใช้งาน
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
โมดูลกล้อง
เวอร์ชันโมดูลกล้องต่อไปนี้ได้รับการอัปเดตใน Android 10.
2.5
- เพิ่มเมธอด
notifyDeviceStateChange
ให้อุปกรณ์แจ้งเตือน HAL ของกล้องเมื่อมีการเปลี่ยนแปลงทางกายภาพ เช่น การพับ ส่งผลต่อกล้องและ เส้นทาง
2.4
- อุปกรณ์ที่เปิดด้วย API ระดับ 29 ขึ้นไปต้องรายงาน
true
ในราคาisTorchModeSupported
Android 9
รุ่น Android 9 มีการอัปเดตต่อไปนี้สำหรับ API ของกล้อง2 และ อินเทอร์เฟซ HAL
API กล้องถ่ายรูป
- เปิดตัว API กล้องหลายตัวเพื่อรองรับอุปกรณ์ที่มี กล้องหันไปในทิศทางเดียวกัน ทำให้สามารถใช้คุณลักษณะอย่างเช่นโบเก้และ ซูมอย่างราบรื่น การดำเนินการนี้ช่วยให้แอปดูกล้องหลายตัวในอุปกรณ์เป็นเครื่องเดียวได้ หน่วยตรรกะ (กล้องตรรกะ) ยังส่งคำขอจับภาพไปยังผู้ใช้แต่ละรายได้ อุปกรณ์กล้องถ่ายรูป ได้แก่ กล้องตรรกะ 1 ตัว โปรดดู การรองรับกล้องหลายตัว
- แนะนำพารามิเตอร์เซสชัน พารามิเตอร์เซสชันเป็นชุดย่อยของ พารามิเตอร์การจับภาพที่ใช้ได้ ซึ่งอาจทำให้การประมวลผลล่าช้าอย่างมากเมื่อ แก้ไขแล้ว ค่าใช้จ่ายเหล่านี้สามารถลดลงได้หากลูกค้าส่งค่าเริ่มต้นไป ระหว่างการเริ่มต้นเซสชันการจับภาพ โปรดดู พารามิเตอร์เซสชัน
- เพิ่มคีย์ข้อมูลระบบกันภาพสั่นแบบออปติคัล (OIS) สำหรับการป้องกันภาพสั่นไหวระดับแอปและ
เอฟเฟกต์ โปรดดู
STATISTICS_OIS_SAMPLES
- เพิ่มการรองรับแฟลชภายนอก โปรดดู
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
- เพิ่ม Intent การติดตามการเคลื่อนไหวใน
CAPTURE_INTENT
โปรดดูCONTROL_CAPTURE_INTENT_MOTION_TRACKING
- เลิกใช้งาน
LENS_RADIAL_DISTORTION
และเพิ่มLENS_DISTORTION
แทน - เพิ่มโหมดการแก้ไขการบิดเบี้ยวใน
CaptureRequest
โปรดดูDISTORTION_CORRECTION_MODE
- เพิ่มการรองรับกล้อง USB/UVC ภายนอกในอุปกรณ์ที่รองรับ โปรดดู
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
HAL ของกล้อง
3.4
การอัปเดตของ ICameraDeviceSession
-
configureStreams_3_4
เพิ่มการรองรับsessionParameters
และกล้องเชิงตรรกะ -
processCaptureRequest_3_4
เพิ่มการรองรับการรวมรหัสกล้องจริงในโครงสร้างสตรีม
การอัปเดตของ ICameraDeviceCallback
-
processCaptureResult_3_4
เพิ่มข้อมูลเมตาของกล้องจริงในผลการจับภาพ
3.3
ระบบจะเพิ่มคีย์ต่อไปนี้ลงในข้อมูลเมตาของกล้องใน Android 9
- ความสามารถ
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- แท็กข้อมูลเมตาของกล้อง
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
Android 8.0 เปิดตัว Treble มาพร้อมเสียง Treble, HAL กล้องของผู้ให้บริการ การนำไปใช้งานต้องเป็น binderized Android 8.0 ด้วย ประกอบด้วยการเพิ่มประสิทธิภาพหลักๆ ต่อไปนี้สำหรับบริการกล้องถ่ายรูป
- แพลตฟอร์มที่ใช้ร่วมกัน: เปิดใช้หลายแพลตฟอร์มที่แชร์แบบเดียวกัน
OutputConfiguration
- API ระบบสำหรับโหมดกล้องที่กำหนดเอง
onCaptureQueueEmpty
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์เหล่านี้ได้ในส่วนด้านล่าง
แพลตฟอร์มที่แชร์
ฟีเจอร์นี้ช่วยให้บัฟเฟอร์เพียงชุดเดียวสามารถขับเคลื่อนเอาต์พุต 2 รายการ เช่น การแสดงตัวอย่างและการเข้ารหัสวิดีโอ ซึ่งทำให้พลังงานและการใช้หน่วยความจำลดลง ถึง จะรองรับฟีเจอร์นี้ ผู้ผลิตอุปกรณ์ต้องตรวจสอบให้แน่ใจว่า HAL ของกล้องและ การใช้งาน gralloc HAL สามารถสร้างบัฟเฟอร์ Gralloc ที่ใช้โดย ผู้ใช้ที่แตกต่างกันหลายราย (เช่น ผู้เขียนฮาร์ดแวร์/GPU และวิดีโอ ของโปรแกรมเปลี่ยนไฟล์) แทนที่จะเป็นผู้ใช้เพียงรายเดียว บริการกล้องส่งผ่าน รับทราบการใช้งานของผู้บริโภคที่ HAL ของกล้องและ Gralloc HAL ที่พวกเขาต้องการ จัดสรรบัฟเฟอร์ชนิดที่เหมาะสม มิฉะนั้น HAL ของกล้องต้องแสดงผลข้อผิดพลาด ระบบไม่รองรับกลุ่มผู้บริโภคนี้
โปรดดู
enableSurfaceSharing
เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์
สำหรับรายละเอียดเพิ่มเติม
API ระบบสำหรับโหมดกล้องที่กำหนดเอง
API กล้องสาธารณะกำหนดโหมดการทำงาน 2 โหมด ได้แก่ ปกติและแบบจำกัด
การบันทึกความเร็วสูง แต่มีความหมายต่างกันพอสมควร ตัวอย่างเช่น
โหมดความเร็วสูงจะจำกัดให้เอาต์พุตเฉพาะครั้งละไม่เกิน 2 รายการ ต่างกันไป
OEM ได้แสดงความสนใจในการกำหนดโหมดอื่นๆ ที่กำหนดเองสำหรับ
ความสามารถเฉพาะด้านฮาร์ดแวร์ ภายในระบบ โหมดจะเป็นแค่จำนวนเต็ม
ผ่านไปยัง configure_streams
โปรดดูหัวข้อต่อไปนี้
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
ฟีเจอร์นี้มีการเรียก API ระบบที่แอปกล้อง OEM สามารถใช้เพื่อเปิดใช้ โหมดที่กำหนดเอง โหมดเหล่านี้ต้องเริ่มต้นที่ค่าจำนวนเต็ม 0x8000 เพื่อหลีกเลี่ยงข้อขัดแย้ง พร้อมโหมดในอนาคตที่เพิ่มลงใน API สาธารณะ
OEM ต้องเพิ่มโหมดใหม่ลงใน HAL เพื่อสนับสนุนฟีเจอร์นี้ ที่ทริกเกอร์โดยจำนวนเต็มนี้ที่ส่งไปยัง HAL ในConfigure_streams จากนั้น แอปกล้องที่กำหนดเองของตนใช้ API ระบบ
ชื่อเมธอดคือ
android.hardware.camera2.CameraDevice#createCustomCaptureSession
โปรดดูหัวข้อต่อไปนี้
frameworks/base/core/java/android/hardware/camera2/CameraDevice
onCaptureQueue ว่างเปล่า
วัตถุประสงค์ของ API นี้คือเพื่อลดเวลาในการตอบสนองของการเปลี่ยนแปลงการควบคุม เช่น การซูม
ทำให้คิวคำขอว่างเปล่าที่สุด onCaptureQueueEmpty
ไม่ต้องมีการดำเนินการระดับ HAL เป็นเพียงส่วนเพิ่มเติมของเฟรมเวิร์กเท่านั้น แอปที่
จะใช้ประโยชน์โดยจะต้องเพิ่ม Listener ลงในการเรียกกลับนั้นและตอบกลับ
อย่างเหมาะสม โดยทั่วไปจะเป็นการส่งคำขอจับภาพอีกคำขอหนึ่งไปยังกล้อง
อุปกรณ์
อินเทอร์เฟซ HIDL ของกล้อง
อินเทอร์เฟซ HIDL ของกล้องเป็นการปรับปรุงอินเทอร์เฟซ HAL ของกล้องอย่างสมบูรณ์ ที่ใช้ API แบบคงที่ที่กำหนดโดย HIDL ฟีเจอร์และความสามารถทั้งหมดของกล้อง เปิดตัวในรุ่นเดิม 3.4 และ 2.4 ล่าสุด (สำหรับกล้อง ) ก็เป็นส่วนหนึ่งของคำนิยาม HIDL ด้วย
3.4
ส่วนเพิ่มเติมเล็กน้อยในข้อมูลเมตาที่รองรับและการเปลี่ยนแปลงการรองรับ data_space
- เพิ่มข้อมูลเมตาแบบคงที่
ANDROID_SENSOR_OPAQUE_RAW_SIZE
รายการเป็นข้อบังคับ หากรองรับรูปแบบRAW_OPAQUE
- เพิ่มแบบคงที่
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
รายการ ข้อมูลเมตาเป็นแบบบังคับ หากมีการรองรับรูปแบบ RAW ใดๆ - เปลี่ยนช่อง
camera3_stream_t data_space
เป็นฟิลด์ที่ยืดหยุ่นมากขึ้น โดยใช้การเข้ารหัสพื้นที่ข้อมูลเวอร์ชัน 0 - การเพิ่มข้อมูลเมตาทั่วไปที่พร้อมใช้งานสำหรับ HALv3.2 หรือใหม่กว่า
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
การแก้ไข HAL ความสามารถในการเพิ่มความสามารถในการทำงานเล็กน้อย
- OPAQUE และ YUV กำลังประมวลผลการอัปเดต API ใหม่
- การรองรับระดับพื้นฐานสำหรับบัฟเฟอร์เอาต์พุตของความลึก
- การเพิ่มช่อง
data_space
ไปยังcamera3_stream_t
- การเพิ่มช่องการหมุนเวียนใน
camera3_stream_t
- การเพิ่มโหมดการดำเนินการกำหนดค่าสตรีม Camera3 ใน
camera3_stream_configuration_t
3.2
การแก้ไข HAL ความสามารถในการเพิ่มความสามารถในการทำงานเล็กน้อย
- เลิกใช้งาน
get_metadata_vendor_tag_ops
ใช้get_vendor_tag_ops
ในcamera_common.h
แทน - เลิกใช้งาน
register_stream_buffers
บัฟเฟอร์ Gralloc ทั้งหมด จากเฟรมเวิร์กของ HAL ในprocess_capture_request
อาจเป็นข้อเสนอใหม่ ได้ทุกเมื่อ - เพิ่มการสนับสนุนผลลัพธ์บางส่วน
process_capture_result
อาจ เรียกใช้หลายครั้งด้วยชุดย่อยของผลการค้นหาที่มีอยู่ก่อนที่จะหมดเวลา แสดงผลลัพธ์ - เพิ่มเทมเพลตที่กำหนดเองลงใน
camera3_request_template
แอป อาจใช้เทมเพลตนี้เพื่อควบคุมการตั้งค่าการจับภาพโดยตรง - ปรับปรุงข้อกำหนดของสตรีมอินพุตและแบบ 2 ทิศทาง
- เปลี่ยนเส้นทางการย้อนกลับของบัฟเฟอร์อินพุต ระบบจะแสดงผลบัฟเฟอร์ใน
process_capture_result
แทนที่จะเป็นprocess_capture_request
3.1
การแก้ไข HAL ความสามารถในการเพิ่มความสามารถในการทำงานเล็กน้อย
configure_streams
ส่งการแจ้งการใช้งานของผู้บริโภคไปยัง HAL- ล้างการเรียกใช้เพื่อทิ้งคำขอ/บัฟเฟอร์ที่กำลังทำงานอยู่ทั้งหมดให้เร็วที่สุดเท่าที่จะเป็นไปได้
3.0
การแก้ไข HAL ความสามารถในการขยายครั้งแรก:
- การเปลี่ยนแปลงเวอร์ชันหลักเนื่องจาก ABI แตกต่างกันโดยสิ้นเชิง ไม่มีการเปลี่ยนแปลง ความสามารถของฮาร์ดแวร์ที่จำเป็นหรือรูปแบบการดำเนินงานจาก 2.0
- อินเทอร์เฟซคำขออินพุตและคิวสตรีมที่ปรับปรุงใหม่: การเรียกเฟรมเวิร์กเข้าสู่ HAL ที่มีคำขอและบัฟเฟอร์สตรีมถัดไปที่แยกคิวแล้ว การรองรับเฟรมเวิร์กการซิงค์ จำเป็นต่อการติดตั้งใช้งานที่มีประสิทธิภาพ
- ย้ายทริกเกอร์เข้าไปในคำขอ ส่วนใหญ่เป็นการแจ้งเตือนผลลัพธ์
- รวม Callback ทั้งหมดไว้ในเฟรมเวิร์กไว้ในโครงสร้างเดียวและการตั้งค่าทั้งหมด
ลงในการเรียก
initialize()
ครั้งเดียว - กำหนดค่าสตรีมเป็นการเรียกครั้งเดียวเพื่อลดความซับซ้อนของการจัดการสตรีม
สตรีมแบบ 2 ทิศทางแทนที่
STREAM_FROM_STREAM
จริงๆ - ความหมายของโหมดที่จำกัดสำหรับอุปกรณ์ฮาร์ดแวร์รุ่นเก่า/แบบจำกัด
2.0
การเปิดตัวครั้งแรกของ HAL ความสามารถในการขยาย (Android 4.2) [camera2.h]
- เพียงพอสำหรับการติดตั้งใช้งาน
android.hardware.Camera
ที่มีอยู่ API - อนุญาตคิว ZSL ในเลเยอร์บริการกล้อง
- ไม่มีการทดสอบฟีเจอร์ใหม่ เช่น การควบคุมการจับภาพด้วยตนเอง, Bayer RAW การดักจับ การประมวลผลข้อมูล RAW ซ้ำ ฯลฯ
1.0
กล้อง Android เริ่มต้น HAL (Android 4.0) [camera.h]:
- แปลงจากเลเยอร์แอบสแตรกของ C++ Camera hardwareInterface
- รองรับ
android.hardware.Camera
API
ประวัติเวอร์ชันโมดูลกล้อง
ส่วนนี้ประกอบด้วยข้อมูลการกำหนดเวอร์ชันโมดูลสำหรับฮาร์ดแวร์ของกล้อง
โดยอิงตาม camera_module_t.common.module_api_version
สอง
เลขฐานสิบหกที่มีนัยสำคัญมากที่สุดคือเลขรหัสหลัก และเลขสองหลักที่น้อยที่สุด
ที่สำคัญคือเวอร์ชันย่อย
2.4
โมดูลกล้องเวอร์ชันนี้เพิ่มการเปลี่ยนแปลง API ต่อไปนี้
- รองรับโหมดไฟฉาย เฟรมเวิร์กสามารถเปิดโหมดไฟฉายสำหรับ
อุปกรณ์กล้องถ่ายรูปที่มีชุดแฟลช โดยไม่ต้องเปิดอุปกรณ์กล้องถ่ายรูป
อุปกรณ์กล้องมีลำดับความสำคัญในการเข้าถึงหน่วยแฟลชมากกว่ากล้อง
module; การเปิดอุปกรณ์กล้องจะปิดไฟฉายหากเปิดใช้ไว้
ผ่านอินเทอร์เฟซโมดูล เมื่อมีความขัดแย้งของทรัพยากร เช่น
มีการเรียก
open()
ให้เปิดอุปกรณ์กล้อง ซึ่งเป็นโมดูล HAL ของกล้อง ต้องแจ้งเฟรมเวิร์กผ่าน Callback สถานะของโหมดไฟฉายว่าไฟฉาย ปิดโหมดแล้ว - รองรับกล้องภายนอก (เช่น กล้องแบบปลั๊ก USB)
การอัปเดต API ระบุว่าข้อมูลแบบคงที่ของกล้องจะใช้ได้เมื่อกล้องอยู่เท่านั้น
เชื่อมต่อแล้วและพร้อมใช้งานสำหรับกล้องฮ็อตปลั๊กภายนอก การเรียกเพื่อสร้างแบบคงที่
ข้อมูลเป็นการโทรที่ไม่ถูกต้องเมื่อสถานะของกล้องไม่ใช่
CAMERA_DEVICE_STATUS_PRESENT
เฟรมเวิร์กนี้นับเพียง การติดต่อกลับเพื่อเปลี่ยนสถานะของอุปกรณ์เพื่อจัดการรายการกล้องภายนอกที่มี - คำแนะนำการชี้ขาดด้วยกล้อง เพิ่มการสนับสนุนสำหรับการระบุอย่างชัดเจน
จำนวนอุปกรณ์กล้องที่เปิดและใช้งานได้พร้อมกัน ถึง
ระบุชุดค่าผสมของอุปกรณ์ที่ถูกต้อง
resource_cost
และ ควรตั้งค่าฟิลด์conflicting_devices
ไว้ในget_camera_info
แสดงผลโครงสร้างcamera_info
แล้ว การโทร - วิธีการเริ่มต้นโมดูล เรียกใช้โดยบริการกล้อง หลังจากโหลดโมดูล HAL เพื่อให้สามารถเริ่มต้น HAL ได้เพียงครั้งเดียว ซึ่งจะเรียกใช้ก่อนที่จะเรียกใช้เมธอดโมดูลอื่นๆ
2.3
โมดูลกล้องเวอร์ชันนี้เพิ่มการรองรับอุปกรณ์ระดับ HAL ของกล้องแบบเดิมแบบเปิด
เฟรมเวิร์กสามารถใช้เฟรมเวิร์กเพื่อเปิดอุปกรณ์กล้องเป็นเวอร์ชัน HAL ที่ต่ำกว่าของอุปกรณ์
อุปกรณ์ HAL หากอุปกรณ์เดียวกันสามารถรองรับ API อุปกรณ์หลายเวอร์ชัน
การประชุมแบบเปิดของโมดูลฮาร์ดแวร์มาตรฐาน
(common.methods->open
) ดำเนินต่อไป
เพื่อเปิดอุปกรณ์กล้องที่มีเวอร์ชันล่าสุดที่รองรับ ซึ่งได้แก่
ซึ่งเป็นเวอร์ชันที่แสดงใน camera_info_t.device_version
ด้วย
2.2
โมดูลกล้องเวอร์ชันนี้เพิ่มการรองรับแท็กผู้ให้บริการจากโมดูล และ
เลิกใช้งาน vendor_tag_query_ops
เดิมที่ก่อนหน้านี้ใช้เพียง
เข้าถึงได้เมื่อเปิดอุปกรณ์ไว้
2.1
โมดูลกล้องเวอร์ชันนี้เพิ่มการรองรับ Callback แบบไม่พร้อมกันไปยังฟังก์ชัน
จากโมดูล HAL ของกล้อง ซึ่งใช้เพื่อแจ้งเฟรมเวิร์ก
เกี่ยวกับการเปลี่ยนแปลงสถานะของโมดูลกล้อง โมดูลที่ระบุฟิลด์
เมธอด set_callbacks()
ต้องรายงานหมายเลขเวอร์ชันนี้เป็นอย่างน้อย
2.0
โมดูลกล้องที่รายงานหมายเลขเวอร์ชันนี้ใช้เวอร์ชัน 2
ของอินเทอร์เฟซ HAL ของโมดูลกล้อง อุปกรณ์กล้องที่เปิดด้วยได้
โมดูลอาจสนับสนุนอุปกรณ์กล้องรุ่น 1.0 หรือ 2.0
อินเทอร์เฟซ HAL ช่อง device_version
ของ Camera_info จะเป็นค่าเสมอ
ถูกต้อง; ฟิลด์ static_camera_characteristics
ของ
camera_info
จะใช้ได้ก็ต่อเมื่อฟิลด์ device_version
คือ
2.0 ขึ้นไป
1.0
โมดูลกล้องที่รายงานหมายเลขเวอร์ชันเหล่านี้ใช้แท็กเริ่มต้น
อินเทอร์เฟซ HAL ของโมดูลกล้อง อุปกรณ์กล้องทั้งหมดที่สามารถเปิดผ่าน
โมดูลรองรับเฉพาะ HAL ของอุปกรณ์กล้องเวอร์ชัน 1 เท่านั้น
device_version
และ static_camera_characteristics
ช่อง camera_info
ไม่ถูกต้อง เฉพาะ
โมดูลนี้และโมดูลรองรับ API ของ android.hardware.Camera
ได้
อุปกรณ์