HAL ของกล้อง

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

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

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

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

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

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

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

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

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

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

ชุดของแพลตฟอร์มเอาต์พุตที่เป็นไปได้ได้รับการกำหนดค่าไว้ล่วงหน้าแล้ว ดังนี้

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

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

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

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

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

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

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

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

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

รูปที่ 2 ส่วนประกอบกล้อง

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

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