กล้อง HAL

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

ข้อมูลจำเพาะ HAL ของกล้อง AIDL อยู่ในตำแหน่งต่อไปนี้:

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

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

หากต้องการทดสอบการใช้งาน HAL ของกล้อง AIDL โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์ผ่านการทดสอบ 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 โดยจะแปลงคำขอจับภาพแต่ละรายการเป็นภาพเดียวที่เซ็นเซอร์จับ ซึ่งจะถูกประมวลผลเป็น:

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

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

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

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

แบบจำลองข้อมูลกล้อง

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

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

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

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

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

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

รูปภาพ 2 ส่วนประกอบของกล้อง

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

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