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

รูปที่ 1 รูปแบบการทำงานหลักของกล้อง
ภาพรวม HAL1 ของกล้อง
ระบบย่อยของกล้องเวอร์ชัน 1 ได้รับการออกแบบให้เป็นกล่องดำที่มีการควบคุมระดับสูง และโหมดการทำงาน 3 โหมดต่อไปนี้
- แสดงตัวอย่าง
- บันทึกวิดีโอ
- การจับภาพนิ่ง
แต่ละโหมดจะมีความสามารถที่แตกต่างกันเล็กน้อยและทับซ้อนกัน จึงทำให้การใช้ฟีเจอร์ใหม่ๆ เช่น โหมดถ่ายภาพต่อเนื่อง ซึ่งอยู่ระหว่างโหมดการทำงาน 2 โหมดเป็นเรื่องยาก

รูปที่ 2 ส่วนประกอบของกล้อง
Android 7.0 ยังคงรองรับ HAL1 ของกล้อง เนื่องจากอุปกรณ์จำนวนมากยังคงใช้ HAL1 นอกจากนี้ บริการกล้องของ Android ยังรองรับการใช้งานทั้ง HAL (1 และ 3) ซึ่งมีประโยชน์เมื่อคุณต้องการรองรับกล้องหน้าที่มีประสิทธิภาพน้อยกว่า ด้วย HAL1 ของกล้อง และกล้องหลังที่มีประสิทธิภาพมากกว่าด้วย HAL3 ของกล้อง
มี HAL โมดูลกล้องเดียว (พร้อมหมายเลข เวอร์ชันของตัวเอง) ซึ่งแสดงอุปกรณ์กล้องอิสระหลายตัวที่แต่ละตัวมีหมายเลขเวอร์ชันของตัวเอง ต้องใช้โมดูลกล้องเวอร์ชัน 2 ขึ้นไปเพื่อรองรับ อุปกรณ์เวอร์ชัน 2 ขึ้นไป และโมดูลกล้องดังกล่าวอาจมีอุปกรณ์กล้อง หลายเวอร์ชัน (นี่คือสิ่งที่เราหมายถึงเมื่อบอกว่า Android รองรับการใช้ทั้ง HAL)