เลเยอร์การแยกแยะฮาร์ดแวร์ของกล้อง (HAL) ของ Android จะเชื่อมต่อ API ของเฟรมเวิร์กกล้องในระดับที่สูงขึ้นใน android.hardware.camera2 กับไดรเวอร์และฮาร์ดแวร์ของกล้องที่อยู่เบื้องล่าง ตั้งแต่ Android 13 เป็นต้นไป การพัฒนาอินเทอร์เฟซ HAL ของกล้องจะใช้ AIDL Android 8.0 เปิดตัว Treble ซึ่งเปลี่ยน Camera HAL API เป็นอินเทอร์เฟซที่เสถียรซึ่งกำหนดโดยภาษาที่ใช้อธิบายอินเทอร์เฟซ HAL (HIDL) หากคุณเคยพัฒนาโมดูลและไดรเวอร์ HAL ของกล้องสำหรับ Android 7.0 และต่ำกว่า โปรดทราบว่ามีการเปลี่ยนแปลงที่สำคัญในไปป์ไลน์ของกล้อง
HAL กล้อง AIDL
สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไป เฟรมเวิร์กกล้องจะรองรับ HAL ของกล้อง AIDL เฟรมเวิร์กกล้องยังรองรับ HAL ของกล้อง HIDL ด้วย แต่ฟีเจอร์กล้องที่เพิ่มใน Android 13 ขึ้นไปจะใช้ได้ผ่านอินเทอร์เฟซ HAL ของกล้อง AIDL เท่านั้น หากต้องการใช้ฟีเจอร์ดังกล่าวในอุปกรณ์ที่อัปเกรดเป็น Android 13 ขึ้นไป ผู้ผลิตอุปกรณ์จะต้องย้ายข้อมูลกระบวนการ HAL จากการใช้อินเทอร์เฟซกล้อง HIDL ไปใช้อินเทอร์เฟซกล้อง AIDL
ดูข้อมูลเกี่ยวกับข้อดีของ AIDL ได้ที่ AIDL สําหรับ HAL
ใช้ HAL ของกล้อง AIDL
สำหรับการอ้างอิงการใช้งาน HAL ของกล้อง AIDL โปรดดู
hardware/google/camera/common/hal/aidl_service/
ข้อกำหนด HAL ของกล้อง AIDL อยู่ในตำแหน่งต่อไปนี้
- ผู้ให้บริการกล้อง:
hardware/interfaces/camera/provider/aidl/
- อุปกรณ์กล้อง:
hardware/interfaces/camera/device/aidl/
- ข้อมูลเมตาของกล้อง:
hardware/interfaces/camera/metadata/aidl/
- ประเภทข้อมูลทั่วไป:
hardware/interfaces/camera/common/aidl/
สำหรับอุปกรณ์ที่ย้ายข้อมูลไปยัง AIDL ผู้ผลิตอุปกรณ์อาจต้องแก้ไข นโยบาย Android SELinux (sepolicy) และไฟล์ RC โดยขึ้นอยู่กับโครงสร้างโค้ด
ตรวจสอบ HAL กล้อง AIDL
หากต้องการทดสอบการใช้งาน HAL ของกล้อง AIDL ให้ตรวจสอบว่าอุปกรณ์ผ่านการทดสอบ CTS และ VTS ทั้งหมด Android 13 เปิดตัวการทดสอบ VTS ของ AIDL
VtsAidlHalCameraProvider_TargetTest.cpp
ฟีเจอร์ของ Camera HAL3
เป้าหมายของการออกแบบใหม่สำหรับ Android Camera API คือการเพิ่มความสามารถของแอปในการควบคุมระบบย่อยของกล้องในอุปกรณ์ Android อย่างมาก พร้อมกับจัดระเบียบ API ใหม่เพื่อให้มีประสิทธิภาพและบำรุงรักษาได้ง่ายขึ้น การควบคุมเพิ่มเติมนี้ช่วยให้สร้างแอปกล้องคุณภาพสูงในอุปกรณ์ Android ได้ง่ายขึ้น ซึ่งสามารถทำงานได้อย่างน่าเชื่อถือในผลิตภัณฑ์หลายรายการ ขณะเดียวกันก็ยังคงใช้อัลกอริทึมเฉพาะอุปกรณ์ทุกครั้งที่เป็นไปได้เพื่อเพิ่มคุณภาพและประสิทธิภาพสูงสุด
ระบบย่อยของกล้องเวอร์ชัน 3 จัดโครงสร้างโหมดการทำงานให้เป็นมุมมองแบบรวมเดียว ซึ่งสามารถใช้เพื่อใช้งานโหมดก่อนหน้าและโหมดอื่นๆ อีกหลายโหมด เช่น โหมดต่อเนื่อง การดำเนินการนี้ช่วยให้ผู้ใช้ควบคุมโฟกัสและการรับแสงได้ดียิ่งขึ้น รวมถึงมีการปรับแต่งหลังการประมวลผลเพิ่มเติม เช่น การลดสัญญาณรบกวน คอนทราสต์ และการเพิ่มความคมชัด นอกจากนี้ มุมมองอย่างง่ายนี้ยังทำให้นักพัฒนาแอปพลิเคชันใช้ฟังก์ชันต่างๆ ของกล้องได้ง่ายขึ้น
API จะจำลองระบบย่อยของกล้องเป็นไปป์ไลน์ที่แปลงคำขอขาเข้าสำหรับการจับเฟรมเป็นเฟรมแบบ 1:1 คำขอจะสรุปข้อมูลการกำหนดค่าทั้งหมดเกี่ยวกับการจับภาพและการประมวลผลเฟรม ซึ่งรวมถึงความละเอียดและรูปแบบพิกเซล การควบคุมเซ็นเซอร์ เลนส์ และแฟลชด้วยตนเอง โหมดการทำงานของ 3A การควบคุมการประมวลผล RAW->YUV การสร้างสถิติ และอื่นๆ
พูดง่ายๆ คือ เฟรมเวิร์กแอปพลิเคชันจะขอเฟรมจากระบบย่อยของกล้อง และระบบย่อยของกล้องจะแสดงผลไปยังสตรีมเอาต์พุต นอกจากนี้ ระบบจะสร้างข้อมูลเมตาที่มีข้อมูล เช่น พื้นที่สีและเฉดสีเลนส์สำหรับผลลัพธ์แต่ละชุด กล้องเวอร์ชัน 3 เป็นเหมือนไปป์ไลน์ การสตรีมทางเดียวของกล้องเวอร์ชัน 1 โดยจะแปลงคำขอจับภาพแต่ละรายการเป็นภาพเดียวที่เซ็นเซอร์จับได้ ซึ่งจะประมวลผลเป็นสิ่งต่อไปนี้
- ออบเจ็กต์ผลลัพธ์ที่มีข้อมูลเมตาเกี่ยวกับการจับภาพ
- บัฟเฟอร์ 1 ถึง N ของข้อมูลรูปภาพ โดยแต่ละบัฟเฟอร์ไปยังแพลตฟอร์มปลายทางของตนเอง
ชุดของแพลตฟอร์มเอาต์พุตที่เป็นไปได้ได้รับการกำหนดค่าไว้ล่วงหน้าแล้ว ดังนี้
- แต่ละพื้นผิวเป็นปลายทางสําหรับสตรีมบัฟเฟอร์รูปภาพที่มีความละเอียดคงที่
- คุณกำหนดค่าพื้นผิวเป็นเอาต์พุตได้เพียงไม่กี่รายการพร้อมกัน (~3)
คำขอจะมีการตั้งค่าการจับภาพที่ต้องการทั้งหมดและรายการแพลตฟอร์มเอาต์พุตที่จะส่งบัฟเฟอร์รูปภาพสำหรับคำขอนี้ (จากชุดที่กําหนดค่าไว้ทั้งหมด) คำขออาจเป็นแบบดำเนินการครั้งเดียว (มี capture()
) หรืออาจทำซ้ำได้แบบไม่จำกัด (มี setRepeatingRequest()
) การบันทึกจะมีความสำคัญเหนือกว่าคำขอที่ซ้ำกัน
ภาพรวม HAL1 ของกล้อง
ระบบย่อยของกล้องเวอร์ชัน 1 ได้รับการออกแบบให้เป็นกล่องดำที่มีการควบคุมระดับสูงและโหมดการทํางาน 3 โหมดต่อไปนี้
- แสดงตัวอย่าง
- การบันทึกวิดีโอ
- การจับภาพนิ่ง
โดยแต่ละโหมดจะมีความสามารถที่ทับซ้อนกันและแตกต่างกันเล็กน้อย ซึ่งทำให้การนำฟีเจอร์ใหม่ๆ มาใช้ เช่น โหมดถ่ายภาพต่อเนื่อง ซึ่งอยู่ตรงกลางระหว่างโหมดการทํางาน 2 โหมดนั้นเป็นเรื่องยาก
Android 7.0 จะยังคงรองรับ HAL1 ของกล้องต่อไปเนื่องจากอุปกรณ์จํานวนมากยังคงใช้ HAL1 นอกจากนี้ บริการกล้อง Android ยังรองรับการใช้ทั้ง HAL (1 และ 3) ซึ่งมีประโยชน์เมื่อคุณต้องการรองรับกล้องหน้าที่มีความสามารถน้อยกว่าด้วย HAL1 ของกล้อง และกล้องหลังที่ล้ำสมัยกว่าด้วย HAL3 ของกล้อง
มีโมดูล HAL ของกล้องเพียงโมดูลเดียว (มีหมายเลขเวอร์ชันของตัวเอง) ซึ่งแสดงรายการอุปกรณ์กล้องอิสระหลายรายการที่แต่ละรายการมีหมายเลขเวอร์ชันของตัวเอง ต้องใช้โมดูลกล้อง 2 ขึ้นไปเพื่อรองรับอุปกรณ์ 2 ขึ้นไป และโมดูลกล้องดังกล่าวอาจใช้ร่วมกับอุปกรณ์กล้องเวอร์ชันต่างๆ ได้ (นี่คือความหมายที่เราบอกว่า Android รองรับการใช้งาน HAL ทั้ง 2 เวอร์ชัน)