HAL ของกล้อง

เลเยอร์ฮาร์ดแวร์แอบสแตรกชัน (HAL) ของกล้องใน Android จะเชื่อมต่อ API ของเฟรมเวิร์กกล้องระดับสูงกว่า ใน android.hardware.camera2 กับไดรเวอร์และฮาร์ดแวร์กล้องพื้นฐาน ตั้งแต่ Android 13 เป็นต้นไป การพัฒนาอินเทอร์เฟซ HAL ของกล้อง จะใช้ AIDL Android 8.0 ได้เปิดตัว Treble ซึ่งเปลี่ยน 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 อยู่ในตำแหน่งต่อไปนี้

สำหรับอุปกรณ์ที่ย้ายข้อมูลไปยัง AIDL ผู้ผลิตอุปกรณ์อาจต้องแก้ไข นโยบาย SELinux (sepolicy) ของ Android และไฟล์ RC ทั้งนี้ขึ้นอยู่กับโครงสร้างโค้ด

ตรวจสอบ HAL ของกล้องใน AIDL

หากต้องการทดสอบการใช้งาน HAL ของกล้องใน AIDL ให้ตรวจสอบว่าอุปกรณ์ผ่านการทดสอบ CTS และ VTS ทั้งหมด Android 13 ได้เปิดตัวการทดสอบ VTS ของ AIDL test, VtsAidlHalCameraProvider_TargetTest.cpp.

ฟีเจอร์ HAL3 ของกล้อง

การออกแบบใหม่ของ Android Camera API มีเป้าหมายเพื่อเพิ่มความสามารถของแอปในการควบคุมระบบย่อยของกล้องในอุปกรณ์ Android อย่างมาก พร้อมทั้งจัดระเบียบ API ใหม่เพื่อให้มีประสิทธิภาพและดูแลรักษาได้ง่ายขึ้น การควบคุมเพิ่มเติมนี้ช่วยให้สร้างแอปกล้องคุณภาพสูงในอุปกรณ์ Android ได้ง่ายขึ้น ซึ่งแอปจะทำงานได้อย่างน่าเชื่อถือในผลิตภัณฑ์หลายรายการ ขณะที่ยังคงใช้อัลกอริทึมเฉพาะของอุปกรณ์เมื่อเป็นไปได้เพื่อเพิ่มคุณภาพและประสิทธิภาพสูงสุด

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

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

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

  • ออบเจ็กต์ผลลัพธ์ที่มีข้อมูลเมตาเกี่ยวกับการจับภาพ
  • บัฟเฟอร์ข้อมูลรูปภาพ 1 ถึง N รายการ โดยแต่ละรายการจะอยู่ในพื้นผิวปลายทางของตัวเอง

ระบบจะกำหนดค่าพื้นผิวเอาต์พุตที่เป็นไปได้ไว้ล่วงหน้าดังนี้

  • แต่ละพื้นผิวเป็นปลายทางสำหรับสตรีมบัฟเฟอร์รูปภาพที่มีความละเอียดคงที่
  • คุณกำหนดค่าพื้นผิวเป็นเอาต์พุตได้เพียงจำนวนเล็กน้อยในครั้งเดียว (~3)

คำขอจะมีข้อมูลการตั้งค่าการจับภาพที่ต้องการทั้งหมดและรายการพื้นผิวเอาต์พุตที่จะส่งบัฟเฟอร์รูปภาพเข้าไปสำหรับคำขอนี้ (จากชุดที่กำหนดค่าไว้ทั้งหมด) คำขออาจเป็นแบบครั้งเดียว (ด้วย capture()) หรืออาจทำซ้ำไปเรื่อยๆ (ด้วย setRepeatingRequest()) โดยการจับภาพจะมีลำดับความสำคัญสูงกว่าคำขอที่ทำซ้ำ

โมเดลข้อมูลกล้อง

รูปที่ 1 โมเดลการทำงานหลักของกล้อง

ภาพรวม HAL1 ของกล้อง

ระบบย่อยของกล้องเวอร์ชัน 1 ได้รับการออกแบบเป็นกล่องดำที่มีการควบคุมระดับสูงและโหมดการทำงาน 3 โหมดต่อไปนี้

  • แสดงตัวอย่าง
  • บันทึกวิดีโอ
  • จับภาพนิ่ง

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

แผนภาพบล็อกของกล้อง

รูปที่ 2 คอมโพเนนต์ของกล้อง

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

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