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

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

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