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