HAL ของกล้อง

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

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

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

ฟีเจอร์ของ Camera HAL3

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

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

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

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

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

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

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

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

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

รูปที่ 1 รูปแบบการทํางานหลักของกล้อง

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

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

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

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

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

รูปที่ 2 ชิ้นส่วนของกล้อง

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

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